【发布时间】:2016-10-20 17:19:08
【问题描述】:
我觉得这是我绝对应该知道的事情,但我不完全确定浏览器在什么时候解码字符的细节(或者即使我以正确的方式考虑它)。
在检查我添加了一些内容(例如通过表单)的网站的 DOM 时,我可以看到我的 &lt;(在我的评论内容中)显示为一个字符串。即使尖括号平衡良好(例如<something>),它在 DOM 中显示为字符串而不是元素。我很欣赏这对于防御 XSS 等注入攻击至关重要,因此(在服务器上),内容被写为字符串文字而不是元素 - 但是浏览器如何识别它并以不同的方式呈现它?什么时候解码?
如果服务器确实以&gt; 或&lt; 响应,为什么我在开发工具中看不到这个?
我的困惑来自这样一个事实,即在检查时,我的 <something> 内容和 <something> 元素之间没有区别(如果有的话)。
【问题讨论】:
-
请提供代码,说明您是如何“添加一些内容”的。
-
感谢您的回复。我不认为添加内容在这里是最相关的。我的问题更具体到响应,而不是请求。无论
&lt;包含的内容是否被编码,我的问题是在不将它们识别为 DOM 元素的情况下显示这些字符的典型浏览器要求是什么? -
您是从服务器返回纯 HTML 文档,还是通过 Javascript 动态“添加内容”...?
-
对不起@deceze,我应该澄清一下——让我们假设这是一个“评论”功能。我在网站上添加了评论,我的评论内容包括
Here is some <comment> content。这将发布到服务器。当服务器响应它时,浏览器将其呈现为内容,而不是将<comment>部分视为元素。所以,我希望看到(在检查 DOM 时)&lt;content&gt;,但似乎没有。它就像一个元素一样被渲染。浏览器如何在没有这种编码的情况下区分元素和内容?还是开发工具也隐藏编码? -
注意,以上内容很棒,这是预期的行为,我不想让我的网站受到 XSS 攻击。我更多的是询问浏览器如何实现这种解码的细节。
标签: html dom browser xss html-encode