Я создаю сайт, где любой сможет взаимодействовать с моим iFrame с помощью команды postMessage (т. Е. Функции с песочницей, а не полный контроль над окном).Как я могу сделать это, не раскрывая куки моего посетителя через XSS?https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Security_concerns
Допустим, у меня есть следующая функция получения:
var secret = localStorage.getItem("secret");
window.addEventListener(message,function(e){
// any e.origin is allowed
if(e.func=="doX"){
var string = e.data.string1 * e.data.string2;
}else if(e.func=="doY"){
// another javascript function, no DOM interaction
config[e.data.key] = e.data.value;
}else if(e.func=="doZ"){
document.getElementById("app")=e.data.title
document.getElementById("description")=e.data.description
}
})
Я прочитал на странице Mozilla, что разрешение запроса из любого источника довольно опасно.Как я могу правильно предотвратить XSS для каждого из doX, doY и doZ, в зависимости от ситуации?
Я тоже попробовал.Безопасны ли эти функции?
var secret = localStorage.getItem("secret");
window.addEventListener(message,function(e){
// any e.origin is allowed
if(typeof e.func!=Number) return;
if( e.func < 0 || e.func > 2) return;
if(e.func==0){ // we will call this "Safe 0"
if(e.data.num1 > 1000 || e.data.num2 > 1000) return;
var num3 = e.data.num1 * e.data.num2;
}else if(e.func==1){ // safe 1
if(!isHex(e.data.value))return; // see below for isHex func
config['something'] = e.data.value;
}else if(e.func==2){ // safe 2
if(e.data.title.length < 8) document.getElementById("app")=e.data.title;
if(e.data.description.length < 15)document.getElementById("description")=e.data.description
}
})
function isHex(h) {
var a = parseInt(h,16);
return (a.toString(16) === h)
}
Я узнал, что элементы ввода HTML также будут недоступны с хостинг-сайта, а это означает, что эти "postMessage" являются основным источником уязвимости.Источник для этого последнего оператора: Получить значение поля ввода внутри iframe