Я просто хочу подтвердить, если мой php код ниже безопасен
Приведенный ниже php-код называется "action.php", который используется для работы функций входа и регистрации. Теперь я все еще сомневаюсь, может ли мой код ниже защитить мою базу данных от внедрения SQL.
Мой главный вопрос: мой текущий php-код безопасен сейчас? это защищает мою базу данных от внедрения SQL?
Вот мой код:
<?php
session_start();
$username = $emailaddress = $password = $cpassword = "";
$error = array();
//Connect to database
$conn = mysqli_connect('localhost', /*Server username*/, /*Server Password*/, 'database_sample');
$stmt = $conn->prepare("INSERT INTO ruser (username, emailaddress, hashedpassword) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $username, $emailaddress, $hashed_password);
//Registration
if(isset($_POST['register'])){
function input($data){
$data = trim($data);
$data = stripcslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$username = input($_POST['username']);
$emailaddress = input($_POST['emailaddress']);
$password = input($_POST['password']);
$cpassword = input($_POST['cpassword']);
$stmt->execute();
if(empty($username)){
array_push($error, "*Username cannot be blank<br>");
}else if(!preg_match("/^[a-zA-Z0-9_]*$/",$username)){
array_push($error, "*Username can only contain alphanumeric characters or an underscore<br>");
}
if(empty($emailaddress)){
array_push($error, "*Email address cannot be blank<br>");
}else if(!filter_var($emailaddress, FILTER_VALIDATE_EMAIL)){
array_push($error, "*Invalid email address<br>");
}
if(empty($password)){
array_push($error, "*Password cannot be blank<br>");
}
if(empty($cpassword)){
array_push($error, "*Password must be confirmed");
}
if($password != $cpassword){
array_push($error, "*Passwords do not match");
}
if(count($error) == 0){
//Insert new record into database
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
$sql = "INSERT INTO ruser (username, emailaddress, hashedpassword) VALUES ('$username', '$emailaddress', '$hashed_password')";
mysqli_query($conn, $sql);
$_SESSION['username'] = $username;
header('location: index.php');
}
}
//Login
if(isset($_POST['login'])){
function input($data){
$data = trim($data);
$data = stripcslashes($data);
$data = htmlspecialchars($data);
return $data;
}
$nameoremail = input($_POST['nameoremail']);
$password2 = input($_POST['password2']);
//If there is any error
if(empty($nameoremail)){
array_push($error, "*Please enter username or email address<br>");
}
if(empty($password2)){
array_push($error, "*Please enter password<br>");
}
if(count($error) == 0){
$sql2 = "SELECT * FROM ruser WHERE username = '$nameoremail' OR emailaddress='$nameoremail'";
$result = mysqli_query($conn, $sql2);
if(mysqli_num_rows($result) == 1){
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
if(password_verify($password2, $row['hashedpassword'])){
$_SESSION['nameoremail'] = $row['username'];
header('location: index.php');
}else{
echo "*Invalid username or password";
}
}else{
echo "*Invalid username or password";
}
}
}
//Log out
if(isset($_GET['logout'])){
session_destroy();
unset($_POST['username']);
unset($_POST['nameoremail']);
header('location: index.php');
}
?>