2015-07-17 4 views
2

Я использую Rich Text Editor для принятия входных данных, содержащих HTML-контент с клиентской стороны.Как очистить строку без потери HTML и удаления JS/SQL

На стороне сервера я использую сервер на базе PHP и дезактивирую входящие данные.

Есть встроенная функция PHP, которая сохраняет код HTML и удаляет наличие Javascript для кодов инъекций XSS + SQL.

ответ

3

Насколько я знаю, такой встроенной функциональности нет.

Фильтры санитазы от http://php.net/manual/en/filter.filters.sanitize.php не предназначены для покрытия вашего запроса. Вы можете посмотреть http://php.net/manual/en/book.filter.php, но фильтр не установлен для фильтрации HTML.

Я знаю, что вы не просите внешнюю библиотеку, но это один я думаю, что может помочь вам с проблемой вы столкнулись: http://htmlpurifier.org/

+0

echo filter_var ($ dirtyText, FILTER_SANITIZE_STRING); Это хорошо работает для меня – shivgre

1

Что касается SQL-инъекций Вы должны использовать PDO with prepared statements. Таким образом, строка, которую вы отправляете в базу данных, точно такая же, как и вы, и вам не нужно играть с ней и избегать вещей.

Что касается XSS - вы должны взглянуть на XSS Filter Evasion Cheat Sheet на owasp. Есть несколько вещей, которые вы можете сделать здесь: вы можете разрешить только известные теги (и разделять все остальное, используя функцию php strip_tags). Обратите внимание, что он не будет препятствовать атрибутам XSS внутри элемента (проверьте ссылку на чит-лист).
Вы можете использовать парсер DOMDocument, чтобы пройти через все элементы и проверить их атрибуты и сохранить/удалить все, что захотите. Check this для получения дополнительной информации.

Если вы используете какую-то известную структуру, у большинства из них есть встроенный xss-фильтр, поэтому вы можете воспользоваться им (или take a look на код и узнать из него).

2

Используйте подготовленные операторы и параметризованные запросы для предотвращения SQL injections.

Если вы хотите разрешить сохранение только определенных тегов в своей базе данных, вы можете использовать strip_tags(). Это дает возможность разрешить определенные HTML-теги. Однако комментарии и теги PHP всегда будут удалены.

$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>'; 
// Allow <p> and <a> 
echo strip_tags($text, '<p><a>');