1

可能重复:
如何防止 SQL 注入?

这是我清理我将要放入数据库的内容的尝试

$pictureID = $_REQUEST['pictureID'];
$userID = $_REQUEST['userID'];
$username = $_REQUEST['username'];

//Sanatize //Protext against injection

$username = filter_var($username, FILTER_SANITIZE_EMAIL);
$userID = filter_var($userID, FILTER_SANITIZE_STRING);
$pictureID = filter_var($pictureID, FILTER_SANITIZE_STRING);

$username = stripslashes($username);
$username = mysql_real_escape_string($username);

$userID = stripslashes($userID);
$userID = mysql_real_escape_string($userID);

$pictureID = stripslashes($pictureID);
$pictureID = mysql_real_escape_string($pictureID);

我有两个问题,以上就够了吗?

另外,如果我什么都不做echo $pictureID,但是,如果我删除$pictureID = mysql_real_escape_string($pictureID);thenecho $pictureID作品。

这是正确的行为吗?

4

2 回答 2

3

哇...

你真的不需要那么多。

尝试将 PDO 或 mysqli 与准备好的查询一起使用,那么就不需要所有这些废话了。


请参阅此罐头评论以获取建议:

请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2012-12-20T17:47:10.480 回答
1

为了防止 SQL 注入,唯一需要的调用是:

  $pictureID = mysql_real_escape_string( $pictureID );

此方法调用有效地转义了所有特殊字符,这可能会更改查询的预期操作。

正如@NullPointer 指出的那样,使用PHP 的 PDO将是一个不错的选择,因为 mysql_* 自 PHP 5.5+ 起已弃用。尽管如此,我认为它不会很快从 PHP 中完全删除。

于 2012-12-20T17:58:05.473 回答