Обход HTML-сущностей - PullRequest
0 голосов
/ 20 апреля 2019

В любом случае можно обойти санацию ввода и выполнить внедрение HTML.

Это упражнение из bWAPP. Когда я пытаюсь выполнить HTMLi, проверяется проверка ввода и выполняется очистка специальных символов. Прилагается код для очистки, есть ли другой способ обойти код и выполнить HTML-инъекцию?

function xss_check_3($data, $encoding="UTF-8")
{
    // htmlspecialchars - convert specialchars to HTML entities
    //  '&'(ampersand) becomes '&'
    // '"'(double quotes) becomes '"' when ENT_NOQUOTES is not set
    // "'"(Single quotes) becomes ''' (or ') only when ENT_QUOTES is 
      set
   // '<'(lessthan) becomes '&lt;'``
   // '>'(greterthan) becomes '&gt;'

  return htmlspecialchars($data, ENT_QUOTES, $encoding);
}

1 Ответ

0 голосов
/ 20 апреля 2019

htmlspecialchars() - правильный способ очистки ввода HTML.Это в основном то, для чего предназначена функция.

Обратите внимание, однако, что могут быть проблемы, если входные данные не в кодировке UTF-8

В документации PHP на htmlspecialchars говорится (выделено мое):

Некоторые символы имеют особое значение в HTML и должны быть представлены объектами HTML, если они хотят сохранить свои значения.Эта функция возвращает строку с этими преобразованиями.Если вам требуется преобразовать все входные подстроки, с которыми связаны именованные сущности, используйте вместо этого htmlentities ().

Если входная строка, переданная этой функции и конечному документу, использует один и тот же набор символов, этой функции достаточно дляподготовить ввод для включения в большинство контекстов HTML-документа. Если, однако, входные данные могут представлять символы, которые не были закодированы в окончательном наборе символов документа, и вы хотите сохранить эти символы (как числовые или именованные объекты), как эта функция, так и htmlentities () (которая кодирует только подстроки, которыеиметь именованные сущностные эквиваленты) может быть недостаточно.Возможно, вам придется использовать mb_encode_numericentity () вместо этого.

( однако этого недостаточно для предотвращения SQL-инъекций )

...