我有一个通过POST请求获取数据的应用程序。我正在使用此数据将新行插入数据库。我知道使用mysql_real_escape_string()
(加上删除%和_)是获取字符串的方法,但整数值呢?现在,我正在使用PHP函数intval()
。
但是,我想确保intval()
非常安全。当变量首先通过intval()
运行时,我无法看到攻击者预先形成SQL注入攻击的方式(因为它总是返回一个整数),但是我想确保来自有人的情况就是这种情况。比我更有经验。
感谢。
答案 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