首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript解除绑定dom事件

问javascript解除绑定dom事件
EN

Stack Overflow用户
提问于 2011-08-26 03:21:40
回答 4查看 1.8K关注 0票数 2

我正在开发一个web框架,并试图在其中内置XSS预防功能。我已经对它进行了设置,这样它就可以避开传入的数据存储在数据库中,但有时你想要保存用户生成的html。我正在尝试制作一个自定义标记,它将阻止任何javascript执行,这是我的第一个技巧:

代码语言:javascript
复制
<html>
  <head>
    <script type="text/javascript" src="/js/jquery.min.js"></script>
  </head>
  <body>

    <preventjs>
      <div id="user-content-area">
        <!-- evil user content -->
          <p onclick="alert('evil stuff');">I'm not evil, promise.</p>
          <p onmouseover="alert('evil stuff');">Neither am I.</p> 
        <!-- end user content -->
      </div>
    </preventjs>

    <script type="text/javascript">
      // <preventjs> tags are supposed to prevent any javascript events
      // but this does not unbined DOM events
      $("preventjs").find("*").unbind();
    </script>

  </body>
</html>

我尝试使用jQuery解除所有绑定,但它不能解除DOM中的事件绑定,这正是我要做的。是否可以解除DOM元素的所有事件的绑定?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-26 03:35:59

您的问题是这样做是错误的--当您收到时,您应该过滤所有潜在恶意内容的用户输入。

这样做的第一个经验法则是“永远是白名单,永远不是黑名单”。不允许用户生成的HTML中的任何和所有属性,只需保留一个允许的属性列表,并在收到HTML时删除所有其他属性(可能在客户端--肯定在服务器端)。

哦,而且HTML不是一种常规的语言。对于此任务,您需要使用HTML解析器,而不是正则表达式。

票数 4
EN

Stack Overflow用户

发布于 2011-08-26 03:25:16

.unbind将仅解除使用jQuery附加的事件的绑定。您可以通过将内联事件处理程序代码设置为null来摆脱它们,例如:

代码语言:javascript
复制
$("preventjs *").removeAttr("onclick").removeAttr("onmouseover");

编辑:这是一个邪恶的解决方案,你可以删除所有以“on”开头的属性:

代码语言:javascript
复制
$("preventjs *").each(function() {
    var attribs = this.attributes;
    var that = this;
    $.each(attribs, function(i, attrib) {
        if(attrib.name.indexOf("on") === 0) {
            $(that).removeAttr(attrib.name);
        }
    });
});
票数 2
EN

Stack Overflow用户

发布于 2011-08-26 03:23:52

问题是你有内联的处理程序。unbind无法删除内联处理程序。

代码语言:javascript
复制
<p onclick="alert('evil stuff'...
   ^^^^

要删除内联处理程序,请使用removeAttr

代码语言:javascript
复制
$("preventjs").find("*").removeAttr('onclick');
$("preventjs").find("*").removeAttr('onmouseover');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7196003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档