- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否可以在 Javascript 中删除权限?
function takeAwaySetTimeout(){ var oldSetTimeout = window.setTimeout; window.setTimeout = function() { console.log("not working anymore!"); };}setTimeout("console.log('this works');",0); // "this works!"takeAwaySetTimeout();setTimeout("console.log('this works');",0); // "not working anymore!"
不幸的是,在我看来这很复杂,因为一个简单的delete window.setTimeout
将带回特权!所以对我来说,这似乎表明不幸的是 Javascript 不会提供被剥夺的特权。
我知道特权这个词有些借用。这是问题的背景,我认为任何可能有效地删除 [Native Code] 函数
(=方法 .toSource()
表明它提供了一个函数由 javascript 引擎)在某些部分可以访问,作为一种方法来保护受此限制(权限被删除)的代码不那么安全。
我欢迎您提出更清晰的要求,并希望您能负责任地回应并取消“免费”问题!还请考虑确实已经收到了两个有用的答案,这表明有人能够理解这个问题。当然,如果可能的话(有些东西只需要背景......)我也努力扩大理解。
“目前还不清楚限制对 native 功能的访问如何提供更高的安全性。是这个服务器端或客户端 JavaScript?”
1) 是客户端还是服务器端并不重要。当然,服务器端似乎更重要一点。因为可能有更多的功能(即写入文件、访问文件......),所以浏览器内部的 Javascript 可能能够做的更多(但考虑新 API 的功能......和风险!)
2) 也许 window.setTimeout()
[ native 函数] 的选择并不完美(为清楚起见),因为可能没有明显的直接安全关系。它已被使用,因为它是众所周知的并且是占位符。见(3)
3) 我的理由是提供给 Javascript 代码的每个功能都是矛盾的。在pro方面,丰富了“它能做什么?”积极和善意的代码将负责任地使用它。然而,在方面,功能可能意味着访问某些东西,如果滥用这些东西可能会导致与安全相关的问题。一个例子是外部 Javacript 会执行 XHR 并将信息发布到服务器,可能是具有私有(private)数据(即客户健康状况)的数据。例如,如果可以更好地移除 XHR 对象 window.XMLHttpRequest
,那么这种滥用的机会就会受到限制。简而言之,“你不能开枪打人,没有枪!”。比如XHR(可能比setTimeout更明显)就是这样一把枪。如果“不受信任的代码”并不真正需要 XHR,那么通过放弃此特权/功能来消除风险是明智的。
4) 我认为(也在回复的上下文中)这个问题已经演变。我认为很清楚,但如果不是这样,请发表评论。虽然最初 Juhana说:
It's a bit unclear[...]
我知道它不是完全不清楚,因此现在它可能已经足够清晰(请考虑有用的答案)以允许“取消保留”/“释放问题”。此外,如果您发现该问题足够有趣,可以保留,那么现在是时候发现它足够有趣,可以投票了;)
最佳答案
有很多方法可以获得原始功能,黑名单无法工作,因为你会错过一些东西,例如
Window.prototype.setTimeout.call(window,'alert(1)');
此问题的一个解决方案是创建一个列入白名单的沙箱。我创建了一个名为 MentalJS 的沙箱。此沙箱使用 $ 后缀重写您的所有代码,例如 alert(1) 变为 alert$(1) 这允许您选择在沙箱中允许哪些函数/对象。
代码可在此处获得: http://code.google.com/p/mentaljs/
和一个演示: http://businessinfo.co.uk/labs/MentalJS/MentalJS.html
关于javascript - 在 Javascript 中可以删除特权吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20655721/
我想用我的 C# 应用程序创建一个文件夹。我正在写代码,对我来说一切正常,但我的 friend 得到一个错误 Access to the path 'myfolder' is denied. 那我怎么
我遇到了这个非常大的工具,然后深入研究了一些不太漂亮的文档和/或购买了 ebook : 我只想问: Apache Nutch 如何处理 javascript 繁重的网站,以及它如何获取页面? 我的意思
在MySQL中,如何只撤销DROP DATABASE权限,而不撤销DROP TABLE权限? 最佳答案 只需为单个表分配 DROP 权限,而不是为整个数据库分配权限。 关于MySQL DROP DAT
我有一个 bash 脚本可以备份我的数据文件 (~50GB)。脚本基本上是这样的: sudo tar /backup/mydata1 into old-backup-1.tar sudo tar /b
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我在 Google 的 Cloud Composer 上运行 Airflow。我正在使用 KubernetesPodOperator并希望通过 gcsfuse 将谷歌存储桶挂载到 pod 中的目录中.
我需要从客户端机器加载一个 CSV 文件到 MySQL 服务器数据库。我正在尝试 LOAD DATA INFILE。 我的困惑是关于使用所需的访问权限- 加载数据文件- 加载数据本地 INFILE 之
我目前正在尝试在 Amazon Redshift 中创建一个新的只读用户。 我使用的 Redshift 版本是: PostgreSQL 8.0.2 on i686-pc-linux-gnu, comp
我正在尝试将 RackSpace 中的 MySQL 数据库 备份到 AWS。 我听从了这个 blog 的建议并在我的 AWS RDS 控制面板中设置了 log_bin_trust_function_c
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: How to force my .NET App to run as administrator on Wi
我是一名优秀的程序员,十分优秀!