XSS ??????????и????????
???????????? ???????[ 2014/7/4 15:09:00 ] ????????XSS ??????????
???????????????????????????????????????????????????????????????????????????????ó?????
?????e????????????????????ɡ?????????????????????????????
????(function() {
????// ??????????
????var raw_fn = Element.prototype.setAttribute;
????...
????})();
???????????????????????????????
?????????????????????
????raw_fn.apply(this?? arguments)
?????????????????????????????? Function.prototype.apply ??????????????????????????????????????????
??????????????????????????????????????д apply??????????????? setAttribute ?£?????????????????????? raw_fn ???
????Function.prototype.apply = function() {
????console.log('????????????????:'?? this);
????};
????document.body.setAttribute('a'?? 1);
????Run
????????????????????????????????????????????????????
????????????? Function.prototype.apply ?????????????????????????????????????? apply.apply.apply.apply...
?????????apply ?? call ?????????????? call ??????
??????????????????????? apply ?? call ?????????????????? this ??????????????????£?????Щ??????????? this ???
????obj.method()
????method.call(obj)
????ò?????????????????????????????÷?????????????????д?????е??????????????????????
????????????????????????????????????????????
(function() {
// ??????????
Element.prototype.__setAttribute = Element.prototype.setAttribute;
// ?????????
Element.prototype.setAttribute = function(name?? value) {
// ?????????? ...
// ???????
this.__setAttribute(name?? value);
};
})();
Run
|
??????????????? apply ?????????????????????__setAttribute??????????????????????????????????????ó??????????????????????????????????λ??????????
(function() {
// ?????????????
var token = '$' + Math.random();
// ??????????
Element.prototype[token] = Element.prototype.setAttribute;
// ?????????
Element.prototype.setAttribute = function(name?? value) {
// ?????????? ...
// ???????
this[token](name?? value);
};
})();
Run
|
????????????????????????????????????????? this[token](...) ???????????????????????о???????÷???
?????????????????????????????о????????????????????????????????????????????????? Element.prototype ?????£??????????????????????????
for(var k in Element.prototype) {
console.log(k);
if (k.substr(0??1) == '$') {
console.error('¥?????????????????????????????');
console.error(Element.prototype[k]);
}
}
Run
|
????????????????????????????е????棬????????????????????????????????ε?????????????????e??????????????????????滻???
???????????????????????????????????????????????????α???????? —— ??????????????????
??????????????
??????????????????? JavaScript ????????????? enumerable??configurable ?????????????????????????????????????????????
?????????????
????// ??~ ???????????
????Object.defineProperty(Element.prototype?? token?? {
????value: Element.prototype.setAttribute??
????enumerable: false
????});
????Run
???????棬????????????????????????????????
??????????????й???????????????????
???????????????????и????????? apply ????????????????????????????Щ????????? test ??????????????Сд?????????? forEach ????????????????д???
??????????? RegExp.prototype.test ??д?????????????? false??????????????ж?????Ч???
????????????????????????裬????Щ????????????????????????????????????
???????? call ?? apply
????????????????????????????????????? Geek ????????ú????????
????????????????????????????????????????????????????Object.defineProperty ???к????????????????????????????????????д???????????
?????????????????д??????????????? Function.prototype.call ?? apply ???????????????????????????д???????
Object.defineProperty(Function.prototype?? 'call'?? {
value: Function.prototype.call??
writable: false??
configurable: false??
enumerable: true
});
// apply ????
???????Ч????
Function.prototype.call = function() {
alert('hello');
};
console.log(Function.prototype.call);
???????
function call() { [native code] }
Run
|
?????????????????????? call ?? apply????????ù???????????????
???????????????+???????????????????????????????????????????????????????????????а??????
????????????????????????????
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11