所以我之前了解到,使用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+'";
现在我想知道,恶意程序员可以利用这个吗?在将其用于重定向之前,是否需要清理该值?
答案 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:这不是特定于数据属性的。它与普通属性的作用相同。