消毒整数数据库输入

时间:2010-07-08 21:16:12

标签: php mysql

我有一个通过POST请求获取数据的应用程序。我正在使用此数据将新行插入数据库。我知道使用mysql_real_escape_string()(加上删除%和_)是获取字符串的方法,但整数值呢?现在,我正在使用PHP函数intval()

但是,我想确保intval()非常安全。当变量首先通过intval()运行时,我无法看到攻击者预先形成SQL注入攻击的方式(因为它总是返回一个整数),但是我想确保来自有人的情况就是这种情况。比我更有经验。

感谢。

4 个答案:

答案 0 :(得分:21)

是的,intval()是安全的。当参数转换为整数时,绝对没有办法执行SQL注入,因为(显然)整数的格式不允许在其中放置SQL关键字(或引号或其他)。

答案 1 :(得分:4)

防止SQL注入的最简单方法是始终使用准备好的语句。使用mysqli库或更好的ORM,如教义等。

您的查询将变为:

$stmt = $db->prep_stmt("select * from .... where userid = ? and username = ?");

/* Binding 2 parameters. */
$stmt->bind_param("is", $userid, $username);

$userid = 15;
$username = "don";

/* Executing the statement */
$stmt->execute( ) or die ("Could not execute statement");

答案 2 :(得分:2)

我总是这样做

$var = (int)$_POST['var'];

确保在所有情况下将$ var作为整数处理,并且永远不要再查看$ _POST ['var']。查看手册,intval()完全相同。

无论你采用哪种方式,在子序列中$ var都是一个实际的整数,这是非常安全的。

答案 3 :(得分:2)

Prepared语句是处理sql注入的最佳方式。 或使用PDO 否则,intval优于is_numeric