Javascript 攻击者能否在html5数据属性中插入恶意代码

Javascript 攻击者能否在html5数据属性中插入恶意代码,javascript,jquery,security,xss,Javascript,Jquery,Security,Xss,因此,我在前面了解到,使用html5中的数据属性,可以在javascript文件中插入要处理的值。e、 g <a href="#" data-name="hello" class="check">Hey</a> 现在我想知道,一个恶意的程序员能利用这个漏洞吗?在将该值用于重定向之前,是否需要对其进行清理?如果HTML是从用户输入中获取的或是从用户输入中生成的,是的,您肯定应该执行清理。但是,如果您询问数据属性是否以其他属性不易受攻击的方式存在漏洞,答案是否定的。具有浏览

因此,我在前面了解到,使用html5中的数据属性,可以在javascript文件中插入要处理的值。e、 g

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

现在我想知道,一个恶意的程序员能利用这个漏洞吗?在将该值用于重定向之前,是否需要对其进行清理?

如果HTML是从用户输入中获取的或是从用户输入中生成的,是的,您肯定应该执行清理。但是,如果您询问数据属性是否以其他属性不易受攻击的方式存在漏洞,答案是否定的。

具有浏览器访问权限(例如通过XSS)的用户可以在数据属性中插入任何内容。但是,他可以在任何时间、任何地方重定向,所以这件小事无关紧要

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

如果您正在执行其他操作,例如在属性中包含来自用户的
eval
javascript字符串(例如,通过数据库值),则会创建XSS漏洞。但无论如何,您永远都不应该信任用户提供的值。这里的html数据属性没有什么特别之处

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

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

在您的示例中,如果您没有清理数据,您可能会遇到经典XSS的受害者

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

p、 s:这不是特定于数据属性的。它将与普通属性一样工作。

这取决于具体情况

攻击者可以在其浏览器中修改任何他想要的内容,因此无论您在前端进行了多少清理,攻击者都可以绕过您的所有javascript函数等,绕过您的前端代码

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

如果您将用户重定向到的地址使用该数据属性对服务器执行某些操作,则“是”将在前端和后端两个位置对其进行清理。否则,您不必担心,最坏的情况是恶意用户(或知情用户)最终将进入404页面

**编辑**

在阅读了您在本答案中的评论后,以下是我的最新答案:

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

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

如果你改变谷歌脚本中的任何值,谷歌分析将无法工作,你也无法通过分析脚本攻击谷歌

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

回到你的情况:

如果要使用该数据属性来执行document.write()、一个
eval
、数据库查找或任何敏感操作(删除、更新、检索数据),那么请务必选择“是”:对其进行清理


你打算怎么消毒?这是一个具体的问题,你很可能应该问一个新问题

这就好比有人可以利用网站上的任何其他HTML片段一样,所以没有什么好担心的,至少不会比平常更担心。而且你不能真正清理客户端代码,只有当它被发送到服务器端时,你才能这样做。你不应该允许未列入白名单的HTML输入到你的网站中。即使您没有数据属性。数据属性不好还有另一个原因。@BenjaminGruenbaum:Data-属性有什么问题?@Blender通过将应用程序逻辑数据添加到DOM而不是存储在JavaScript对象中,它们完全打破了关注点之间的分离。DOM不应该是应用程序中真实性的来源,应该只有一个真实性来源。将应用程序的“真相”存储在其表示层似乎不合逻辑,并且常常会导致错误代码。每当我看到一个节点有一堆
数据-
属性,以及对这些属性的查询时,感觉就像是一个设计问题-只需使用一个对象。此外,它是我的文档,包含我创建的内容,除了静态HTML案例,我为什么要查询它?@BenjaminGruenbaum是的,但也有-全局可变共享状态和名称冲突;)对于OP没有明确写出来的东西,有很多假设。@AlanChavez谢谢你的回答Alan。基本上,我给每个用户一个类似facebook的脚本粘贴到他们的网站上,这样当用户点击这个小部件时,他们就会开始与我的网站托管的用户聊天。但是,由于用户必须从我的网站复制脚本并粘贴到他们的网站上,因此他们可以随时在途中使用这些值。所以我想知道可能发生的危险。是的,我就是这么想的。我并没有看到比被重定向到另一个非预期的url更危险的事情。
var value=$('.check').data('name');
window.location.href="http://www.example.com/'+value+'";