这是一种防止sql注入的安全方法吗?

时间:2014-04-12 19:11:05

标签: php sql security sql-injection

我需要一些关于我的PHP编码的意见。如果这对于sql注射是安全的,我特别好奇。显然它似乎是,但我可能是错的。

你怎么看待这种"风格"编码,如,是可接受的还是非常糟糕的做法?

$validinputs = array(1,9,21,'a','b');

if(in_array($_GET['search'], $validinputs))
{
  $queryfilter = " = " . $_GET['search'];
}
else
{
  $queryfilter = "IS NOT NULL";
}

(...)

$query = "SELECT * FROM `table` WHERE `field` {$queryfilter}";

谢谢!

编辑:在这种情况下,我与$ validinputs进行比较,因为这些是该字段唯一有效的搜索字词,任何其他搜索字词都不返回任何内容。

2 个答案:

答案 0 :(得分:1)

在我看来,这是可以接受的,但根本不是好的做法。为什么不使用标准的SQL转义函数?当包装在类中时,它们非常强大且可维护。当你需要经常以这种方式逃避字符串时,我不认为有人想维护你的应用程序/脚本。可能造成巨大的混乱。

答案 1 :(得分:0)

理想情况下,您使用存储过程,您的查询将如此......

$query = "call find_in_table('" . $_GET['search'] . "')";

...但是因为你有一个可接受的输入列表,并且在将它们传递给查询字符串之前非常严格地过滤它们,我会说你对SQL注入非常安全并且使用存储过程将是一个性能增强对你来说比安全功能更多。