我有这一行:
$sql = "UPDATE votes SET up=up+1 WHERE id='{$p}'";
现在从我所看到的一种sql注入方式是由于没有正确“关闭”sql查询而导致黑客添加其他信息。
所以我的问题是,对于我而言up=up+1
尚未“关闭”,但是如果我将其设置为up='up+1'
这对我来说是“关闭”它不是工作
排队类型为int(11)
。
更新
$p
使用函数
function sanitize($foo) {
if(get_magic_quotes_gpc() == true) {
$foo = stripslashes($foo);
}
return mysql_real_escape_string(htmlspecialchars($foo));
}
答案 0 :(得分:4)
up=up+1
不容易受到攻击,因为它不接受通过变量的用户输入。它只是递增数据库中已存在的INT
值。
WHERE id='{$p}'
可能易受攻击,但是,如果变量$p
未正确过滤和转义,但正如您在上面添加的那样,它已被功能清理。希望sanitize函数能够检查变量的适当类型(无论是int还是字符串或其他),并检查它的相应边界。
与往常一样,最安全的方法是使用预准备语句和参数化查询,而不是将任何变量直接传递给SQL字符串。 PHP中可用于各种RDBMS的大多数数据库API支持预处理语句。 (但值得注意的是不 mysql_*()
函数。)
答案 1 :(得分:1)
除非$p
被正确转义,否则不安全。否则想象......
$ p =“foo”; DROP TABLE votes; SELECT'1“
然后你最终会执行类似的事情:
UPDATE votes SET up=up+1 WHERE id='foo'; DROP TABLE votes; SELECT '1';
那不是很漂亮......