SQL注入:这条线路安全吗?

时间:2012-05-11 01:46:24

标签: php sql code-injection

我有这一行:

$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)); 
}

2 个答案:

答案 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';

那不是很漂亮......

相关问题