这个解决方案是否足以阻止SQL注入

时间:2017-03-19 12:27:25

标签: php sql pdo

我制作了简单的PHP搜索脚本,但我不确定这个解决方案是否足以避免sql注入。

我唯一的输入是搜索查询输入。问题是,当有人提交我的表单时,javascript必须将%字符推送到查询字符串的开头和结尾,并且还必须用%替换所有空格和特殊字符。之后使用GET方法将其发送到我的服务器上。

使用PDO(execute([$query]),而不是bindParam),并使用if语句,我检查第一个字符和空格,是否足以阻止sql注入?

if($_GET['query'][0]!='%' || preg_match('/\s/',$_GET['query'])) {
   die();}

我的意思是,我无法想象没有空格的SQL查询以及'%'在零指数处。

2 个答案:

答案 0 :(得分:0)

  

使用PDO(执行([$ query]),而不是bindParam)

bindParam / bindValue不会使您的查询安全,但会在查询中使用:parameter。只要您将查询中的所有变量替换为参数,您的查询就是100%安全的。

所以你可以说使用execute()就足够了,你不需要任何其他东西来阻止SQL注入。

答案 1 :(得分:-1)

除非你知道自己在做什么,并且你有安全和测试经验,否则千万不要自己动手。不要试图通过转义或正则表达式来防止sql注入。

Chars可以通过您无法想象的方式逃脱。安全库将比您的代码更快地进行维护和更新。

将此攻击视为破坏代码https://websec.wordpress.com/2010/03/19/exploiting-hard-filtered-sql-injections/

的示例