Задать вопрос
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 "Каптча ведена неверно";
        }
    }
}
  • Вопрос задан
  • 337 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 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 (последний сейчас обновляется)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽