2010-10-26 3 views

ответ

4

Я бы сказал, что лучше хранить точные данные в базе данных и правильно избежать его, когда вам нужно, чтобы отобразить его. Это значительно упростит работу, если позже вы захотите отобразить ее на другом носителе, где опасные символы и экранирование могут отличаться.

Есть еще несколько проблем с использованием пользовательских функций «очистки» вместо использования функций экранирования, предоставляемых стандартной библиотекой для вашего языка.

Ненужные Ограничения - Если, например, вы всегда удалить <script> теги люди не будут в состоянии говорить о <script> тегов на вашем сайте, как я только сейчас. Это может быть хорошо для некоторых сайтов, но не для других.

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

Особые случаи - Если вы решили очистить все введенные данные, например, путем удаления '<' и '>' во всех строках перед хранением их, вы, вероятно, узнать, рано или поздно, что по крайней мере одна специфическая область не могут быть очищены, потому что эти персонажи абсолютно необходимы в этом поле, поэтому вам придется избегать этого. Теперь вы создали ситуацию, когда вам нужно помнить, следует ли вам применять экранирование к вашим данным. Это увеличивает вероятность ошибочной ошибки и затрудняет обзор с вашего кода, забыл ли вы уйти или же не нужно, чтобы одно из полей, где не было необходимости.

Смежные вопросы