Лучшие настройки для очистки HTML - PullRequest
0 голосов
/ 27 февраля 2011

Я хотел бы использовать PHP-инструмент для очистки HTML в текстовом поле, чтобы предотвратить xss, но я хотел бы разрешить следующее:

  1. базовые теги, такие как <b>, <i>, <u>
  2. ссылки
  3. изображения

Я бы хотел заблокировать все CSS и JavaScript.Я только что попробовал очиститель HTML, и он потерпел неудачу в этом случае.Просто посмотрите этот пример .Как я могу позаботиться об этом?

Также я хотел бы, чтобы все слова формы #abcd и @abcd были заменены на пользовательские html (как вы уже догадались, ссылка) .Возможно ли с этим или я должен сделать свою собственную замену?

Ответы [ 3 ]

4 голосов
/ 27 февраля 2011

Установить HTML. Допускается что-то вроде b,i,u,a[href],img[src|alt]

См. здесь .

0 голосов
/ 27 февраля 2011

PHP имеет встроенную функцию, которая, кажется, делает именно то, что вы хотите.

http://php.net/manual/en/function.strip-tags.php

Он даже имеет функцию белого списка, поэтому он может разрешать некоторые теги.

Для частей #abcd и @abcd, я думаю, вам придется использовать preg_replace() для этого. Я использовал подобную функцию, и она очень хорошо справляется с частью @abcd:).

$sClickText = preg_replace("/\@([a-zA-Z0-9_])+/",' <a href="#reply" onClick="reply(\'' . "$0" . '\')">' . "$0" . '</a>',$sInputText);
0 голосов
/ 27 февраля 2011

Регулярные выражения и модификатор e


function checkTag( $tag ) {
  $tag = removeslashes( $tag );

  ...

  return $secureTag;
}

$html = preg_replace( "/<[^>]+>/e", " checkTag( '\$0' )", $input );

...