我制作了简单的PHP搜索脚本,但我不确定这个解决方案是否足以避免sql注入。
我唯一的输入是搜索查询输入。问题是,当有人提交我的表单时,javascript必须将%
字符推送到查询字符串的开头和结尾,并且还必须用%
替换所有空格和特殊字符。之后使用GET方法将其发送到我的服务器上。
使用PDO(execute([$query])
,而不是bindParam),并使用if语句,我检查第一个字符和空格,是否足以阻止sql注入?
if($_GET['query'][0]!='%' || preg_match('/\s/',$_GET['query'])) {
die();}
我的意思是,我无法想象没有空格的SQL查询以及'%'在零指数处。
答案 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/
的示例