Как лучше написать регистрацию на PHP?

207
22 июня 2018, 23:30

Написал код регистрации. Но я не уверен, что он правильный, хотя он и работает. Что мне стоит учесть при последующем использовании этого кода?

<?php 
$name = $_POST['name'];
$surname = $_POST['surname'];
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$res = mysqli_query($link, "SELECT username FROM user WHERE username = '$username'");
$res1 = mysqli_query($link, "SELECT email FROM user WHERE email = '$email'");
$count = mysqli_num_rows($res);
$count1 = mysqli_num_rows($res1);
if( $count > 0) {
  $badlog = "К сожалению этот логин уже используется, попробуйте другой.";
  require '/templates/reg.php';
} elseif ($count1 > 0) {
  $badmail = 'К сожалению этот E-mail уже используется, попробуйте другой.';
  require '/templates/reg.php';
} else {
    mysqli_query($link, "INSERT INTO `user`(`id`, `surname`, `name`, `email`, `username`, `password`) 
        VALUES ('','$surname','$name', '$email','$username',md5('$password'))");
    echo "Регистрация прошла успешно, теперь вы можете авторизоваться";
}
 ?>
Answer 1

Самая главная ошибка в вашем коде, это то, что вы совершенно не позаботились о безопасности. При работе с пользовательским вводом и базой данных, первая мысль которая должна прийти вам в голову - это защита от SQL и XSS атак.

Что касается защиты от SQL тут всё просто: любые запросы к БД где существует пользовательский ввод мы осуществляем ТОЛЬКО через подготовленные выражения. Поэтому, обязательно ознакомьтесь с PDO. Вот еще отличное описание работы с PDO.

Что касается XSS атак - из вашего фрагмента кода непонятно, как будут использоваться далее отправленные методом POST данные. Но я бы, как минимум позаботился о том, чтобы ограничить в этих данных использование html тегов, функциями htmlspecialchars или strip_tags.

Ну и валидность email'a не мешало бы проверить с помощью filter_var

READ ALSO
Скачать файл с помощью QNetworkAccessManager

Скачать файл с помощью QNetworkAccessManager

Почему не скачивает по ftp ссылкам?

230
float перенос по экрану

float перенос по экрану

мне надо сделать функцию чтоб перенести с одного места на другое но появляется ошибкаE0304

254
Как сохранить в бинарный файл большую структуру, а после прочитать?

Как сохранить в бинарный файл большую структуру, а после прочитать?

Структуры в моем коде вложены друг в друга, те

226
Явные специализации шаблона в cpp файле

Явные специализации шаблона в cpp файле

Как написать явные специализации для разных типов в другом cpp файлеНа мой взгляд все писать в хедере не очень удобно и понятно

240