我正在编写一个js API,该API将由外部客户使用,并由我的客户在其Web浏览器中执行。
由于这对我的网络用户(安全漏洞等)可能有害,我想允许或禁止至少访问document
全局变量和{{1}等其他变量。 API。
我该怎么做?
修改
我正在考虑在API用户编写的函数的包装上执行XMLHTTPRequest
之类的操作,但它不起作用。此外,使用这种方法很难彻底,因为有太多的变通办法和太多的可能性来考虑所有这些。
答案 0 :(得分:2)
答案很简单:你不能。
这可能不是答案,但是这些全局变量无法修改。
亲自尝试:
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函数。
答案 1 :(得分:1)
Caja编译器是一种可以安全地嵌入您网站的第三方HTML,CSS和JavaScript的工具。它支持嵌入页面和嵌入式应用程序之间的丰富交互。 Caja使用对象功能安全模型来实现各种灵活的安全策略,以便您的网站可以有效地控制嵌入式第三方代码可以对用户数据执行的操作。
JavaScript,Web浏览器的编程语言,不是一种安全的语言。页面中的任何脚本都可以访问页面的所有信息和关系。这使得mashup和脚本广告的使用风险无法接受。
ADsafe可以安全地将访客代码(例如第三方脚本广告或小部件)放在网页上。 ADsafe定义了一个强大的JavaScript子集,允许访客代码执行有价值的交互,同时防止恶意或意外损坏或入侵。 ADsafe子集可以通过JSLint等工具进行机械验证,因此无需人工检查即可查看访客代码的安全性。 ADsafe子集还实施了良好的编码实践,增加了访客代码正确运行的可能性。