【问题标题】:Closing access to global variables javascript关闭对全局变量 javascript 的访问
【发布时间】:2014-05-20 11:24:32
【问题描述】:

我正在编写一个可供外部客户使用并由我的客户在其网络浏览器中执行的 js API。

由于这可能对我的网络用户有害(安全漏洞等),我希望至少允许或禁止访问 document 全局变量和其他类似 XMLHTTPRequest API 的变量。

我该怎么做?

编辑: 我正在考虑在 API 用户编写的函数的包装器上执行 document = null 之类的操作,但它不起作用。此外,使用这种方法很难做到彻底,因为有太多的变通方法和太多的可能性要考虑所有这些。

【问题讨论】:

  • 根据您运行他们的代码的方式,可能会隐藏这些变量。将它们完全删除并不容易,可能需要严格模式。祝你好运。
  • 不要用 JavaScript 编写 API 代码?为工作使用正确的工具。 JavaScript 并不是解决所有编程问题的锤子。
  • George,API 可以是任何语言(在本例中为 `node.js),但 API 的结果必须是 js,因为这是分发代码以在 Web 浏览器中运行.我考虑过使用 Applet 或 Java Web Start,但我不想通过告诉客户安装东西来赢得客户的不信任。

标签: javascript security web-standards


【解决方案1】:

答案很简单:你不能。

这可能不是答案,但那些全局变量不能修改。

自己试试吧:

window = 1;
console.log(window) // Window {top: Window, window: Window, ...

document = false;
console.log(document) // #document (as in the document object)
document = null;
console.log(document) // #document (same)

window.document = false;
console.log(window.document) // #document

不过,XMLHttpRequest 似乎可以做到这一点:

XMLHttpRequest = null
console.log(XMLHttpRequest)        // null
console.log(window.XMLHttpRequest) // null

因此,您也许可以禁用个别功能。

但是,像这样乱用本机功能是一个的想法,因为它可能会产生意想不到的副作用。例如,jQuery 使用 XMLHttpRequest 作为它的 ajax 函数。

【讨论】:

  • 强大的全局变量不仅是不可更改的,you can't mask them effectively,即使可以,也可以通过黑名单实现安全性,而黑名单历来对坚定的攻击者表现不佳。
【解决方案2】:

Caja

Caja 编译器是一种工具,可让第三方 HTML、CSS 和 JavaScript 安全地嵌入您的网站。它支持嵌入页面和嵌入应用程序之间的丰富交互。 Caja 使用对象能力安全模型来支持广泛的灵活安全策略,以便您的网站可以有效地控制嵌入式第三方代码可以对用户数据执行的操作。


ADSafe

Web 浏览器的编程语言 JavaScript 不是一种安全语言。页面中的任何脚本都可以直接访问页面的所有信息和关系。这使得使用混搭和脚本广告具有不可接受的风险。

ADsafe 可以安全地将访客代码(例如第三方脚本广告或小部件)放在网页上。 ADsafe 定义了一个足够强大的 JavaScript 子集,允许访客代码执行有价值的交互,同时防止恶意或意外损坏或入侵。 ADsafe 子集可以通过 JSLint 等工具进行机械验证,因此无需人工检查即可检查访客代码的安全性。 ADsafe 子集还强制执行良好的编码实践,增加来宾代码正确运行的可能性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 2021-11-24
    • 2011-10-20
    • 2014-01-17
    • 2018-10-28
    • 2022-06-11
    • 1970-01-01
    • 2012-10-11
    相关资源
    最近更新 更多