gpt4 book ai didi

javascript - 像这样使用时 Object.prototype 的语义是什么

转载 作者:行者123 更新时间:2023-12-02 16:09:41 24 4
gpt4 key购买 nike

我对 Javascript 及其基于原型(prototype)的模型有一点经验,但是我有以下 Javascript 片段,它演示了我不理解的跨站点脚本攻击问题。调用Object.prototype时发生了什么,白名单数组如何更新?

function send (u,m) {console.log(m);}
function protect ( send ) {
var whitelist ={" https :// microsoft . com / mail ":true ,
" https :// microsoft . com / owa ": true };
return function (url , msg) {
if ( whitelist [ url ]) send (url , msg);
};
} send = protect ( send );
Object . prototype [" http :// evil . com "]= true ;
send (" http :// evil . com ", " bypass !");

最佳答案

What happened when Object.prototype was invoked

线路

Object.prototype [" http :// evil . com "] = true;

只是在 Object.prototype 上创建一个值为 true 的属性。这里没有发生任何其他事情。

how whitelist array is updated?

whitelist 不是一个数组,它是一个用于 map 的对象。与所有对象一样,它继承自 Object.prototype

在调用 protected send 函数之前,实际上不会发生任何奇怪的情况。在那里,它将查找传递的 url 作为 白名单 上的属性。现在白名单(本身)没有这个属性,所以 - 这就是原型(prototype)继承发挥作用的地方 - 它检查它继承的对象。事实上 Object.prototype 确实有这样的属性,查找将产生 true,并且您的条件意外地得到满足。

Javascript snippet that demonstrate the problem of cross-site scripting attack

我不会将此称为 XSS 攻击。它只是展示了原型(prototype)继承有多么强大,以及与其他代码混淆是多么容易(以及大多数保护任何东西的尝试是多么糟糕)。

实际的攻击媒介和您的安全问题是,像 Object.prototype[…]=true; 这样的恶意代码首先会在您的环境中进行评估。如果您无法控制谁执行代码,那么它就不安全。

关于javascript - 像这样使用时 Object.prototype 的语义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30355686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com