Php 这个解决方案足以阻止SQL注入吗

Php 这个解决方案足以阻止SQL注入吗,php,sql,pdo,Php,Sql,Pdo,我制作了简单的PHP搜索脚本,但我不确定这个解决方案是否足以避免sql注入 我仅有的输入是搜索查询输入。问题是,当有人提交我的表单时,javascript必须将%字符推到查询字符串的开头和结尾,还必须用%替换所有空格和特殊字符。然后使用GET方法将其发送到服务器上 使用PDO(execute([$query]),而不是bindParam),并使用下面的if语句(我检查第一个字符和空格),是否足以阻止sql注入 if($_GET['query'][0]!='%' || preg_match('/\

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

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

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

if($_GET['query'][0]!='%' || preg_match('/\s/',$_GET['query'])) {
   die();}
我的意思是,我无法想象SQL查询没有空格,索引为零的是“%”

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

使查询安全的不是
bindParam
/
bindValue
,而是查询中使用的
:参数
。只要用参数替换查询中的所有变量,查询就100%安全


因此,您可以看出,使用execute()就足够了,您不需要任何其他东西来阻止SQL注入。

除非您确切知道自己在做什么,并且您在安全性和测试方面有经验,否则不要尝试自己做。不要试图通过转义或正则表达式来防止sql注入

当你没有经验的时候,可以用你想象不到的方式逃脱魔咒。安全库的维护和更新速度将比代码快


将此攻击视为破坏代码的示例

使用参数有什么特别困难的地方吗?@GordonLinoff哪些参数依赖于代码的其余部分,在开头和结尾添加一个%并用%替换空格不会改变sql注入风险。否,这还不足以阻止SQL注入。您提出的任何解决方案,尤其是涉及正则表达式的解决方案,都将失败。使用准备好的查询和参数绑定。这是唯一正确的解决方案。@BertBijn所以你说的“选择*来自用户”与“%选择*来自用户”是一样的。我不这么认为