2012-04-19 2 views
2

Я новичок в разработке PHP. И у меня нет коллег для обсуждения PHP. Поэтому я отправлю свой вопрос здесь.Безопасен ли этот скрипт PHP?

мне удалось сделать сценарий входа для моей личности, ведьма смотрит много как сценарий на этом сайте: http://www.phpeasystep.com/phptu/6.html

Мой вопрос. Это безопасный подход? Есть ли хороший учебник по скриптам входа PHP? Что-то не так с подходом к хранению информации в сеансе?

ответ

5

Несколько вопросов по учебнику, которое вы опубликовали.

  1. Кажется, что это действительно старый. stripslashes? session_register? Это все конструкции из предыдущих версий PHP, которые до сих пор считаются плохой практикой.
  2. Несмотря на то, что автор говорит, что это безопасный mysqlinjection, это не так, вы можете также обмануть mysql_real_escape_string. Используйте PDO с prepared statements для базы данных.
  3. Судя по коду, кажется, что все пароли хранятся в незашифрованной базе данных, это неразумно! Проверьте Secure hash and salt for PHP passwords, чтобы узнать, как хэш/хранить пароли безопасным способом.
  4. Читаемый пароль хранится в сеансе, любой, у кого есть доступ к вашему файлу cookie, также сможет прочитать ваш пароль 1 в 1 из файла cookie. ПЛОХО!

Если вы хотите сделать это правильно, прочитайте The definitive guide to form-based website authentication и внесите в него свои предложения.

+0

Я и зашифрую, и солью пароли. Здесь нет никаких проблем. Просто интересно о подходе «выберите из db -> store in session». Новый для PHP, и не нужно оставлять дверь открытой :) – hogni89

2

это не безопасно на всех:

  • вы храните пароль в незашифрованном виде в базе данных. хранить только хеш (sha256 или лучше: sha512) в базе данных (с солью), а затем запрашивать имя пользователя и хэш POST-пароля
  • вы храните пароль, незашифрованный в файле cookie. вы не должны этого делать. вы должны сохранить идентификатор сеанса в базе данных, с помощью которого вы можете проверять статус сеанса каждый раз, когда загружается страница.
  • Я не знаю, используете ли вы его, но попробуйте SSL-шифрование (https) для зашифрованной передачи учетных данных пользователя.
+2

sha1 не считаются безопасным, предпочитает sha256 или sha512 –

+0

yep. только что отредактировал :-) – Stefan

0

От взгляда на этот скрипт я бы сказал, что пока вы реализуете функцию сбрасывания полосы и используете алгоритм хэширования (SHA256) для хранения паролей, тогда вы идете длинными правильными строками. Вы можете расширить это, добавив соль в хэш, это защитит вас, если кто-то когда-либо нападет на вашу базу данных и сделал SELECT * FROM Password WHERE Password = 'HASH'; который вернет все имена пользователей и позволит злоумышленнику попытаться войти в систему с этими учетными данными. SQL Injections и XSS являются распространенными типами атак на веб-сайтах, которые могут выполняться через систему входа в систему. Я бы рекомендовал прочитать их.

Дополнительные ресурсы:

http://www.webstockbox.com/php/7-tutorials-on-how-to-create-a-php-login-system/

http://en.wikipedia.org/wiki/Cross-site_scripting

http://en.wikipedia.org/wiki/SQL_injection

0

Нет, это гораздо безопаснее, не хранить пароли, как есть. Вам лучше хэш-пароль (т. Е. С md5()) и хранить хэш в БД. Чтобы сделать логин, вы берете пароль, отправленный из формы, хеш его и сравниваете с хешем, хранящимся в БД.

+2

Я бы предложил использовать что-то более безопасное, чем md5. То есть SHA256 –

2

Определенно небезопасно, он хранит пароль как текст без хеширования. Проверьте хеширование паролей (по крайней мере, sha256, никогда md5 или sha1) и соление Хеширование будет кодировать пароль, чтобы никто не смог получить пароль в случае успешной атаки db. Salting добавит некоторую безопасность, вы просто добавите строку для каждого пароля и хеш-файл. У вас может быть обычная соль для каждого пользователя и соли сервера с некоторыми специальными символами, которые не находятся на клавиатуре. Это сделает пароль довольно безопасным. Использование PDO и параметров для SQL-запросов сделает его более безопасным от атак SQL Injection.
Что касается сохранения в сеансе - ОК, но никогда не храните пароль, пароль вставлен, хеширован и никогда не используется снова, по крайней мере, до другого входа.

0

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

+0

если у вас есть вопрос, вы должны запустить новый –

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