как защитить location.href от межсайтового скриптинга в javascript?

Здесь, в моей функции javascript, я использую location.href следующим образом: location.href = "../Floder1/result.jsp"; он работает нормально, но когда я использовал инструмент укрепления, он показывает межсайтовый скриптинг which can result in the browser executing malicious code., как защитить это от межсайтового скриптинга. Большое спасибо, ваш ответ будет очень ценен.


person tajMahal    schedule 22.08.2014    source источник
comment
откуда берется строка, которую вы устанавливаете location.href?   -  person kinakuta    schedule 22.08.2014
comment
Присвоение значения location.href неправильно? Если это так, помогите мне, пожалуйста.   -  person tajMahal    schedule 22.08.2014
comment
@Gabs00 Gabs00, флаг ничего не делает, просто для идентификации/проверки я оставил флаг   -  person tajMahal    schedule 22.08.2014
comment
@kinakuta, я думаю, что строки взяты из файлов cookie.   -  person tajMahal    schedule 22.08.2014
comment
Можете ли вы предоставить больше информации о том, чего именно вы пытаетесь достичь? Проблема и почему вы выбрали это решение   -  person Gabs00    schedule 22.08.2014
comment
stackoverflow.com/questions/24078332/, я сослался на эту ссылку вторым ответом, но я не знаю, как реализовать мое текущее требование.   -  person tajMahal    schedule 22.08.2014
comment
@ Gabs00, теперь проверьте мой вопрос, я отредактировал. Просто я присваиваю значение location.href.   -  person tajMahal    schedule 22.08.2014


Ответы (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
person SnakeDrak    schedule 22.08.2014
comment
, как я должен написать условие для моей текущей ситуации (вопрос), чтобы защитить - person tajMahal; 22.08.2014
comment
змея, я не использую iframe в своем коде, просто у меня есть кусок кода в моей функции js location.href = ../Floder1/result.jsp; - person tajMahal; 22.08.2014
comment
В чем проблема? Эти location.href перенаправляют на другую страницу. Это не уязвимость. Если инструмент fortify говорит, что эта строка является уязвимостью XSS, это неверно. Прочитайте это объяснение. - person SnakeDrak; 22.08.2014
comment
Если это решит вашу проблему, отметьте это, пожалуйста :). В противном случае скажи мне, что ты хочешь сделать. С уважением! - 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
person phoenixstudio    schedule 16.01.2021