Я бы сказал, что лучше хранить точные данные в базе данных и правильно избежать его, когда вам нужно, чтобы отобразить его. Это значительно упростит работу, если позже вы захотите отобразить ее на другом носителе, где опасные символы и экранирование могут отличаться.
Есть еще несколько проблем с использованием пользовательских функций «очистки» вместо использования функций экранирования, предоставляемых стандартной библиотекой для вашего языка.
Ненужные Ограничения - Если, например, вы всегда удалить <script>
теги люди не будут в состоянии говорить о <script>
тегов на вашем сайте, как я только сейчас. Это может быть хорошо для некоторых сайтов, но не для других.
Тонкие ошибки - Если вы пишете собственную функцию «очистки», вы можете пропустить какой-то опасный ввод, который вы не учли. Примером является замена <script>
пустой строкой, но забыли, что пользователь может ввести <scri<script>pt>
, который после замены станет <script>
. Использование встроенных функций экранирования обычно будет работать правильно, поскольку они (надеюсь) были написаны опытными программистами, хорошо протестированы и использованы в тысячах других систем, где важна безопасность.
Особые случаи - Если вы решили очистить все введенные данные, например, путем удаления '<'
и '>'
во всех строках перед хранением их, вы, вероятно, узнать, рано или поздно, что по крайней мере одна специфическая область не могут быть очищены, потому что эти персонажи абсолютно необходимы в этом поле, поэтому вам придется избегать этого. Теперь вы создали ситуацию, когда вам нужно помнить, следует ли вам применять экранирование к вашим данным. Это увеличивает вероятность ошибочной ошибки и затрудняет обзор с вашего кода, забыл ли вы уйти или же не нужно, чтобы одно из полей, где не было необходимости.