当前位置:  开发笔记 > 编程语言 > 正文

用strip_tags()防止XSS?

如何解决《用strip_tags()防止XSS?》经验,为你挑选了3个好方法。

我有一个PHP Web应用程序.我不想让用户将HTML发布到我的网站.

如果我strip_tags在保存到我的数据库之前只对所有数据运行(),那么strip_tags()是否足以阻止XSS?

我问,因为如果XSS被阻止,我不清楚读取strip_tags的文档.浏览器允许<0/script>(是的,零)作为有效的HTML 似乎存在一些错误.

UPDATE

我意识到我可以简单地运行htmlspecialchars所有输出的数据; 但是,我的想法是 - 因为我不想首先允许HTML,所以在保存到我的数据库之前,一劳永逸地清理我的数据会更容易(并且在学术上更好),然后每次都要担心如果数据是安全的,我输出数据.



1> Kornel..:

我强烈反对它"学术上更好".

它打破了用户输入(想象一下,如果他们"清除"所有标签中的帖子,那么StackOverflow将如何用于此讨论.

以HTML格式插入的文本仅删除标签将无效.HTML也需要&进行转义.

它在HTML中甚至都不安全!strip_tags()不足以保护属性中的值,例如,可能被利用$foo= " onfocus="evil()(不<,>需要!)

因此,正确的解决方案是根据您生成的语言要求来转义数据.如果您有纯文本并且正在生成HTML,则应将文本转换为HTML htmlspecialchars()等.在生成电子邮件时,应将文本转换为可引用的可打印格式,依此类推.


你通常是正确的,但用户输入不是一个无法触及的神圣脚本,类似StackOverflow的服务是一个例外而不是规则.如果您的应用程序在参数ID中需要一个正整数,那么您应该删除任何不是正整数的东西.

2> leepowers..:

strip_tags本身是不够的,因为它删除了完全有效的非HTML内容.例如:



将输出:

This could be a happy clown *

和:

Hey guys

初始化后的所有内容都<被删除了.最终用户非常讨厌!不接受保留的HTML字符将是一个不好的举动.htmlentities当与HTML内联使用时,这些字符需要使用或类似的功能进行转义.

您需要更高级的东西strip_tags- HTML Purifier工作得很好,并允许用户使用HTML保留字符.



3> Matthew..:

正如其他人所提到的,您可以结合使用strip_tagshtmlspecialchars保护自己免受XSS攻击.

一个坏处strip_tags是它可能会删除用户不会期望的无害内容.我看到技术人员写的东西如下: foo ,他们完全希望这些标签可以被视为原样.此外,我看到"正常"的人甚至做了"咧嘴笑"的事情.同样,如果没有出现,他们会认为这是一个错误.

所以个人而言,我首先避免strip_tags使用我自己的解析器,它允许我显式启用某些安全的HTML标签,属性和CSS,显式禁用不安全的标签和属性,并将任何其他特殊字符转换为无害的版本.因此,文本总是被视为人们所期望的.

如果我没有那个解析器,我只会htmlspecialchars用来安全地编码文本.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有