Don_Donald
@Don_Donald

Безопасна и правильна ли такая регистрация?

В php новичок, учусь на локалке и вот задался таким вопросом правильно ли я делаю, хотелось бы узнать какие ошибки и на сколько безопасна такая регистрация

$my = mysqli_connect("localhost", "root", "") or die("Ошибка");
mysqli_select_db($my, "user");

if (isset($_POST)) {
    $name = htmlspecialchars(mysqli_real_escape_string($my,$_POST['name']));
    $login = htmlspecialchars(mysqli_real_escape_string($my,$_POST['login']));
    $password = htmlspecialchars(mysqli_real_escape_string($my,md5($_POST['password'])));
    $captcha = $_POST['captcha'];
    $query = mysqli_query($my,("SELECT * FROM `use` WHERE login='$login'")) or die("Ошибка");
    $user = mysqli_fetch_assoc($query);

if ($name == "" || $login == "" || $password == "") {
        echo "Заполните пустые поля";
}

else if (!preg_match("/^[a-zA-Z0-9\-\_\[\]\(\)]+$/i", $login)) {
        echo "Недопустимые символы";
}

else {
        if ($_SESSION['captcha'] == $captcha && $user['login'] !== $login) {
            $query = mysqli_query($my,"INSERT INTO `use` (`name`, `login`, `password`) VALUES ('$name', '$login', '$password')") or die("Ошибка");
            echo "Вы успешно зарегистрировались";
        }
        else if ($user['login'] == $login) {
            echo "Такой логин уже зарегистрирован";
        }
        else {
            echo "Каптча ведена неверно";
        }
    }
}
  • Вопрос задан
  • 332 просмотра
Пригласить эксперта
Ответы на вопрос 6
1. Выкиньте из кода все htmlspecialchars, mysqli_real_escape_string и подобное
2. Используйте PDO и плейсхолдеры (наигоднейшее руководство)
3. Не используйте md5, обновитесь до php 5.5 и используйте Password API (или хотя бы sha, если обновиться нет возможности)
4. Проверяйте получаемые данные на недопустимые символы до любых операций с ними (у вас же сейчас первый запрос проходит до проверки)

После этих 4х пунктов код уже будет гораздо лучше и безопаснее.
Ответ написан
edli007
@edli007
full stack, team lead
php.net/manual/ru/pdo.prepare.php вместо
$name = htmlspecialchars(mysqli_real_escape_string($my,$_POST['name']));
$login = htmlspecialchars(mysqli_real_escape_string($my,$_POST['login']));
$password = htmlspecialchars(mysqli_real_escape_string($my,md5($_POST['password'])));
$captcha = $_POST['captcha'];
$query = mysqli_query($my,("SELECT * FROM `use` WHERE login='$login'")) or die("Ошибка");
$user = mysqli_fetch_assoc($query);


и пароль захешируйте
Ответ написан
romy4
@romy4
Exception handler
минимально против sql инъекций выстоит. но безопасность дело очень широкое и далеко не заканчивается на экранировании спецсимволов
Ответ написан
Комментировать
Согласен с Алексей Николаев.
А лучше учится на фрейворке и работать с MVC, если желание есть за неделю разберешься, могу предложить laravel 5
Ответ написан
Комментировать
Don_Donald
@Don_Donald Автор вопроса
Всем спасибо!
Ответ написан
Комментировать
@Anar4you
Советую для таких несложных регистраций использовать YII или CodeIgniter (последний сейчас обновляется)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы