Достаточно ли регулярного выражения для фильтрации, зависит от регулярного выражения. Если вы собираетесь использовать значение в операторах SQL, регулярное выражение должно каким-то образом запрещать '
и "
. Если вы хотите использовать значение в выводе HTML и боитесь XSS, вам нужно убедиться, что ваше регулярное выражение не допускает <
, >
и "
.
Тем не менее, как уже неоднократно говорилось, вы не хотите полагаться на регулярные выражения, и, пожалуйста, из-за любви к $ божеству, не делайте этого! Используйте mysql_real_escape_string () или подготовленные операторы для ваших операторов SQL и htmlspecialchars () для ваших значений при печатается в контексте HTML.
Выберите функцию очистки в соответствии с ее контекстом. Как правило, он лучше вас знает, что и что не опасно.
Изменить, чтобы разместить для вашего редактирования:
База данных
Подготовленные операторы == mysql_real_escape_string () для каждого значения, которое нужно вставить. По сути, это одно и то же, если не считать повышения производительности в варианте подготовленных операторов и неспособности случайно забыть использовать функцию на одном из значений. Подготовленный оператор - это то, что защищает вас от внедрения SQL, а не регулярное выражение. Ваше регулярное выражение может быть чем угодно, и оно не будет иметь никакого значения для подготовленного утверждения.
Вы не можете и не должны пытаться использовать регулярные выражения для размещения в архитектуре «кросс-базы данных». Опять же, обычно система лучше знает, что для нее и не опасно, чем вы. Подготовленные заявления хороши, и если они совместимы с изменениями, вы можете спать спокойно. Без регулярных выражений.
Если это не так, и вы должны использовать слой абстракции для своей базы данных, что-то вроде пользовательского $ db-> escape () , который в вашей архитектуре MySQL соответствует mysql_real_escape_string () и в вашей архитектуре PostgreSQL отображается соответствующий метод для PostgreSQL (я не знаю, какой это было бы не по назначению, извините, я не работал с PostgreSQL).
HTML
HTML Purifier - это хороший способ дезинфицировать ваш вывод HTML (при условии, что вы используете его в режиме белого списка, который входит в комплект поставки), но вы должны использовать его только в тех случаях, когда вам абсолютно необходимо сохранить HTML, так как вызов Очистить () довольно дорого, так как он анализирует все это и манипулирует им способами, стремящимися к тщательности и с помощью мощного набора правил. Итак, если вам не нужен HTML для сохранения, вы можете использовать htmlspecialchars () . Но с другой стороны, в этот момент ваши регулярные выражения не будут иметь ничего общего с вашим побегом и могут быть чем угодно.
Sidenote безопасности
На самом деле, моя миссия - пропустить
входное значение, только если оно совпадает с моим
регулярное выражение-белый список; еще верни
назад к пользователю.
Это может быть неверно для вашего сценария, но просто как общая информация: философия «возврата неверного ввода пользователю» рискует открыть вас для отраженных атак XSS . Пользователь не всегда является злоумышленником, поэтому, когда вы возвращаете что-то пользователю, обязательно избегайте его. Просто что-то иметь в виду.