jquery - 如何转义 html 以防止 XSS?

新手上路,请多包涵

我正在使用 laravel,当用户发送短信时,它可能包含一些恶意代码。当我使用 {{}} 时,它会显示用户发送的确切文本。如果他已经发送

<script>alert("malicious")</script>

它会显示完全相同并且很好,但是当我使用 jquery ajax 时,我将获取的数据放入一些 html 标签中的一些变量,最后将它们全部附加到主标签,如下所示:

    data = '';
    //loop starts here // some otger codes deleted for cleanness
    data += "<h2>"+response.name+"</h2>";
    data += "<p>"+response.description+"</p>";
    $('#mydata').html(data);

现在的问题是,如果我使用 html() 用户恶意代码将被执行,如果我不使用,结果将不会显示为 html。

我想我应该用 $.parseHTML ,不是吗?

谢谢

原文由 codepro 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 730
2 个回答

您应该使用 jQuery text() 对数据进行编码。

 $('#mydata').text(data);

编辑:要创建您可以使用的#mydata 的内容

$('#mydata')
  .html("")
  .append($("<h2></h2>").text(response.name))
  .append($("<p></p>").text(response.description))

原文由 Joschi 发布,翻译遵循 CC BY-SA 3.0 许可协议

您也可以这样做来删除标签…

 $('#mydata').text(data).replace(/(<([^>]+)>)/ig,"");

在这篇文章中阅读更多内容 Todo List Sanitizing Input jQuery

原文由 Omair 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题