从 URL 显示由解码 URIComponent 解码的 HTML 代码是否安全
Is it safe to display HTML code decoded by decodeURIComponent from a URL?
General
我不确定以这种方式显示用户输入的某些文本是否安全:
来自 URL 的参数由 decodeURIComponent()
解码。之后,使用 text.replace(/'n/g, '<br/>')
替换换行符。
生成的字符串显示在 OpenLayers 标记中。
通过这种方式,来自用户的HTML被嵌入到网页中。
具体示例
http://map.openseamap.org 允许创建永久链接(顶部菜单>工具>永久链接(
该站点解码如上所示的 URL,并在页面上显示标记。
例:
http://map.openseamap.org/map/?zoom=15&mlat=53.62053&mlon=11.46929&mtext=%3Cscript%3E%0A%20alert(%27Hello%20World!%27(%3B%0A%3C%2Fscript%3E&layers=BTFFFFFFFFF0FFFFFFFF
包含:
<script>
alert('Hello World!');
</script>
代码嵌入在页面中,但不执行。
这种显示文本的方式可以被利用吗?
您可以在此处找到该网站的代码:
http://github.com/OpenSeaMap/online_chart
解码代码位于索引中.php在第 138
行:http://github.com/OpenSeaMap/online_chart/blob/master/index.php#L137
如果您有更好的解决方案,欢迎拉取请求!
安全吗?
不。
例:
我使用的有效载荷为 <IMG SRC=/ onerror="alert(document.domain)"></img>
这是永久链接(请注意,这会导致页面上出现几个警报,没有恶意,但有点烦人(:http://map.openseamap.org/map/?zoom=17&mlat=53.62429&mlon=11.47198&mtext=%3CIMG%20SRC%3D%2F%20onerror%3D%22alert(document.domain(%22%3E%3C%2Fimg%3E&layers=BTFFFFFFFFF0FFFFFFFF
您的实现实际上有点额外危险,因为它混淆了有效负载,足以让内置浏览器工具(如Chrome的XSS审核员(无法检测到它。并不是说将其留给浏览器是可以接受的,但这会产生一个非常普遍的 XSS 漏洞。
你仍然需要逃避"危险"的角色,如<
、>
、'
、"
和&
。在我看来,来自此参数的 HTML 根本不应该呈现,因为意图似乎是纯文本注释。我们需要在这里转义的上下文似乎几乎是一个标准的 HTML 上下文,因此上述字符应该足以防止注入(至少在那个地方,我没有到处检查!这意味着<
变得<
,>
变得>
,'
变得'
,"
变得"
,&
变得&
。
我并不是说您应该从头开始进行转换,只是粗略地了解需要发生什么。这里有一个很棒的资源,每个Web开发人员都应该至少阅读几次:https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting(_Prevention_Cheat_Sheet
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- AngularJs正在解码HTML字符(不需要)
- 隐藏HTML元素中的JSON编码和解码
- 需要使用Java编码/转义HTML字符串,并在JavaScript中解码HTML字符串
- JavaScript-解码URI以呈现为HTML
- 如何解码阿拉伯语的html内容以在android网页视图中显示
- 如何使用 JavaScript 实现 html 解码功能
- 如何使用车把解码 HTML 实体
- 使用 Angular 过滤器解码 HTML 实体
- 与文本框相关的 HTML 编码/解码
- 正在解码HTML十进制编码字符
- 如何从其字形中解码 html 杂项符号
- 谷歌图表API不解码HTML实体,虽然我传递它们解码
- 在javascript中编码/解码html标签
- 解码html字符串在JQuery移动模板
- Jquery append自动解码HTML编码字符串
- 如何编码和解码HTML特殊字符以获得实体名称
- Prototype.js或其他js函数来解码html实体
- AngularJs:如何解码HTML中的HTML实体
- 如何在Ruby on Rails项目中使用JavaScript解码HTML实体