Регистрация Безопасность PHP - PullRequest
0 голосов
/ 01 августа 2011

Итак, я пытался сделать безопасные сценарии входа / регистрации PHP и пока без какого-либо шифрования пароля у меня есть это:

<code>if($_POST)
{

function GenericError()
{
echo '<script type="text/javascript">window.location.href="error.php"</script>';
}

function CheckEmpty($param)
{
if($param == "" || $param == null)
    echo '<script type="text/javascript">window.location.href="empty.php"    </script>';
}

function AllYourBase()
{
mysql_connect("MyHost", "MyUsername", "MyPassword") or die(mysql_error());
mysql_select_db("MyDatabase") or die(mysql_error());
}

$username = CheckEmpty($_POST['username']);
$first = CheckEmpty($_POST['fname']);
$last = CheckEmpty($_POST['lname']);

if($_POST['password'] == $_POST['vpass'])
$password = $_POST['password'];
else
echo '<script type="text/javascript">window.location.href="pass.php"</script>';

if($_POST['email'] == $_POST['vemail'])
$email = $_POST['email'];
else
echo '<script type="text/javascript">window.location.href="email.php"</script>';

AllYourBase();
mysql_query("INSERT INTO Users (username, password, firstname, lastname, email) VALUES ('%s', '%s', '%s', '%s, '%s')",
        mysql_real_escape_string($username),
        mysql_real_escape_string($password),
        mysql_real_escape_string($first),
        mysql_real_escape_string($last),
        mysql_real_escape_string($email)) or die(GenericError());

echo '<script type="text/javascript">window.location.href="win.php"</script>';

}

Это кажется правильнымвы парни?Могу ли я сделать что-то еще, кроме шифрования пароля, чтобы сделать его более безопасным?Кроме того, есть ли лучший способ обработки ошибок, чем создание всех этих отдельных страниц?

Ответы [ 2 ]

1 голос
/ 02 августа 2011

Я не думаю, что это выглядит правильно, потому что я не думаю, что вы должны хранить пароли в вашей базе данных . Особенно, когда вы задаете такие вопросы в Stackoverflow (я даже не рекомендую хранить пароли в своей базе данных, хотя я провел много исследований по этой теме, но все же не считаю себя экспертом по безопасности). Я всегда рекомендую людям использовать OpenID (или Facebook Connect) вместо этого. Это очень просто реализовать, безопасно. Большинство пользователей уже имеют OpenID, например, Google openID или Yahoo! OpenId. У моего хостинг-провайдера (простая) у меня есть демо-версия по адресу http://westerveld.name/php-openid/. Когда вы внедряете OpenID, вам вообще не нужно беспокоиться об аутентификации. У меня есть этот код доступен на GitHub. Вы можете просто клонировать код и начать работу => https://github.com/alfredwesterveld/php-openid

Но если вы действительно хотите хранить пароли самостоятельно, я бы посоветовал вам взглянуть на phpass . Он поддерживает наиболее безопасный метод хеширования bcrypt на основе Blowfish в стиле OpenBSD, что является доказательством закона Мура . Я сделал простую библиотеку phpass, также доступную на github, хотя я не советую вам использовать это => https://github.com/alfredwesterveld/php-auth

Также я бы посоветовал вам заглянуть в PDO , чтобы сделать безопасный / быстрый межбазы данных SQL.

0 голосов
/ 01 августа 2011
  1. Не используйте экранирование в своих запросах. Используйте привязку переменной с PDO или аналогичным (вы также получите хорошую поддержку транзакций, абстракцию БД и т. Д. Это действительно лучший способ)
  2. Действительно небезопасно хранить пароли, есть много вещей, которые нужно знать. См. соответствующий пост
...