收到用户的输入后,我将在我的服务器上执行以下操作(使用PHP):
$safe_input = ereg_replace("[^A-Za-z0-9-]", "", $_GET["input"]); 然后,我使用$safe_input变量进行SQL查询,并将其打印到用户屏幕上。
这是否保证不会有任何类型的注入(SQL注入、XSS等)是可能的吗?
谢谢,
乔尔
发布于 2010-12-31 16:52:01
它所做的是确保在$safe_input字符串中只允许A-Z (大写或小写)、数字和"-“破折号字符。
从理论上讲,您的SQL仍然可以被某些人添加"--“到输入,以强制语句的后半部分被视为SQL注释。
像你发布的这么简单的东西并不是恶意代码注入的解决方案-当你想要允许用户发送你明确允许的字符以外的字符时,很可能会导致你的问题。
你应该看看专门处理这类事情的第三方PHP库--有很多用于SQL和XSS预防的库。或者甚至在服务器级别上考虑添加一个可用于此任务的Apache模块(当然,前提是您使用的是Apache ...)。沿着这条路走下去,你将采取一种更全面的保护方法--你将利用这一领域的专业知识,而不是试图为你的项目重新发明这个特殊的轮子。
发布于 2010-12-31 16:49:50
首先,不推荐使用ereg系列函数,您应该改用preg系列函数:
不要将用户限制为只使用A-Za-z0-9-。我建议你去:
PHP是一个用
编写的符合标准的HTML filter库。超文本标记语言净化器将不仅删除所有的恶意代码(更为人所知的XSS)与一个彻底审计,
安全但允许的白名单,它还将确保您的文档是符合标准的,只有全面了解W3C的规范才能做到这一点。
您可以自定义接受和拒绝的内容。
Interesting:
有趣的是,Kohana是CodeIgniter的改进替代品,它还支持用于安全性的HTML Purifier。
对于SQL注入,至少可以使用mysql_real_escape_string函数。不过,更好的方法是使用prepared statements。
https://stackoverflow.com/questions/4569060
复制相似问题