使用filter_var()過濾表單,實現laravel登入介面

K_G發表於2021-02-21

不要相信任何來自不受自己直接控制的資料來源的資料———福克斯·馬爾德

我們在使用

$_GET
$_POST
$_REQUEST
$_COOKIE
$argv //獲取傳遞引數的數量 和 argv 獲取傳遞引數的值
php://stdin // 標準輸入(standard input),只讀,用於從控制檯輸入內容;
php://input // 可以訪問請求的原始資料的只讀流,既可以讀取到POST上沒有經過解析的原始資料
file_get_contents();
···

所有這些外部資料來源都可能是攻擊媒介,可能會將惡意資料注入PHP指令碼,雖然編寫接收使用者輸入資料的指令碼很簡單,但首先我們要在實現業務的前提下也要保證資料的一致性和安全性

大家都知道現在為止已經有很多過濾方法,如正規表示式、htmllentities()、htmlspecialchars()、sprintf() 等等。但是這些方法不是效率慢就是有漏洞,2021了 不推薦大家使用

我們可以通過filter_var()、和filter_input()來獲取

如驗證郵箱可以使用

$email   = "admin@admin.com";
$isEmail = filter_var($email,FILTER_VALIDTE_EMAIL);
if($isEmail !== false){
    echo 'success';
}else{
    echo 'error';
}

註冊使用者可以使用

<?php
try{
     // 驗證郵箱
     $email = filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL);
     if(!$email){
        throw new Exception('Invalid email');
     }
     // 驗證密碼
     $password = filter_input(INPUT_POST,'password');
     if(!$password || mb_strlen($password) < 8 ){
        throw new Exceptio('必須輸入8位以上的密碼');
     }
     // 建立密碼的雜湊值
     $passwordHash = password_hash(
        $password,
        PASSWORD_DEFAULT,
        ['cost' => 12]
     );
    if($passwordHash === false){
        throw new Exception('Password hash failed');
    }
    // 建立賬戶
    $user = new User();
    $user->email = $email;
    $user->password_hash = $passwordHash;
    $user->save();
    // 註冊成功,重定向到登入頁面
    header('HTTP/1.1 302 Redirect');
    header('Location:/login.php');
}catch(Exception $e){
    echo $e->getMessage();
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章