【问题标题】:User entered javascript less safer than the browser web developer tool?用户输入的 javascript 不如浏览器 Web 开发工具安全?
【发布时间】:2014-11-10 02:19:00
【问题描述】:
我想在我的网页中添加一个小功能,用户可以在其中编写 javascript 来进行一些数据操作(例如,从数据表创建一个新对象 - 理想情况下,我想禁用JS如通过ajax等访问服务器)。就安全性而言,这真的是个坏主意吗?似乎允许此类功能(例如 w3school try-it 功能)的网站使用服务器端验证。 Stackoverflow 上有人建议在 Web Worker 线程中运行用户代码更安全,我可以这样做。
但我的问题是,总的来说,如今大多数浏览器都带有开发人员工具和控制台,您可以在其中编写和执行 javascript 代码。因此,添加用户 JS 编辑器功能不会使应用程序比它更容易受到攻击。我想对了吗?
【问题讨论】:
标签:
javascript
user-input
【解决方案1】:
理论上这是“安全的”。从某种意义上说,用户可以通过调试控制台甚至在地址栏中使用"javascript:" 协议来执行此操作是安全的。
不安全的是将这些脚本保存在数据库中。或者更确切地说,允许一个用户的脚本在另一个用户的会话中运行。
用户自己执行的是他自己的风险。如果他删除了所有数据,那是他的错。就像在 Linux 上允许用户访问 rm 命令一样。
您要保护的是用户脚本中的其他用户数据。
这是人们不断尝试在论坛 cmets 中注入 javascript 的原因之一 - 这样当其他人查看被黑评论时,脚本可以窃取黑客无法访问的信息。
【解决方案2】:
您是正确的,应用程序无法避免用户编写额外代码以在自己的浏览器中执行。
但是,用户通常无法编写代码以在其他人的浏览器中执行,并且在您的应用中启用该行为可能会导致应用受到攻击或其他未经授权的行为。通过允许一个用户将 javascript 添加到其他人查看和执行的页面,这个攻击向量就被启用了。
两种主要方法是信任和沙盒。在已知身份并且可能会出现滥用后果的小社区中,信任可能是可以的……但仍然存在问题。浏览器中的沙盒 JS 也很重要。没有办法真正阻止对window 的访问,因为this 可以变成window,eval 有一些技巧,等等......所以大多数沙箱都失败了。