Я просто хочу подтвердить, если мой 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');
}



?>

0 ответов

Другие вопросы по тегам