首頁 後端開發 php教程 php中關於過濾和驗證以及轉義與密碼的實作教程

php中關於過濾和驗證以及轉義與密碼的實作教程

Jul 24, 2017 pm 02:40 PM
php 轉義

我們在開發應用程式時,一般有個約定:不要信任任何來自不受自己控制的資料來源中的資料。所以這個時候就用到了這篇文章介紹的內容,本文主要給大家介紹了關於PHP實踐教程之過濾、驗證、轉義與密碼的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。

本文主要跟大家介紹的是關於PHP實踐之過濾、驗證、轉義與密碼等相關的內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:

一、過濾、驗證和轉義

#1).不要相信任何來自不受自己直接控制的資料來源中的數據。包含但不限於:

  • $_GET

  • #$_POST

  • ##$_REQUEST

  • #$_COOKIE

  • $argv

  • php://stdin

  • php://input

  • file_get_contents()

  • #遠端資料庫

  • 遠端API

  • 來自客戶端的資料

#2)。解決方法:過濾輸入。刪除不安全的字符,在資料到達應用的儲存層之前,必須過濾資料。需要過濾的資料包括不限於:HTML、SQL查詢和使用者資料資訊。

  • HTML:使用

    htmlentities()函數過濾HTML成對應的實體。這個函數會轉義制定字符的HTML字符,以便在儲存層安全的渲染。正確的使用方式是使用htmlentities($input, ENT_QUOTES, 'UTF-8')過濾輸入。或使用HTML Purifier。缺點是慢

  • SQL查詢: 有時必須根據資料建構SQL查詢。這時要使用PDO預處理語句過濾外部資料。

  • 使用者資料資訊:使用

    filter_var()filter_input()過濾使用者資料資訊

3).驗證資料:也可以使用

filter_var() ,驗證成功傳回要驗證的值,失敗回傳false。但是這個函數無法驗證所有數據,所以可以使用一些驗證功能元件。例如aura/filter或symfony/validator

4)轉義輸出:任然可以使用htmlentities這個函數,有些模板引擎也自帶了轉義功能。

密碼

       1).絕對無法知道使用者的密碼。


       2).絕對不要約束使用者的密碼,要限制的話語只限制最小長度。


       3).絕對無法使用電子郵件傳送使用者的密碼。你可以發送一個修改密碼的鏈接,上面帶一個token驗證是用戶本人就行了。


       4).使用bcrypt計算使用者密碼的雜湊值。加密和哈希不是一回事,加密是雙向演算法,加密的資料可以被解密。但是哈希是單項演算法,哈希之後的資料無法被還原,想同的資料哈希之後得到的資料總是相同的。使用資料庫儲存通過bcrypt雜湊密碼之後的值。


       5).使用密碼雜湊API簡化計算密碼雜湊和驗證密碼的操作。以下的註冊用戶的一般操作


POST /register.php HTTP/1.1
Content-Length: 43
Content-type: application/x-www-form-urlencoded

email=xiao@hello.world&password=nihao
登入後複製

下面是接受這個請求的PHP檔案


<?php
try {
 $email = filter_input(INPUT_POST, &#39;email&#39;, FILTER_VALIDATE_EMAIL);
 if (!$email) {
  throw new Exception(&#39;Invalid email&#39;);
 }
 $password = filter_iput(INPUT_POST, &#39;password&#39;);
 if (!$password || mb_strlen($password) < 8) {
  throw new Exception(&#39;Password must contain 8+ characters&#39;);
 }
 //创建密码的哈希值
 $passwordHash = password_hash(
  $password,
  PASSWORD_DEFAULT,
  [&#39;cost&#39; => 12]
  );

 if ($passwordHash === false) {
  throw new Exception(&#39;Password hash failed&#39;);
 }

 //创建用户账户,这里是虚构的代码
 $user = new User();
 $user->email = $email;
 $user->password_hash = $passwordHash;
 $user->save();
 header(&#39;HTTP/1.1 302 Redirect&#39;);
 header(&#39;Location: /login.php&#39;);
} catch (Exception $e) {
 header(&#39;HTTP1.1 400 Bad Request&#39;);
 echo $e->getMessage();
}
登入後複製

       6).根據機器的具體運算能力修改

password_hash()的第三個值。計算哈希值一般需要0.1s-0.5s。

       7).密碼的雜湊值儲存在

varchar(255)類型的資料庫欄位中。

       8).登入使用者的一般流程


POST /login.php HTTP1.1
Content-length: 43
Content-Type: application/x-www-form-urlencoded

email=xiao@hello.wordl&pasword=nihao
登入後複製


session_start();
try {
 $email = filter_input(INPUT_POST, &#39;email&#39;);
 $password = filter_iinput(INPUT_POST, &#39;password&#39;);

 $user = User::findByEmail($email);

 if (password_verify($password, $user->password_hash) === false) {
  throw new Exception(&#39;&#39;Invalid password);
 }

 //如果需要的话,重新计算密码的哈希值
 $currentHasAlgorithm = PASSWORD_DEFAULT;
 $currentHashOptions = array(&#39;cost&#39; => 15);
 $passwordNeedsRehash = password_needs_rehash(
  $user->password_hash,
  $currentHasAlgorithm,
  $currentHasOptions
 );
 if ($passwordNeedsRehash === true) {
  $user->password_hash = password_hash(
   $password,
   $currentHasAlgorithm,
   $currentHasOptions
  );

  $user->save();
 }

 $_SESSION[&#39;user_logged_in&#39;] = &#39;yes&#39;;
 $_SESSION[&#39;user_email&#39;] = $email;

 header(&#39;HTTP/1.1 302 Redirect&#39;);
 header(&#39;Location: /user-profile.php&#39;);
} catch (Exception) {
 header(&#39;HTTP/1.1 401 Unauthorized&#39;);
 echo $e->getMessage();
}
登入後複製

      9).PHP5.5.0版本版本之前的密碼雜湊API無法使用,建議使用ircmaxell/password-compat組件。

總結#

以上是php中關於過濾和驗證以及轉義與密碼的實作教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles