关于编写函数以防止SQL注入的建议

时间:2011-10-29 03:35:01

标签: php sql-injection

我正在寻找一个将这个结合起来的功能:

mysql_real_escape_string(htmlentities(trim($_POST[''])));

进入这个:

secFunction($_POST['']);

为了简化事情。虽然不太确定如何写它。建议? :)

3 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

function secFunction($string) {
  return mysql_real_escape_string(htmlentities(trim($string)));
}

$clean_string = secFunction($_POST['something']);

答案 1 :(得分:0)

这是我喜欢用于转义SQL字符串的函数。

function escape($data) {
    $magicQuotes = get_magic_quotes_gpc();

    if(function_exists('mysql_real_escape_string')) {
        if($magicQuotes) {
            $data = stripslashes($data);
        }

        $data = mysql_real_escape_string($data);
    }
    else {
        if(!$magicQuotes) {
            $data = addslashes($data);
        }
    }

    return $data;
}

然后您可以像这样使用它:

$myString = isset($_POST['key']) ? escape($_POST['key']) : '';

如果你愿意,你可以添加htmlentities和trim,但我更喜欢单独这样做。

答案 2 :(得分:-1)

使用mysql_real_escape_string转义不会阻止注入。

和htmlentities与注射完全没有关系。

并且这些功能永远不会被合并。

你必须使用某种占位符来防止注入,这样的占位符必须是本机预处理语句或用数据替换,这些数据被转义为和引用,因为转义只适用于数据用引号括起来。