Вопрос по html, xss, javascript – Этот код уязвим для атак XSS?

6

Вопрос возник из этого:

Почему браузер изменяет идентификатор элемента HTML, который содержит &#Икс?

Учитывая следующую веб-страницу:


  
    
      // --------------------------------------------------------
      // could calling this method produce an XSS attack?
      // --------------------------------------------------------
      function decodeEntity(text){
        text = text.replace(//g,''); // strip out all HTML tags, to prevent possible XSS
        var div = document.createElement('div');
        div.innerHTML = text;
        return div.textContent?div.textContent:div.innerText;
      }
      function echoValue(){
        var e = document.getElementById(decodeEntity("/path/$whatever"));
        if(e) {
          alert(e.innerHTML);
        }
        else {
          alert("not found\n");
        }
      }
    
  
  
    <p id="/path/$whatever">The Value</p>
    Tell me
  

id из

 Элемент содержит символы, которые были экранированы для предотвращения атак XSS. Часть HTML и часть JS генерируются сервером, и сервер вставляет одинаковое экранированное значение (которое может происходить из незащищенного источника) в обе части.

Сервер экранирует следующие диапазоны символов в&#x формат:

0x00 - 0x2D0x3A - 0x400x5B - 0x5e0x600x7B - 0xFF0x0100 - 0xFFFF

Другими словами: единственные символы, которыене избежали:

0x2E - 0x39 (,,)./01234567890x41 - 0x5A (A - )Z0x5F ()_0x61 - 0x7A (a - )z

Теперь я должен получить доступ к этому

 через JavaScript. ФункцияechoValue() в указанном вопросе всегда не удалось, потому что браузер конвертирует$ в$ в части HTML, но оставляет его как$ в части JS.

Так,Gareth придумалответ это просто и работает.

Меня беспокоит то, что возможность XSS-атаки, которая была устранена путем экранирования динамических строк, снова возникнет при использованииdecodeEntity() Функция предоставлена в ссылочном ответе.

Кто-нибудь может указать, могут ли быть проблемы безопасности (который?) или нет (почему бы и нет?)?

Просто сделайте так, чтобы сервер не экранировал его внутри скрипта. Bergi

Ваш Ответ

2   ответа
0

которые выПовторное применение на входе может привести к сбою этой атаки, но при условии произвольного вводаdecodeEntity, Вот'Пример запуска скрипта:

decodeEntity("<img onerror="alert(\"test\")" \nsrc="test">")

Это работает потому, что/<(.*?)>/ соответствует только если< а также> находятся на одной линии.

4

обсуждающие санитарию HTML в JavaScript и XSS в Javascript:

Обеззараживать / переписывать HTML на стороне клиентаКак предотвратить атаки с использованием Javascript в пользовательском HTML

Урок безопасности № 1: Дон»заново изобретать колесо. Если что-то было сделано раньше, скорее всего, они сделали лучшую работу, чем ваше специальное решение.

Хотя я могуЯ изо всех сил пытаюсь использовать ваше простое регулярное выражение. Я не уверен, что он действительно охватывает все случаи. Первая ссылка предоставляет решение, которое является более сложным и было тщательно проверено и проверено.

Я также предлагаю вам взглянуть наШпаргалка XSS Filter Evasion, Очень хорошо показывает, какие неприятные вещи могут придумать люди.

Просто наблюдение ... обе ссылки идут на один и тот же URL. Может быть, это было не специально. Mt. Schneiders

Похожие вопросы