0

我正在执行以下操作以保护提交的数据免受 sql 攻击

$myusername = stripslashes($myusername);
$myusername = mysql_real_escape_string($myusername);
$mypassword = stripslashes($mypassword);
$mypassword = mysql_real_escape_string($mypassword);
$confirm_password = stripslashes($confirm_password);
$confirm_password = mysql_real_escape_string($confirm_password);
$fullname = stripslashes($fullname);
$fullname = mysql_real_escape_string($fullname);

有没有更简单的方法来做到这一点?这是一个注册表单,我有许多领域需要保护。

4

2 回答 2

1

有没有更简单的方法来做到这一点?

是的,首先,禁用自动斜线,所以你不需要剥离它们。这将减少代码已经:

$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$confirm_password = mysql_real_escape_string($confirm_password);
$fullname = mysql_real_escape_string($fullname);

如果您随后使用所谓的参数化查询,您甚至不需要再调用mysql_real_escape_string,但您可以安全地使用变量。

请注意,您使用的是 unsafe 变体,mysql_real_escape_string因为您没有提供指向它的数据库链接。

另请参阅:在 PHP 中停止 SQL 注入的最佳方法

于 2012-04-10T18:10:29.250 回答
0

是的,使用 PHP 的PDO 对象(PHP 数据库对象)并创建准备好的语句。

$dbh = new PDO('mysql:dbname=YOURDB;host=localhost', 'user', 'pass');
$sql = 'SELECT name FROM user WHERE id = :id';
$sth = $dbh->prepare($sql);
$sth->execute(array(':id' => 25);
$result = $sth->fetchAll();

它还可以帮助您知道您可以寻找 PDO Wrapper 来让您的生活更轻松。

于 2012-04-10T18:13:51.173 回答