回答
“足够的消毒”完全取决于你在说什么环境。 MySQL的消毒应该被认为是完全独立的免于网络输出的消毒,您应该单独处理它们以避免很多麻烦。
消毒的MySQL
mysql_real_escape_string()
将消毒一块数据并使其安全地把一个SQL查询中。- 任何其他类型的恶意数据(如字符串内的HTML标签)都应该被完全忽略。试图在这里操纵它会导致你头痛,因为你试图在将它从数据库中取出后“解除”它。错误的“网络数据”不能损害您的数据库。
消毒输出
htmlspecialchars($val)
在输出时将防止渲染任何恶意代码,因为<
和>
字符转换为它们的实体表示而不是呈现为标签分隔符。- 如果你输出的东西是一个HTML元素的引用属性中,如
<input name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" />
这应该是你所需要的,除非你有特殊要求使用ENT_QUOTES
修改。 strip_tags()
不应该真的用于消毒,因为它可能被形成不良的HTML愚弄。消毒是一个有价值的目标,如果你可以保持你的上下文分离,你将遇到更少的数据操作问题。
在字符串上调用htmlentities()而不是在strip_tags()上计算可能更安全和更好。
用strip_tags()将不会删除HTML特殊字符像'"&
例如,如果你的代码是:
<img src="<?= strip_tags($myVar) ?>">
和
$myVar = '">something goes here<';
那么你结束了:
<img src="">something goes here<">
这显然是XSS洞的根;一个实际的漏洞被留下来作为读者的练习。
我最初upvoted弗兰克的答案,但想到一个问题:ヶ辆()将打破合法的URL是这样的:
http://www.mywebsite.com/profile?id=jojo&w=60&h=60
也许剥尖括号+ mysql_real_escape就足够了?
尽管图像网址中不应该包含&符或它们? – aslum 2010-01-12 02:39:41
为什么不呢?脚本是完全有效的图像源。 – 2010-01-12 02:40:40
htmlentities()将在该URL上正常工作。事实上,标准要求在您的属性中编码&&。 ''是有效的html(并且浏览器将按照预期将URL作为'example.com/?a&b'来执行)。另一方面''是无效的 - 但浏览器无论如何可能会做的事情。例如,如果您在帖子中的网址上查看源代码,则会看到SO在href属性中使用&。 – 2010-01-12 02:44:27
- 1. MapReduce不足够的任务是什么?
- 2. 消毒提交的URL
- 3. 红宝石消毒代码...为什么和消毒
- 4. 足够替换/在URL中
- 5. Scrapy消毒url链接
- 6. 为什么.RData当.R足够时
- 7. 自动更新 - 什么是“足够”的安全性?
- 8. LayoutAwarePage的MVVM是否足够?
- 9. 消毒用户输入的最佳方式是什么?
- 10. 什么适合我? generateAllGrams()还是generateCollocations()足够我?
- 11. 使用$ _GET进行页面重定向的这种消毒是否正常/足够?
- 12. 如何消毒角4的URL
- 13. java.util.regexp是否足够高效?
- 14. uNhAddIns是否足够活跃?
- 15. Gmail是否足够安全?
- 16. PHP是否足够动态?
- 17. 这是否足够安全?
- 18. MinGW是否足够稳定
- 19. hasfile()有什么用?是必需的字段验证程序是否足够?
- 20. 命令模式是否足够有效,它的具体好处是什么?
- 21. 什么是NoSql?什么是NoSql的目的?我在哪里可以在NoSql上获得足够的材料?
- 22. 什么是现在的Web应用程序足够的位加密
- 23. 为什么要在足够的地方使用事件?
- 24. 这是足够安全的,对散列
- 25. 消毒PHPSESSID
- 26. VBScript SQL消毒
- 27. 消毒在Perl
- 28. JavaScript消毒库
- 29. 消毒Vaadin RichTextArea
- 30. 在Rails中消毒视频嵌入代码。什么是好的解决方案?
我收到了类似问题的一些很好的答案;如果您愿意,请查看http://stackoverflow.com/questions/549987/what-is-the-best-way-to-filter-urls-for-input。正如Mike Boers的回答所建议的,最好的解决方案可能是彻底重建URL。 – JAL 2010-01-12 02:33:54