【发布时间】:2012-05-11 01:46:24
【问题描述】:
我有这行:
$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));
}
【问题讨论】:
-
该语句对我来说看起来很安全,除非您只需要确保 $p 始终是该语句之前的数字。
-
永远不要消毒。逃脱。清理取决于您了解所有可能的攻击途径并专门针对它进行过滤。每当发现新的攻击路线时,您的功能就毫无用处。而转义处理所有攻击。
-
如果您担心 SQL 注入攻击,那么您应该通过存储过程和视图来限制数据库访问。也就是说,特定的查询看起来很安全,尤其是因为 $p 是由函数检查的。
-
@GordonLinoff 参数化查询可以提供与存储过程相同的“安全性”。
-
@Marc B:对不起,我想我可能使用了错误的词“消毒”,这正是我所说的我的功能(见操作编辑)
标签: php sql code-injection