你能在这个javascript问题上找到任何可用的安全威胁吗?
Can you find any security threat available on this javascript problem?
假设我有如下代码:
object[hash].init();
请假设哈希来自网站哈希(www.example.com#哈希)。
在我上面显示的代码中是否存在任何可能的安全漏洞?例如,是否有可能在#散列中放入任何注入并触发任何恶意代码的代码?
谢谢。
这将没有问题,hash
将而不是被评估为JavaScript代码,它将被视为字符串。如果hash
的值不是object
的有效属性名,object[hash]
将返回undefined
,您将得到一个错误(不能在undefined
上调用init
)。
另一方面,如果您使用hash
的方式将字符串作为JavaScript代码求值,那么则存在安全问题。
object[hash].init();
,但这是而不是(即使有内引号):
setTimeout("object['" + hash + "'].init();", 100);
例如,如果hash
是包含
']; alert('foo'); object['something
则执行alert('foo');
。在不破坏代码的情况下注入和执行代码是可能的。
那就是说,我仍然不会这样做。它将代码过多地捆绑在一起。我可能会创建一个函数映射(与您的示例类似,但不相同):
var hashCodes = {
'someHash': function() {
object.something.init();
}
};
if(hashCodes.hasOwnProperty(hash)) {
hashCodes[hash]();
}
这不是真正的安全问题,更多的是设计问题,但是从公开的URL访问可能是内部数据结构的内容可能会使恶意用户以意想不到的方式操纵您的代码。虽然这不会直接暴露安全漏洞,但意外的代码行为会使风险更容易潜入代码。但是,如果您确定以"错误"的顺序调用init()方法即使发生也没关系,那么就没有问题了。
唯一可能导致问题的方法是使用ES6 harmony代理。
代理允许您捕获所有方法。参见FF代理
var object = Proxy({
"get": function _get(obj, name) {
// name is an evil string containing javascript
eval(name); // security risk
return {
"init": function _init() {
// init code
}
};
}
});
没有其他的方法来实现一个全面的。这个特殊的全捕获将计算name
相关文章:
- 在javascript中调用函数/对象引用时,可容纳任何数据类型
- Graphiti中的形状有任何可调整大小的限制吗
- 任何可用作HTML5离线缓存链接的免费服务
- 可用于重定向到任何 URL 的 JavaScript 函数
- 在过去24小时内,谷歌应用程序脚本或可视化API的任何变化
- 嵌套文档.writes和第三方广告在IE中不起作用!!!!任何安全的解决方法
- 创建可在任何地方使用的 JS 函数?范围和功能“未定义”的问题
- JQuery功能,可在任何地方增加字体大小
- 单页 JavaScript 应用程序的可访问性/安全扫描程序
- 是否有任何工具可以检查js文件是否可以安全压缩
- 任何用于可视化 box API 的 JSON 响应的开源解决方案
- 正则表达式,任何术语可选且顺序(javascript 或 java)
- 任何用于 JavaScript 执行上下文可视化的现有工具
- Webpart 在 ASP.NET 中是否有任何替代方案来创建可拖放内容,或使用 Jquery 进行任何混合
- 是否有任何库可以为 JSON 数据生成元组和重建字符串
- 获取任何 JavaScript 值或对象的字符串表示形式的安全方法
- 正在使用Javascript来验证“确认密码”输入,增加了任何安全风险
- 一次只允许一个可拖放,允许任何可移除
- 标准机构中是否有任何支持安全复制到剪贴板的移动
- 任何可用于自动同步.js文件的工具