在Javascript中防止HTML和脚本注入

lor*_*ess 47 html javascript javascript-injection html-injections

假设我有一个带输入框的页面.用户在输入框中键入内容并点击按钮.该按钮触发一个函数,该函数获取键入文本框中的值,并将其输出到文本框下方的页面,无论出于何种原因.

现在,令人不安的是难以找到明确的答案,或者我不会问,但你会如何输出这个字符串:

<script>alert("hello")</script> <h1> Hello World </h1>
Run Code Online (Sandbox Code Playgroud)

这样既不执行脚本也不显示HTML元素?

我在这里真正要问的是,是否存在一种在Javascript中避免HTML和脚本注入的标准方法.每个人似乎都有不同的方式(我使用jQuery所以我知道我可以简单地将字符串输出到文本元素而不是html元素,但这不是重点).

Tas*_*ple 62

您可以编码<>他们的HTML equivelant.

html = html.replace(/</g, "&lt;").replace(/>/g, "&gt;");
Run Code Online (Sandbox Code Playgroud)

如何将HTML标记显示为纯文本

  • @dlampard请注意,这正是`.text()`所做的,所以如果你有jQuery,就不需要自定义正则表达式了. (3认同)
  • 如果你想只允许一些标签,如粗体或斜体,怎么办? (2认同)

BiA*_*AiB 8

这是一个小脚本,使用jQuery,删除所有html并只保留文本:

myDiv.textContent = arbitraryHtmlString 
Run Code Online (Sandbox Code Playgroud)

如果jQuery包含是一个问题,这可以在纯javascript(es6)中完成:

myDiv.textContent = arbitraryHtmlString 
Run Code Online (Sandbox Code Playgroud)