Использование триггера MySQL для замены ввода - PullRequest
1 голос
/ 24 февраля 2011

Можно ли создать триггер, который после вставки или обновления строки может использовать функцию REPLACE для замены символов их экранированными эквивалентами (в частности, для обеспечения безопасности ввода html) для всех столбцов таблицы без необходимости знатьвсе имена полей (чтобы эту функцию можно было применять к нескольким таблицам).Я согласен на 115%, что такого рода вещи всегда должны выполняться на уровне приложений, но из-за уникальных обстоятельств я хотел бы добавить это в качестве отказоустойчивого на уровне базы данных.

Я очень новичок в триггерах, поэтому успокойтесь, но я хочу сделать что-то с эффектом:

create trigger if not exists makeHTMLsafe after insert on tablename
begin
  loop over all columns in tablename   
    new.value = REPLACE(old.value,"<","&lt;")
end

1 Ответ

0 голосов
/ 12 октября 2011

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

Вместо того, чтобы делать вещи более безопасными, вы сделаете их гораздо менее безопасными.
Используйте специализированные экранирующие функции html в вашем интерфейсе.

При использовании php htmlentities - ваш лучший выбор:

http://php.net/manual/en/function.htmlentities.php
См. Также: Каковы оптимальные методы предотвращения атак xss на сайте PHP

...