Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   XSS и html - безопасно? (https://javascript.ru/forum/jquery/71193-xss-i-html-bezopasno.html)

dima85 01.11.2017 12:30

Немного отойду от темы, вот есть rettyPhoto Plugin - это JS галерея.
И вот пишут, мол она не безопасна.
https://packetstormsecurity.com/file...Scripting.html
Если сформировать url: /#!%22%3E%3Cimg%20src=1%20onerror=prompt%280%29;%3E//
мы на страницу можем вставить вредный код.
Нужно сделать вот такой фикс:
hashIndex = parseInt(hashIndex);
hashRel = hashRel.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/])/g,'\\$1');


А почему на свою страницу, которая тупо смотрит URL и показывает его в HTML я не могу вывести вредный код?

laimas 01.11.2017 12:50

Цитата:

Сообщение от dima85
Если сформировать url: /#!%22%3E%3Cimg%20src=1%20onerror=prompt%280%29;%3E//

Это на стороне клиента, то есть клиент ввел, клиент что-то получил. Вам это нужно? На здоровье, тренируйтесь. Пока вами введенное не будет на страницах других пользователей, это никому угрожать не будет.

Rasy 01.11.2017 12:58

Цитата:

Сообщение от dima85
я не могу вывести вредный код?

var ex = 'alert(%27ALARM%27);';
  eval(decodeURI(ex));

dima85 01.11.2017 12:59

Насколько я понял проблема rettyPhoto Plugin в том что они используют decodeURI

Если я у себя сделаю вот так, из плюсов будет правильно отображаться русские символы. Но из минусов я смогу добавлять вредный код.
window.onload = function() {
$("#test").html(decodeURI(window.location.search));
}


Вопрос, есть какой-то еще способ безопасно в читаемом виде выводить русские символы с url?

laimas 01.11.2017 13:17

Цитата:

Сообщение от dima85
Вопрос, есть какой-то еще способ безопасно в читаемом виде выводить русские символы с url?

Других способов, кроме замены опасных символов на безопасные, нет.

ruslan_mart 01.11.2017 16:11

Скрипты (<script>) при добавлении через innerHTML не срабатывают. А вот через jQuery сработает, так как там метод "html" не через innerHTML вставляет данные. Для безопасной вставки достаточно использовать метод "text" (или свойство textContent в нативном JS).


Часовой пояс GMT +3, время: 20:59.