Этот код уязвим для атак XSS?

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

Почему браузер изменяет идентификатор элемента 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() Функция предоставлена в ссылочном ответе.

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

Ответы на вопрос(2)

Ваш ответ на вопрос