我将不受信任的数据插入到标签的href属性中。
基于OWASP XSS预防备忘单,我应该在将不受信任的数据插入href属性之前对其进行URI编码。
但在这种情况下,HTML编码是否也会阻止XSS?我知道它是一个URI上下文,因此我应该使用URI编码,但在这种情况下,URI编码是否比使用HTML编码有任何安全优势?
据我所知,浏览器会在两种情况下正确呈现链接。
答案 0 :(得分:1)
我假设这是Rule #5:
将不受信任的数据插入HTML URL参数之前的URL转义 值
(不是规则#35。)
这是指个别参数值:
<a href="http://www.example.com?test=...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...">link</a >
URL和HTML编码可以防止不同的事情发生。
URL编码可防止参数超出URL参数上下文:
e.g。 ?firstname=john&lastname=smith&salary=20000
假设这是管理员用户提出的后端请求。如果john
和smith
未正确进行网址编码,则恶意前端用户可能会将其名称输入john&salary=40000
,这会将网址呈现为
?firstname=john&salary=40000&lastname=smith&salary=20000
并说后端应用程序在重复的情况下采用第一个参数值。用户成功地将工资增加了一倍。此攻击称为HTTP Parameter Pollution。
因此,如果您要将参数插入到随后插入HTML文档的URL中,那么您在技术上需要对参数进行URL编码,然后对整个URL进行HTML编码。但是,如果您遵循OWASP的建议:
除字母数字字符外,使用ASCII转义所有字符 %HH转义格式的值小于256。
然后这将确保不会输出对HTML具有特殊含义的字符,因此您可以跳过HTML编码部分,使其更简单。
答案 1 :(得分:0)
示例 - 如果允许用户输入构建相对链接(至http://server.com/),则 javascript:alert(1)由用户提供。
网址编码:<a href="javascript%3Aalert%281%29">
- 链接将指向http://server.com/javascript%3Aalert%281%29
仅限实体编码:<a href="javascript:alert;(1)">
- 点击导致javascript执行