Php 使用_string()是否可以很好地防御SQL注入?
我试图寻找针对基于PHP和MySQL的web应用程序的SQL注入的缓解措施。第一条规则是清理查询;因此,我使用了Php 使用_string()是否可以很好地防御SQL注入?,php,mysql,sql-injection,Php,Mysql,Sql Injection,我试图寻找针对基于PHP和MySQL的web应用程序的SQL注入的缓解措施。第一条规则是清理查询;因此,我使用了mysql\u real\u escape\u string()函数来实现这一点 下面是我的代码片段的样子 if (is_string($string)) { return $mysqli->real_escape_string($string); } else { return ""; } 这里,$string将包含用户输入。在这个过滤和转义之后,我将使用IN
mysql\u real\u escape\u string()
函数来实现这一点
下面是我的代码片段的样子
if (is_string($string)) {
return $mysqli->real_escape_string($string);
} else {
return "";
}
这里,$string
将包含用户输入。在这个过滤和转义之后,我将使用INSERT-INTO
query插入数据库
此过滤器将阻止任何恶意用户输入,如haha'
,inj'
等,因为是字符串()
将检测这些字符串,并应用real\u escape\u string()
来转义这些恶意字符。我认为攻击者可以做的唯一可能性是使用数字负载进行SQL注入,但我不知道到目前为止有任何数字负载本身导致了注入
那么,这个过滤器会远离坏人还是可以绕过
编辑:
我知道在生产中启动应用程序时,准备好的语句要好得多,而且是一种很好的编码实践。但对于这个问题,我特别寻找答案,任何人都可以阻止这个过滤器本身,因为它似乎对我来说很强大 否:
此过滤器将阻止任何恶意用户输入,如haha',inj''
你的想法绝不是一种保护。在用户输入中也没有什么“恶意”的东西,比如haha',inj''
这就是说,任何用户输入都是一个字符串,因此您将创建一个对臭名昭著、备受鄙视且长期远离该语言的语言的嘲弄
去准备好的陈述 没有
is_string()
不会防止SQL注入,数值负载无论如何都不会导致任何表损坏或不必要的访问,并且字符串清理不会防止所有SQL注入
我应该告诉你为什么准备好的陈述令人惊讶,诸如此类,但你自己表示,问题的重点是指出卫生处理方面的缺陷
为什么你应该使用事先准备好的陈述而不是消毒
“
将更改为”,更改数据)
$sSql=“从id=$iId的表格中选择*”
你为什么不能用事先准备好的陈述呢@特里:谢谢你的建议。我肯定会的,但我正在寻找与我提到的过滤器相关的响应。使用
is\u string
和不使用有什么区别?没有任何东西…@AbraCadaver是字符串
将查看用户输入是否是字符串,如你好
,你好
,你好“
等,攻击者可使用这些信息进行注射。所以它返回true并对其应用escape_string函数。听起来很合理,为什么不直接转义它,不管它是否是字符串?第一个没有意义,因为转义不会改变数据。第二个几乎不是一个好处。只有最后一个是真实的thing@YourCommonSense如果转义纯文本的格式对用户的意义超过纯文本显示,则转义纯文本可以更改其含义。e、 g.清理可以防止JSON和XML数据被正确解析,如果清理,LaTeX可能会显示不正确。我知道你在谈论一些HTML内容。不知道从哪里得到的,但是这里讨论的真正的_escape_string永远不会做类似“