【问题标题】:Basic encoding/decoding of characters for the web网络字符的基本编码/解码
【发布时间】:2016-10-20 17:19:08
【问题描述】:

我觉得这是我绝对应该知道的事情,但我不完全确定浏览器在什么时候解码字符的细节(或者即使我以正确的方式考虑它)。

在检查我添加了一些内容(例如通过表单)的网站的 DOM 时,我可以看到我的 <(在我的评论内容中)显示为一个字符串。即使尖括号平衡良好(例如<something>),它在 DOM 中显示为字符串而不是元素。我很欣赏这对于防御 XSS 等注入攻击至关重要,因此(在服务器上),内容被写为字符串文字而不是元素 - 但是浏览器如何识别它并以不同的方式呈现它?什么时候解码?

如果服务器确实以>< 响应,为什么我在开发工具中看不到这个?

我的困惑来自这样一个事实,即在检查时,我的 <something> 内容和 <something> 元素之间没有区别(如果有的话)。

【问题讨论】:

  • 请提供代码,说明您是如何“添加一些内容”的。
  • 感谢您的回复。我不认为添加内容在这里是最相关的。我的问题更具体到响应,而不是请求。无论< 包含的内容是否被编码,我的问题是在不将它们识别为 DOM 元素的情况下显示这些字符的典型浏览器要求是什么?
  • 您是从服务器返回纯 HTML 文档,还是通过 Javascript 动态“添加内容”...?
  • 对不起@deceze,我应该澄清一下——让我们假设这是一个“评论”功能。我在网站上添加了评论,我的评论内容包括Here is some <comment> content。这将发布到服务器。当服务器响应它时,浏览器将其呈现为内容,而不是将<comment> 部分视为元素。所以,我希望看到(在检查 DOM 时)<content>,但似乎没有。它就像一个元素一样被渲染。浏览器如何在没有这种编码的情况下区分元素和内容?还是开发工具也隐藏编码?
  • 注意,以上内容很棒,这是预期的行为,我不想让我的网站受到 XSS 攻击。我更多的是询问浏览器如何实现这种解码的细节。

标签: html dom browser xss html-encode


【解决方案1】:

所以,我希望看到(在检查 DOM 时)<content>,但似乎没有。

这仅仅是因为您的浏览器的 DOM 检查器在表示上有点松散。毕竟,您正在检查 DOM,这是一个复杂的面向对象的内部内存结构,而您的浏览器却以 HTML 样 的形式向您展示它。无论是由于疏忽还是有意使此演示文稿更具可读性,并不是所有应该是有效 HTML 中的 HTML 实体的东西都显示为 HTML 实体。

如果您检查页面的实际源代码,您会看到<content>

【讨论】:

    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多