div contenteditable,XSS

Dha*_*dya 8 html javascript xss jquery

我目前有一个简单的<div contenteditable="true">工作,但是,这是我的问题.

目前,用户可以通过<script>在div中插入一个持久的XSS ,我绝对不想要.

但是,我目前解决这个问题的想法是:

  • 仅允许使用a和img标记
  • 使用textarea(不是一个好主意,因为那时用户可以复制和粘贴图像)

你们有什么建议?

Dav*_*ave 8

你必须记住,为了防止xss,你需要在服务器端做到这一点.如果您的富文本编辑器(前YUI或tinyMCE)有一些javascript来阻止输入脚本标记,这不会阻止我检查您的http发布请求,查看您正在使用的变量名称,然后使用Firefox海报将我喜欢的任何字符串发送到您的服务器,以绕过所有客户端验证.如果您没有验证用户输入SERVER SIDE,那么您几乎没有任何效率来保护XSS.

任何客户端xss保护都与渲染用户输入的方式有关; 不是你如何收到它.因此,例如,如果您对所有输入进行了编码,那么它就不会呈现为html.这远离你想要完成的事情(只是锚和img标签).请记住,您允许渲染的漏洞越多,您暴露的漏洞就越多.

据说大部分的保护应该来自服务器端,并且根据您正在编写的内容(例如,asp.net或tomcat/derby/jboss)可以查看很多XSS过滤器.

我认为你只允许一个和img标签在正确的道路上.您必须记住的一件事是您可以将javascript命令放入标记的src属性中,因此请注意验证href属性.但是"允许任何事情,然后改变过滤器只允许某些事情"(AKA白名单过滤)的基本思想比"允许所有内容然后过滤掉我不想要的东西"(AKA黑名单过滤)更好.

在下面的评论中,Brian Nickel也说过这一点说明了这一点:

除了你想要保留的元素属性之外的一切.我知道你在答案中提到了它,但由于它太可怕了所以需要重复.<img onerror="stealMoney()">

您要做的另一件事是定义一个XSSFilterRequest对象(或沿着这些行的东西)并在过滤器中覆盖您的请求,以便对"getUrlParameter"和"getRequestParameter"对象的任何调用都运行请求值通过你的xss过滤器.这提供了一种干净的方法来过滤所有内容而无需重写现有代码.

编辑:xss过滤的python示例:

Python HTML清洁剂/洗涤器/过滤器

用于XSS过滤的Python库?

  • 除了您要保留的元素 ** 和 ** 属性之外的所有内容。我知道您在回答中提到了它,但由于它太可怕了,所以值得重复一遍。`&lt;img onerror="stealMoney()"&gt;` 毕竟属于“你想要保留的元素”。您几乎需要一个 SGML 解析器来解析文档、过滤它,然后仅使用所需的子集重建它。这个 Q 证实了我喜欢 Markdown 的原因。 (2认同)