专栏名称: 前端早读课
我们关注前端,产品体验设计,更关注前端同行的成长。 每天清晨五点早读,四万+同行相伴成长。
目录
相关文章推荐
黑龙江省商务厅  ·  听民意 汇民智:政府部门与代表委员的“高效联动” ·  9 小时前  
黑龙江省商务厅  ·  听民意 汇民智:政府部门与代表委员的“高效联动” ·  9 小时前  
前端大全  ·  55 ... ·  2 天前  
前端大全  ·  被骂了!腾讯道歉 + 立刻改正 ·  4 天前  
前端大全  ·  告别 axios,ngify 让你的 ... ·  3 天前  
51好读  ›  专栏  ›  前端早读课

【早阅】编码差异:为什么字符集很重要

前端早读课  · 公众号  · 前端  · 2024-10-24 08:00

主要观点总结

文章讨论了HTTP响应中的字符编码(charset)问题,特别是Content-Type头中charset属性的缺失或错误可能导致跨站脚本(XSS)漏洞。文章详细解释了字符编码的重要性,浏览器如何处理HTTP响应的字符编码,以及攻击者如何利用字符编码的不确定性来注入恶意JavaScript代码。

关键观点总结

关键观点1: 字符编码的重要性

字符编码定义了字符与字节之间的映射关系。浏览器需要知道服务器使用的字符编码,以便正确解码HTTP响应体中的字节。如果Content-Type头中缺少charset属性,可能导致浏览器错误地解析HTML文档。

关键观点2: 浏览器行为

当Content-Type头中没有charset属性时,浏览器会尝试从HTML文档中的<meta>标签或字节顺序标记(BOM)中获取字符编码信息。如果这些信息都缺失,浏览器会使用自动检测机制来猜测字符编码。

关键观点3: 攻击者的利用方式

攻击者可以利用字符编码的不确定性,通过特定的字符编码(如ISO-2022-JP)来绕过安全检查,注入恶意JavaScript代码。他们可以使用否定反斜杠转义和打破HTML上下文两种技术来实现。

关键观点4: 影响与结论

缺少charset属性或错误的字符编码设置可能导致严重的XSS漏洞。开发者在编写和部署代码时,应始终确保正确设置charset属性,以防止潜在的安全漏洞。随着浏览器和Web标准的进一步发展,字符编码的处理可能会变得更加严格。


正文

作者:@Stefan Schiller
原文:https://thenewstack.io/encoding-differentials-why-charset-matters/

背景

关于 HTTP 响应中的字符编码(charset)的问题引起了广泛关注。具体来说,一个常见的 HTTP 响应示例中, Content-Type 头缺少了 charset 属性,这可能导致跨站脚本(XSS)漏洞。

可能存在跨站脚本的漏洞风险,如下:

 HTTP/1.1 200 OK
Server: Some Server
Content-Type: text/html
Content-Length: 1337

DOCTYPE html>
<html>
<head><title>Some Pagetitle>head>
<body>

有一个小瑕疵:头部缺少 charset 属性。charset 是一组计算机可以用来表示文本的字符集。这听起来可能不是大问题,但攻击者可以轻易利用这一点,通过有意改变浏览器假设的字符集来注入任意的 JavaScript 代码到网站中。

要点

Content-Type 头中的 charset 属性缺失或不正确,可能导致浏览器在解析 HTML 文档时使用错误的字符编码,从而为攻击者提供注入恶意 JavaScript 代码的机会。

【第3335期】XSS终结者-CSP理论与实践

分析

字符编码的重要性

  • 字符编码(如 UTF-8、ISO-8859-1 等)定义了字符与字节之间的映射关系。浏览器需要知道服务器使用的字符编码,以便正确解码 HTTP 响应体中的字节。

  • 如果 Content-Type 头中缺少 charset 属性,浏览器可能会尝试自动检测字符编码,但这可能会导致错误的编码选择。

浏览器的行为

  • Content-Type 头中没有 charset 属性时,浏览器会尝试从 HTML 文档中的 标签或字节顺序标记(BOM)中获取字符编码信息。







请到「今天看啥」查看全文