什么是"Escaped"和"Unescaped"输出

apa*_*jja 12 javascript node.js coffeescript

我不熟悉Javascript

学习模板node.js模板引擎,它有"Escaped"和"Unescaped"输出

究竟是什么"逃脱"和"非转义"输出?

它是否像"包括一次"和"包含"?

(谷歌没有给出任何结果)

the*_*eye 18

转义和取消转义对于防止Cross Site Scripting(XSS)攻击很有用.这是常见的网络攻击之一,因为如果网站设计不仔细,很容易创建攻击媒介.它的排名number 3 in the OWASP's Top 10 vulnerabilities of 2013.

主要目的是,不要让浏览器以不同于预期的方式执行或解释HTTP响应.

例如,假设您有一个网页接受用户输入他的地址,您希望用户在下一页确认.因此,您将获得用户输入的地址并将其显示在下一页中.如果用户输入有效地址,则不会出现问题.如果用户输入这样的内容怎么办?

<script>
    alert("Welcome");
</script>
Run Code Online (Sandbox Code Playgroud)

您的下一页只会生成一个警告框Welcome.现在,考虑这种情况.您正在编写博客应用程序,用户在提供的文本框中输入上面显示的脚本.您将把它存储在数据库中,任何想要看到您的博客的人都可以看到该警报框.最糟糕的是,如果攻击者将其置于无限循环中,那么访问该博客的人将根本无法阅读该内容.

这只是基本攻击之一,如果你不逃避文本,这是可能的.

因此,通常,输入的文本用户将被转义然后存储在DB中.例如,上面看到的攻击向量(脚本标记的东西)将变成这样,之后HTML escaping

&lt;script&gt;<br/>        alert(&quot;Welcome&quot;);<br/>&lt;/script&gt;
Run Code Online (Sandbox Code Playgroud)

现在,浏览器不会将此视为脚本元素而是HTML元素,因此它会将其显示为

<script>
    alert("Welcome");
</script>
Run Code Online (Sandbox Code Playgroud)

而不是执行它.