我想创建一个允许用户撰写文章的系统。文章的每个部分都将存储在数据库中。我担心的是XSS和SQL注入,但主要是XSS。
这不是一件公开的事情,它只适用于我信任创建内容的人。但是,我宁愿不要因为我信任别人而在我的保安中留下一个漏洞。
现在,我想允许我的用户在他们的文章中使用HTML,因此我不能删除每个标记。让他们使用JavaScript会很高兴,但如果必须,我愿意删除标签。如果我这样做,我还必须删除诸如onclick =“做恶意的事情”之类的东西。
我正在使用参数化查询,所以我认为我不必担心SQL注入那么多,但我不确定。
我想我的问题是,我应该在多大程度上清理我的输入,我应该怎么做?
编辑:我想我可以删除JavaScript。用户需要的任何特殊效果都可以使用内置JavaScript处理。看起来我可以使用HTML Purifier剥离JavaScript,但它是一个非常大的库,我想我可以编写一个更小,更具体的解决方案。我只需浏览每个属性并将其与白名单进行核对。这会阻止XSS吗?
答案 0 :(得分:1)
如果您正在使用WYSIWYG HTML编辑器(如TinyMCE),内置函数可以删除潜在的恶意代码,例如<script>
标记等,您可以检查实例化编辑器的功能以获取详细信息被禁止的标签,功能等。
注意: TinyMCE应该不用于清理,因为它是客户端编辑器,并且清理只才能完成服务器 - 侧。
答案 1 :(得分:0)
几个月前我在XSS上发现了一篇非常好的文章。继续阅读文章,您将了解如何防止XSS。 http://www.sitepoint.com/php-security-cross-site-scripting-attacks-xss/
如果您希望html作为最终用户的输入,请使用将过滤html输入的插件,然后将其存储在数据库中。这是一个如何做到这一点的链接。 http://htmlpurifier.org/
关于SQL注入,如果您使用参数化查询,那么它将负责它。