Hayır, artık Firefox 21, Chrome 27 veya IE 10'da []
veya {}
kuruculara iletilen değerleri yakalamak mümkün değil . İşte, http://www.thespanner.co.uk adresinde açıklanan ana saldırılara dayanan küçük bir test sayfası. / 2011/05/30 / json kaçırma / :
( http://jsfiddle.net/ph3Uv/2/ )
var capture = function() {
var ta = document.querySelector('textarea')
ta.innerHTML = '';
ta.appendChild(document.createTextNode("Captured: "+JSON.stringify(arguments)));
return arguments;
}
var original = Array;
var toggle = document.body.querySelector('input[type="checkbox"]');
var toggleCapture = function() {
var isOn = toggle.checked;
window.Array = isOn ? capture : original;
if (isOn) {
Object.defineProperty(Object.prototype, 'foo', {set: capture});
} else {
delete Object.prototype.foo;
}
};
toggle.addEventListener('click', toggleCapture);
toggleCapture();
[].forEach.call(document.body.querySelectorAll('input[type="button"]'), function(el) {
el.addEventListener('click', function() {
document.querySelector('textarea').innerHTML = 'Safe.';
eval(this.value);
});
});
<div><label><input type="checkbox" checked="checked"> Capture</label></div>
<div><input type="button" value="[1, 2]" /> <input type="button" value="Array(1, 2);" /> <input type="button" value="{foo: 'bar'}" /> <input type="button" value="({}).foo = 'bar';" /></div>
<div><textarea></textarea></div>
Kısa ve uzun formlar aracılığıyla dizileri ve nesneleri window.Array
başlatan bir ayarlayıcıyı geçersiz kılar ve Object.prototype.foo
test eder.
Bölüm 1.5'teki ES4 spesifikasyonu , nesne ve dizi başlatıcılar için yeni nesneler oluşturmak için nesne ve dizinin genel, standart bağlantılarının kullanılmasını gerektirir "ve" Internet Explorer 6, Opera 9.20 ve Safari 3 " Object ve Array'ın yerel veya global yeniden yayımlarına saygı göstermez, ancak orijinal Object ve Array yapıcılarını kullanır. " Bu, ES5, bölüm 11.1.4'te korunur .
Allen Wirfs-Brock , ES5'in aynı zamanda DefineOwnProperty kullandığından nesne başlatmanın ayarlayıcıları tetiklememesi gerektiğini belirttiğini açıkladı . MDN: Nesnelerle Çalışma , "JavaScript 1.8.1'den başlayarak, nesne ve dizi başlatıcılarda özellikler ayarlanırken ayarlayıcıların artık çağrılmadığını" belirtir. Bu, V8 sayı 1015'te giderildi .