2

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

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

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

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

现在我想知道,恶意编码器可以利用这个吗?您是否需要在将值用于重定向之前对其进行清理?

4

4 回答 4

1

如果 HTML 取自用户输入或从用户输入生成,是的,您绝对应该执行卫生处理。但是,如果您要问数据属性是否以某种方式易受攻击而其他属性则不然,答案是否定的。

于 2013-07-10T00:17:12.090 回答
1

这真的取决于。

攻击者可以在他的浏览器中修改任何他想要的东西,所以不管你在前端进行了多少清理,攻击者都可以绕过你的所有 javascript 函数等来绕过你的前端代码。

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

如果您将用户重定向到的地址使用该数据属性对服务器执行某些操作,那么肯定会在两个地方对其进行消毒:前端和后端。否则,您不必担心,最坏的情况是恶意用户(或知识渊博的用户)最终会进入 404 页面。

** 编辑 **

在阅读了您在此答案中的评论后,这是我的更新答案:

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

谷歌为您提供了一个脚本,可帮助您通过谷歌分析界面跟踪访问者的行为和行为。

如果您更改了谷歌脚本中的任何值,谷歌分析将无法工作,并且您无法通过分析脚本破解谷歌。

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

回到你的案例:

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

你打算怎么消毒?这是特定于问题的,您很可能应该问一个新问题。

于 2013-07-10T00:23:14.743 回答
0

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

如果该值是由用户通过其他方式设置的,则链接可能会设置在同一域内预期之外的其他位置。这可能很烦人,但不应该是安全风险。

如果你正在做其他事情,比如eval在属性中包含一个来自用户的 javascript 字符串(例如通过数据库值),那么你将创建一个 XSS 漏洞。但是无论如何,您永远都不应该相信用户提供的值。那里的 html 数据属性没有什么特别之处。

于 2013-07-10T00:19:37.903 回答
0

您是否需要在将值用于重定向之前对其进行清理?

之前不需要消毒,但之后需要消毒。

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

即:http://www.example.com/ + value,其中 value 是search?q=<script>alert(1)</script>,以及搜索页面实际向浏览器输出原始查询的位置。

ps:这并不特定于数据属性。它将与普通属性一样工作。

于 2013-07-10T00:23:07.290 回答