Здесь, в моей функции javascript, я использую location.href следующим образом: location.href = "../Floder1/result.jsp";
он работает нормально, но когда я использовал инструмент укрепления, он показывает межсайтовый скриптинг which can result in the browser executing malicious code.
, как защитить это от межсайтового скриптинга. Большое спасибо, ваш ответ будет очень ценен.
как защитить location.href от межсайтового скриптинга в javascript?
Ответы (2)
Межсайтовый скриптинг возникает, когда пользователь может поместить данные на веб-страницу или получить сеанс данные например.
КАК ЗАЩИТИТЬ
Вы никогда не разрешаете вставлять код на свою веб-страницу. Итак, если у вас есть форма, проверьте ее на сервере и проанализируйте перед печатью на своей странице.
Вы не должны допускать, чтобы содержимое страницы изменялось файлом href
. Вы всегда escape
данные раньше!.
Прочитайте этот ответ о location.href
: https://stackoverflow.com/a/24089350/2389232
ОБРАЗЕЦ:
У вас есть iframe, который изменяется с помощью переменной GET:
sample.tld/index.jsp?iframe=none.jsp
Я могу ввести script
в ваш iframe, поэтому вы должны защитить его escape-символами:
// Escape the characters in the server and send it to the client.
// So the variable GET iframe will be valid
location.href
перенаправляют на другую страницу. Это не уязвимость. Если инструмент fortify говорит, что эта строка является уязвимостью XSS, это неверно. Прочитайте это объяснение.
- person SnakeDrak; 22.08.2014
Этот код должен работать только в Firefox, так как Proxy реализован не во всех браузерах.
Что вы можете сделать, так это заменить исходный объект location
проксированным, где вы добавляете некоторую логику к своему прокси, чтобы проверить допустимое значение для местоположения. это не защитит от прямого изменения исходного объекта (location
), но если вы используете в своем коде только проксированный объект, все будет в порядке.
// suppose we are in example.com
let validator = {
set: function(obj, prop, val) {
if (prop === 'href') {
if(typeof val != 'string'){
throw new TypeError('href must be string.');
}
if (!val.startsWith("https://example.com/")) {
throw new Error('XSS');
}
}
obj[prop] = val;
return true;
},
get: function(obj, prop){
return prop in obj?
obj[prop] :
null;
}
};
let proxiedLocation = new Proxy(location, validator);
console.log(proxiedLocation.href);// work same as location.href
proxiedLocation.href = "https://example.com/page1";// work fine
proxiedLocation.href = "https://example.net/page1";// cause exception