2010-12-05 1 views
0

Я экспериментирую с созданием системы комментариев. Я использую класс php-OEmbed и HTML Purifier. Какой фильтр я могу использовать для обеспечения безопасного добавления комментариев в мою базу данных? Я знаю, что вы можете использовать фильтры PHP, такие как FILTER_SANITIZE_STRING, но не превратят ли они HTML в сущности?Обеспечение безопасности комментариев

Также, если вы используете что-то вроде WMD editor, вам нужно также использовать что-то на стороне клиента (например, PHP Markdown), чтобы обеспечить его безопасность?

ответ

2

В принципе, вам нужно санировать вход пользователя всякий раз, когда вы его отправляете.

Когда вы помещаете его в свою базу данных, вам необходимо предотвратить SQL-инъекцию, указав специальные символы SQL (подготовленные операторы сделают это для вас). Когда вы отправляете его в браузер, вам нужно избегать специальных символов HTML (у PHP есть функции для этого), чтобы предотвратить инъекцию скрипта.

Могут быть и другие места, где вам также нужно избегать специальных символов. Например, если вы отправляете комментарии к сценарию Bash на сервере для выполнения какой-либо обработки. В этом случае вам нужно будет указывать или удалять специальные символы, относящиеся к Bash.

Важно не указывать/избегать на неправильной стадии: например, не выходить из объектов HTML, когда вы помещаете их в базу данных, если вы не уверены в том, что делаете. Когда вы вытаскиваете его из базы данных и готовитесь отправить его в браузер или просто избегаете вообще, очень легко случайно избежать чего-либо, если вы отправляете сообщение об ошибке при сбое базы данных (это может привести к уязвимости XSS). Сделайте свое побег в последний момент, и вы, скорее всего, избегаете этих подводных камней.

1

Вам не нужно использовать какой-либо фильтр для инъекции SQL. Предпочтительным решением является использование prepared statements. Например, PDO предоставляет PDOStatement.

+0

Я забыл добавить, я использую redbean, который построен на PDO. – jonnnnnnnnnie 2010-12-05 02:32:01