Вопросы безопасности PHP - инъекция SQL, фильтрация и безопасность сеансов - PullRequest
2 голосов
/ 16 февраля 2011
  • Об SQL-инъекции: безопасен ли я, используя filter_var и фильтр FILTER_SANITIZE_STRING?
  • Как сделать сеансы более безопасными?Я чувствую, что недостаточно выполнять вход в систему с сеансами и использовать переменную сеанса для проверки входа в систему.

Ответы [ 7 ]

4 голосов
/ 16 февраля 2011

Фильтрация и экранирование входных данных, а затем непосредственное построение операторов SQL из них - сломанное решение решенной проблемы. mysql_escape_string() сделал людей, которые думали, что они в безопасности, избегая сожаления об этом; кто скажет, что mysql_real_escape_string() не будет иметь свои проблемы?

Всегда использовать параметризованные запросы.

3 голосов
/ 16 февраля 2011
  • SQL-инъекции.Вы не хотите использовать filter_var.Используйте подготовленные операторы SQL, такие как MySQLi или PDO .Если у вас нет расширений / драйверов для установленных, используйте mysql_real_escape_string, но этот подход более подвержен ошибкам, так как вам нужно применять его везде.
  • Сеансыбезопасны, пока они получены надежно и хранятся в безопасности.Вы можете обеспечить их безопасное получение, предоставив пользователям надежные пароли и / или двухфакторную аутентификацию.Вы можете защитить сеансы с помощью HTTPS, который подавляет атаки MITM.
1 голос
/ 16 февраля 2011

filter_var

Не совсем.Вы можете использовать FILTER_SANITIZE_MAGIC_QUOTES, но я настоятельно рекомендую PDO с подготовленными утверждениями .Это гарантирует, что у вас не будет SQL-инъекций, потому что ваш запрос и данные разделены.

Безопасность сеанса

Ну, вы должны как-то идентифицировать своих пользователей.Если ваш файл cookie сеанса создается сессией PHP, он будет случайным, и любые данные, которые вы храните в $ _SESSION, будут храниться на стороне сервера.Уязвимость в безопасности - перехват сеанса (он же FireSheep).Пока ваш сеансовый cookie-файл передается в открытом виде, злоумышленник может украсть его и выдать себя за пользователя.

Чтобы сделать ваши сеансы более безопасными, используйте SSL, сделайте ваши сеансовые cookie только HTTP и SSL.

0 голосов
/ 16 февраля 2011
  1. Какую библиотеку базы данных вы используете?Если обычный MySQL или MySQLi, используйте mysql_real_escape_string () или mysqli_real_escape_string ().Если PDO или лайки, используйте подготовленные заявления, и вам не придется беспокоиться о побеге.

  2. Что по поводу сессий, по вашему мнению, небезопасно?Данные сеанса хранятся на сервере.Пока сервер настроен правильно и защищен сам по себе, все будет в порядке.Тем не менее, есть вероятность того, что кто-то сможет получить печенье другого человека (однако, не ваши действия) и взломать его сеанс.Вы могли бы помочь , (хотя нет надежного способа) защитить его, отслеживая использование агента, но вы не можете сделать намного больше.

0 голосов
/ 16 февраля 2011

Для внедрения SQL-кода используйте mysql_real_escape_string (), оно позаботится о экранировании любых символов, которые могут быть использованы при атаке SQL-инъекцией.

Чтобы сделать сеансы более безопасными, вы могли бы зашифровать информацию о сеансе, но нам, вероятно, нужно было бы узнать больше о том, как вы в настоящее время используете сеансы, чтобы ответить хорошо.

0 голосов
/ 16 февраля 2011

Я бы порекомендовал вам поискать php-фреймворк. Php-фреймворк поможет вам создать безопасное веб-приложение и оптимизировать его.

Я использую Zend Framework, и он заботится об этом

0 голосов
/ 16 февраля 2011

RE: SQL-инъекция - вы должны использовать mysql_real_escape_string().

...