PHP

оцените мою первую регистрацию и авторизацию

Вот ссылка на код https://pastebin.com/eqifawEi
P.S для админа еще авторизацию не добавил, скоро добавлю защиту от инъекций
Denis Lavshuk
Denis Lavshuk
10
То, за что зацепился взгляд при беглом просмотре твоего кода:

1. Использование для пароля md5 - это откровенное непонимание того, насколько легко подобрать коллизию для этого протухшего много лет назад алгоритма. И даже использование соли (чего у тебя не наблюдается) не спасёт md5 от взлома. Специально для работы с паролями в PHP есть http://php.net/manual/ru/ref.password.php

2. /[^\w]/ в точности равно /\W/ - короче и понятнее.

3. Если ограничение набора символов для логина имеет смысл, то такое же ограничение для пароля приводит только у уменьшению безопасности. Единственное, что ты делаешь ограничением алфавита пароля - это облегчаешь жизнь хакерам. И, разумеется, никаких удалений пробелов из средины пароля: лучший вид пароля в современном мире - фраза, состоящая из нескольких слов.

4. В MySQL существуют типы TIMESTAMP и DATETIME. И в поля этих типов автоматически может заноситься дата / время создания записи. Использовать UNIX_TIMESTAMP по меньшей мере бессмысленно.

5. Для подавляющего большинства типов полей можно задать значения по умолчанию. Зачем вручную вбивать 0.00 в balance, когда база данных может это сделать автоматически? И, кстати, числа не надо заключать в кавычки.

6. Сначала экранируем все значения вручную, потом вбиваем их непосредственно в запрос... Зачем? Для безопасной вставки значений в запрос существует механизм http://php.net/manual/ru/mysqli.quickstart.prepared-statements.php

И, кстати, в PDO это делается намного проще и удобнее, чем в mysqli: http://php.net/manual/ru/pdo.prepare.php
Артем Фокин
Артем Фокин
76 299
Лучший ответ
а че пароли открытые? передача данных не криптуется... зашита от прямогу вклучения где, набери в адресной строке адрес сайта core/connect_bd.php
Кот Чеширский.
Кот Чеширский.
2 479
Кот Чеширский. зачем столько ерести CONNECT_BD.PHP писать, написал там только подключения, например
if(!defined("USER")) {header("Location: /404.php");}
$host='127.0.0.1'; // имя хоста (уточняется у провайдера)
$database='My_BD'; // имя базы данных
$user='root'; // заданное вами имя пользователя, либо определенное провайдером
$pswd=''; // заданный вами пароль
$dbh = mysql_connect($host, $user, $pswd) or die("Не могу соединиться с MySQL.");
mysql_select_db($database) or die("Не могу подключиться к базе.");
mysql_query('SET NAMES "utf8"');

потом когда нужно вызвал
require_once $_SERVER['DOCUMENT_ROOT'].'/ CONNECT_BD.PHP';