哪种类型的输入最不容易受到跨站点脚本 (XSS) 和 SQL 注入攻击。
PHP、HTML、BBCode 等。我需要知道我正在帮助朋友建立的论坛。
(我刚刚在评论中发布了这个,但似乎有些人认为选择列表、单选按钮等不需要清理。)
不要指望单选按钮是安全的。您仍然应该清理服务器上的数据。人们可以在他们的本地机器上创建一个 html 页面,并创建一个与您的单选按钮同名的文本框,然后将这些数据发回。
更高级的用户可以使用WebScarab之类的代理,并在将参数发送回服务器时对其进行调整。
一个好的经验法则是始终使用参数化 SQL 语句,并始终在将用户生成的数据放入 HTML 之前对其进行转义。
我们需要更多地了解您的情况。脆弱怎么办?你应该经常做的一些事情:
我永远不会执行用户提供的 php。BBCode/UBBCode 很好,因为它们被转换为语义正确的 html,尽管您可能想查看与格式错误的图像标签相关的 XSS 漏洞。如果您允许 HTML 输入,您可以将某些元素列入白名单,但这将是一种容易出错的复杂方法。因此,鉴于上述所有情况,我会说使用一个好的现成的BBCode库将是你最好的选择。
他们都不是。服务器上预期的所有数据都可以由具有知识和动机的人操作。您希望人们使用的浏览器和表单只是将数据提交到服务器/脚本的几种有效方式之一。
请熟悉 XSS 主题及相关问题
任何类型的布尔值。
您甚至可以很容易地过滤无效输入。
;-)
有很多 BB 代码解析器可以清理 HTML 等的输入。如果没有可用的软件包,那么您可以查看其中一个开源论坛软件包以获取指导。
BB 代码很有意义,因为它是论坛的“标准”。
最不容易受到攻击的输入是“非输入”。
你在问正确的问题吗?
为了 Odin 的缘故,请不要清理输入。不要害怕用户在您的表单中输入他们想要的任何内容。
用户输入本身并不是不安全的。接受的答案导致了像我的银行这样的网络界面,O'Reilly 先生无法在其中开设账户,因为他的名字中有一个非法字符。不安全的始终是您使用用户输入的方式。
避免 SQL 注入的正确方法是使用准备好的语句。如果您的数据库抽象层不允许您使用这些,请严格使用正确的转义函数(myslq_escape 等)。防止 XSS 攻击的正确方法绝不是像 striptags() 这样的东西。转义一切 - 在 PHP 中,您正在寻找类似 htmlentities() 的东西,但这取决于您是将字符串输出为 HTML 文本、HTML 属性还是 Javascript 等的一部分。使用正确的工具对于正确的上下文。永远不要将用户的输入直接打印到页面上。
最后,看看 Web 应用程序的 10 大漏洞,并采取正确的措施加以防范。http://www.applicure.com/blog/owasp-top-10-2010