Может ли такой вид обезопасить сайт от иньекций?
За код первых запросов хакеры вам скажут спасибо, им софт уже найдет уязвимость.
Последний запрос такой же уязвимый, т.к. вы напрямую берете данные из массива.
Ошибки:
- Вы не проверяете значение, которое содержится в POST/SESSION (тип данных, пустая строка)
- Вы не проверяете регуляркой эти данные
- Вы не используете параметрические запросы
Для наглядности простой пример:
function registration($link,$login,$password,$email) {
$newlogin = preg_replace('%[^A-Za-zА-Яа-я0-9]%', '', $login);
$newpassword = preg_replace('%[^A-Za-zА-Яа-я0-9]%', '', $password);
if($newlogin !=$login || $newpassword != $password)
return false;
$pass = md5($newpassword);
check_input_data($link,$login,$email); //Кидает ошибку, если логин уже есть в базе
$stmt = mysqli_prepare($link, "INSERT INTO users (login,password) VALUES (?, ?)");
mysqli_stmt_bind_param($stmt, 'ss', $newlogin, $pass);
mysqli_stmt_execute($stmt);
if(mysqli_stmt_affected_rows($stmt)==1) {
$user_id = get_user_id($link,$newlogin);
//Что-то делаем
} else {
return false;
}
mysqli_stmt_close($stmt);
return true;
}