关于XSS的HTML而不是URI编码?

时间:2015-06-05 15:41:09

标签: html encoding uri xss

我将不受信任的数据插入到标签的href属性中。

基于OWASP XSS预防备忘单,我应该在将不受信任的数据插入href属性之前对其进行URI编码。

但在这种情况下,HTML编码是否也会阻止XSS?我知道它是一个URI上下文,因此我应该使用URI编码,但在这种情况下,URI编码是否比使用HTML编码有任何安全优势?

据我所知,浏览器会在两种情况下正确呈现链接。

2 个答案:

答案 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

假设这是管理员用户提出的后端请求。如果johnsmith未正确进行网址编码,则恶意前端用户可能会将其名称输入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&colon;alert;&lpar;1&rpar;"> - 点击导致javascript执行