簡體   English   中英

此處需要使用php的一點幫助

[英]Little bit of help needed here with php

我正在建立一個基於mysql的注冊頁面,並希望確認密碼與之匹配,我的問題是,即使我的if / else語句正確,形式仍在處理中,我仍可以在mysql db中看到數據。

碼:

<?php
require('connect.php');
// If the values are posted, insert them into the database.
if (isset($_POST['username']) && isset($_POST['password'])){
    $username = $_POST['username'];
      $email = $_POST['email'];
    $password = $_POST['password'];
    $confpassword = $_POST['confirm_password'];
    if ($_POST["password"] === $_POST["confirm_password"]) {
    $hashPassword = password_hash($password,PASSWORD_BCRYPT);
    }
    else {
      echo 'Password Match Failed', end;// failed :(
    }
    $query = "INSERT INTO `user` (username, password, email) VALUES ('$username', '$password', '$email')";
    $result = mysqli_query($connection, $query);
    if($result){
        $smsg = "User Created Successfully.";
    }else{
        $fmsg ="User Registration Failed";
    }
}
?>

您可能想查看一個框架來幫助您提供諸如登錄之類的常見任務。 它不僅使您的工作變得簡單,而且使用成熟的解決方案還具有增加安全性的好處。

就目前而言,您的代碼有一些問題。

$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
...
$query = "INSERT INTO `user` (username, password, email) VALUES ('$username', '$password', '$email')";
$result = mysqli_query($connection, $query);

此代碼容易受到SQL注入的攻擊,這意味着攻擊者可以刪除您的數據庫或修改其用戶帳戶以獲取管理員訪問權限。

您可以使用bcrypt對密碼進行哈希處理,這是一個不錯的選擇,但是您對哈希處理不做任何事情。 而是將普通密碼存儲在數據庫中,從而使其不安全。

$password = $_POST['password'];
$confpassword = $_POST['confirm_password'];
if ($_POST["password"] === $_POST["confirm_password"]) {
    echo 'Password Matched';
}

由於這兩個值都是通過POST提交的,因此攻擊者可以通過在請求中傳遞這兩個值來輕松繞過身份驗證。

由於代碼將在滿足if或else條件時都繼續執行,因此還保存了插入數據的部分。 這就是為什么每次調用腳本都會插入一個用戶的原因(或者由於重復的唯一字段而導致數據庫錯誤)。

在這個領域很難為您的問題提供完整的解決方案。 但我首先將注冊過程(創建用戶)和登錄(檢查用戶是否存在以及他們的密碼是否匹配)分開。 只需查看我的個人資料,您就可以輕松獲得一些我的社交帳戶。 請隨時與我聯系,我將嘗試安排閑聊或環聊會議,以便為您提供更多幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM