使用不受信任的字符串 (require.js) 调用 require() 的安全问题
Security Issues by calling require() with untrusted string (require.js)
我的浏览器应用程序使用 require.js。该应用程序在屏幕上显示许多不同的小部件之一。 URL 片段包含小部件的路径(require.js 路径),然后调用动态加载它的要求:
var moduleName = getUrlFragement('widget'); // accesses window.location
require(moduleName);
moduleName 是一个不受信任的 字符串。用户可以随意制作。
这有哪些安全问题?
到目前为止,这是我自己的发现:
- 攻击者无法从不同的域
加载任意URL
- 攻击者无法从同一域
加载任意URL
- 攻击者可以 强制加载我的应用程序定义的任何模块,这将运行 模块具有的任何初始化逻辑。 这是不允许的。
有什么我遗漏的吗?
没有。您已经完整准确地捕获了安全问题。
我的浏览器应用程序使用 require.js。该应用程序在屏幕上显示许多不同的小部件之一。 URL 片段包含小部件的路径(require.js 路径),然后调用动态加载它的要求:
var moduleName = getUrlFragement('widget'); // accesses window.location
require(moduleName);
moduleName 是一个不受信任的 字符串。用户可以随意制作。
这有哪些安全问题?
到目前为止,这是我自己的发现:
- 攻击者无法从不同的域 加载任意URL
- 攻击者无法从同一域 加载任意URL
- 攻击者可以 强制加载我的应用程序定义的任何模块,这将运行 模块具有的任何初始化逻辑。 这是不允许的。
有什么我遗漏的吗?
没有。您已经完整准确地捕获了安全问题。