我目前正在为自己开发一个网络扩展(Firefox:最新),它可以阻止/捕获函数,这些函数能够将字符串作为 javascript 代码进行评估和执行(例如,eval、函数构造函数、setTimeout)。
到目前为止,扩展程序按预期工作,但 javascript:-URI 被分配给 location/location.href。
例如:
location.href = "javascript:alert('Hello there')";
由于位置对象是不可配置的,我无法重写它(例如,设置为 null)或为其定义 setter。
我知道,“Content-Security-Policy”(不允许 unsafe-inline
)能够阻止此行为,但是以这种方式使用 CSP 也会阻止内联代码的所有其他实例(例如,脚本标签之间的代码) )。
我想避免这种情况,因为它需要每一个
<script>...</script>
重新插入,例如随机数。
这引出了我的问题: 有没有办法阻止/捕获这种代码执行?
最佳答案
假设您希望阻止一个简单链接执行 Javascript,该链接的 href
属性设置为 javascript:alert('Hello There')
。
<a href="javascript:alert('Hello there')">Click me</a>
避免这种情况的方法之一是简单地选择所有此类链接,并将 href
属性重置为无害的内容,例如 javascript:void(0)
.
在下面的代码片段中,我使用属性选择器来选择具有以 javascript
开头的 href
值的所有元素。
var elems = document.querySelectorAll('[href^="javascript:"]');
for (var idx = 0; idx < elems.length; idx++) {
elems[idx].href = "javascript:void(0)";
}
<a href="javascript:alert('Hello there')">Click me</a>
关于JavaScript:阻止执行 javascript:-分配给 location.href 的 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47942213/