攻击者是否可以在html5数据属性中插入恶意代码

时间:2013-07-10 00:07:59

标签: javascript jquery security xss

所以我之前了解到,使用html5中的data属性可以插入要在javascript文件中处理的值。 e.g

<a href="#" data-name="hello" class="check">Hey</a>

处理javascript文件将有一行来处理可能执行此操作的链接标记

var value=$('.check').data('name');
window.location.href="http://www.example.com/'+value+'";

现在我想知道,恶意程序员可以利用这个吗?在将其用于重定向之前,是否需要清理该值?

4 个答案:

答案 0 :(得分:1)

这取决于。

攻击者可以在浏览器中修改他想要的任何内容,因此无论您在前端放置了多少清理,攻击者都可以绕过您所有的javascript函数等来规避您的前端 - 结束代码。

我并不是说您不应该在前端清理您的输入,因为它对合法用户的可用性和体验总是有帮助的。

如果您要重定向用户的地址使用该数据属性对服务器执行某些操作,那么无论如何都是在两个位置清除它:前端和后端。否则,您不必担心,最糟糕的情况是恶意用户(或知识渊博的用户)将最终进入404页面。

**编辑**

在这个答案中阅读你的评论后,这是我更新的答案:

危险在于你如何使用这条信息。以谷歌分析脚本为例:

Google为您提供了一个脚本,可帮助您通过Google Analytics(分析)界面跟踪访问者的操作和行为。

如果您更改了Google脚本中的任何值,那么Google Analytics将无法运行,并且您无法通过分析脚本破解谷歌。

谷歌如何实现这一目标?他们将所有安全性放在后端,并且他们清理可修改的用户输入,这些输入将在网站中呈现,存储在数据库中或以某种方式与服务器交互。

回到你的案例:

如果您要使用该数据属性来执行document.write(),eval,执行数据库查找或任何敏感操作(删除,更新,检索数据),那么一定是:消毒它。

你打算如何消毒呢?这是特定的问题,你很可能会问一个新的问题。

答案 1 :(得分:0)

如果HTML是从用户输入中获取的,或者是从用户输入生成的,是的,您肯定应该执行卫生设施。但是,如果你问的是数据属性是否在某种程度上容易受到其他属性的影响,那么答案就是否定。

答案 2 :(得分:0)

有权访问浏览器的用户(例如通过XSS)可以将任何内容插入数据属性中。但是(s)他可以随时在任何地方重定向,所以这个微不足道的案例是无关紧要的。

如果用户通过其他方式设置了该值,则可以将链接设置在同一域内的预期之外的某个位置。这可能是恼人的,但它不应该是安全风险。

如果您正在执行其他操作,例如在属性中包含eval的javascript字符串并且来自用户(例如,通过数据库值),那么您将创建一个XSS漏洞。但无论如何,你永远不应该相信用户提供的价值。那里的html数据属性没什么特别的。

答案 3 :(得分:0)

  
    

在将值用于重定向之前,您是否需要清理该值?

  

无需在 之前清理 ,但您需要在 之后清理

在您的示例中,如果您没有清理数据 - 您可以成为经典XSS的受害者。

I.e:http://www.example.com/ + value,其中值为search?q=<script>alert(1)</script>,搜索页面实际上将原始查询输出到浏览器。

p.s:这不是特定于数据属性的。它与普通属性的作用相同。