收到用户的输入后,我在我的服务器上执行以下操作(使用PHP):
$safe_input = ereg_replace("[^A-Za-z0-9-]", "", $_GET["input"]);
然后我使用$ safe_input变量进行SQL查询,并将其打印到用户的屏幕上。
这是否可以保证不可能注入任何类型(SQL注入,XSS等)?
谢谢,
乔尔
答案 0 :(得分:2)
嗯,它的作用是确保你只允许A-Z(上部或下部),数字和$safe_input
字符串中的“ - ”短划线字符。
理论上,你的SQL仍然可以被某人添加“ - ”来强行输入,以便强制将语句的后半部分视为SQL注释。
像您发布的内容一样简单并不是恶意代码注入的解决方案 - 并且当您希望允许用户发送除您明确允许的字符之外的其他字符时,很可能会引发问题。
你应该看看专门处理这类事情的第三方PHP库 - 有很多SQL和XSS预防。或者甚至查看服务器级别并考虑添加一个可用于此任务的Apache模块(假设您当然使用Apache ...)。沿着这条路走下去,你将采取更全面的保护方法 - 你将利用这方面的专业知识,而不是试图为你的项目重新发明这个特定的轮子。
答案 1 :(得分:1)
首先,不推荐使用ereg
函数系列,而应使用preg
函数系列代替:
请 将 用户限制为A-Za-z0-9-
。我建议你去找:
HTML Purifier符合标准 用PHP编写的HTML过滤器库。 HTML Purifier不仅会删除所有内容 恶意代码(俗称为 XSS )经过全面审核,
它安全但宽容的白名单 还将确保您的文件 符合标准,只有一些东西 可以全面实现 了解W3C的规范。
您可以自定义接受的内容和拒绝的内容。
<强>有趣:强>
有趣的是,Kohana CodeIgniter的改进替代方案也支持HTML Purifier以提高安全性。
至于 SQL注入,您可以做的最少的事情就是使用mysql_real_escape_string
功能。更好的方法是使用prepared statements。