通常,我使用类似这样的方法来过滤输入。如图所示,使用preg_match( )
,有时使用switch( )
仅在POST / GET变量是特定数量的关键字之一时才起作用。
if (preg_match("/^[0-9]+$/",$_POST['id_to_clear']))
{
db_query("UPDATE `table` SET `error`=0, `progress`=0 WHERE `id` = {$_POST['id']}");
}
通常来说,直接在SQL查询中使用POST / GET变量是一个巨大的危险信号。但是在这种情况下,它似乎绝对安全。有什么办法可以解决这个问题吗?我没看到什么?
答案 0 :(得分:2)
您可能应该只在此处使用准备好的语句,PHP提供了许多实现此功能的API。话虽如此,如果以下正则表达式通过:
preg_match("/^[0-9]+$/", $_POST['id_to_clear'])
然后id_to_clear
的POST值应仅包含数字,在这种情况下,我看不到可以注入您向我们显示的查询的任何方式。
但是当心,因为即使现在情况可能安全了,将来您的查询也可能有问题。没有太多困难,我可以想象稍后进行重构,该重构再次将查询公开给SQL注入。因此,请坚持声明,除非有令人信服的理由这样做。