1. 程式人生 > >php安全 過濾、驗證、轉義

php安全 過濾、驗證、轉義

不要相信外部源

  • $_GET
  • $_POST
  • $_REQUEST
  • $_COOKIE
  • $argv
  • php://stdin
  • php://input
  • 遠端資料庫
  • 遠端api
  • 來自客戶端的資料
 1 <?php
 2 $input = '<p><script>alert("You won the Nigerian lottery!");</script></p>';
 3 echo htmlentities($input, ENT_QUOTES, 'UTF-8').PHP_EOL;
 4 // &lt;p&gt;&lt;script&gt;alert(&quot;You won the Nigerian lottery!&quot;);&lt;/script&gt;&lt;/p&gt;
5 6 $email = 'john介樣子@example.com'; 7 $emailSafe = filter_var($email, FILTER_SANITIZE_EMAIL); 8 echo $emailSafe.PHP_EOL; 9 // [email protected] 10 11 $string = "\ni18n說的話\t"; 12 $safeString = filter_var( 13 $string, 14 FILTER_SANITIZE_STRING, 15 FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH
16 ); 17 echo $safeString.PHP_EOL; 18 // i18n&#232;&#175;&#180;&#231;&#154;&#132;&#232;&#175;&#157; 19 20 // 轉義輸出 21 $output = '<p><script>alert("NSA backdoor installed")</script></p>'; 22 echo htmlentities($output, ENT_QUOTES, 'UTF-8').PHP_EOL; 23
// &lt;p&gt;&lt;script&gt;alert(&quot;NSA backdoor installed&quot;)&lt;/script&gt;&lt;/p&gt;
View Code

 模板引擎
  

一些加密函式

md5, sha1, bcrypt, scrypt

* 註冊使用者

POST /register.php HTTP/1.1

Content-Length: 43

Content-Type: application/x-www-form-urlencoded

[email protected]&password=sekritshhh!

<?php
/**
 * Created by PhpStorm.
 * User: Mch
 * Date: 7/17/18
 * Time: 22:47
 */
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 Exception('Password must contain 8+ characters');
    }
    // 建立密碼的hash
    $passwordHash = password_hash($password, PASSWORD_DEFAULT, ['cost'=>12]);
    if ($passwordHash === false) {
        throw new Exception('Password hash failed');
    }
    // 建立使用者賬戶(pseudo code)
    $user = new User();
    $user->email = $email;
    $user->pasword_hash = $passwordHash;
    $user->save();

    // 重定向到登入頁面
    header('HTTP/1.1 302 Redirect');
    header('Location: /login.php');

} catch (Exception $e) {
    // 報告錯誤
    header('HTTP/1.1 400 Bad request');
    echo $e->getMessage();
}
register.php
 1 <?php
 2 /**
 3  * POST /login.php HTTP/1.1
 4  * Content-Length: 43
 5  * Content-Type: application/x-www-form-urlencoded
 6  *
 7  * [email protected]&password=sekritshhh!
 8  */
 9 session_start();
10 
11 try {
12     $email = filter_input(INPUT_POST, 'email');
13     $password = filter_input(INPUT_POST, 'password');
14 
15     // (pseudo code)
16     $user = User::findByEmail($email);
17     // 如果需要, 重新計算密碼的hash值
18     if (password_verify($password, $user->password_hash)===false) {
19         throw new Exception('Invalid password');
20     }
21 
22     // 如果需要, 重新計算密碼的hash值
23     $currentHashAlgorithm = PASSWORD_DEFAULT;
24     $currentHashOptions = ['cost' => 15];
25     $passwordNeedsRehash = password_needs_rehash(
26         $user->password_hash,
27         $currentHashAlgorithm,
28         $currentHashOptions
29     );
30     if ($passwordNeedsRehash === true) {
31         // 儲存新計算得到的密碼hash值 (pseudo code)
32         $user->password_hash = password_hash(
33             $password,
34             $currentHashAlgorithm,
35             $currentHashOptions
36         );
37         $user->save();
38     }
39     $_SESSION['user_logged_in'] = 'yes';
40     $_SESSION['user_email'] = $email;
41 
42     // redirect
43     header('HTTP/1.1 302 Redirect');
44     header('Location: /user-profile.php');
45 
46 } catch (Exception $e) {
47     header('HTTP/1.1 401 Unauthorized');
48     echo $e->getMessage();
49 }
login.php

emoji

相關推薦

php安全 過濾驗證轉義

不要相信外部源 $_GET $_POST $_REQUEST $_COOKIE $argv php://stdin php://input 遠端資料庫 遠端api 來自客戶端的資料 1 <?php 2 $input = '<p><script>alert("You w

PHP根據身份證號碼驗證獲取星座生肖和性別函式

首先介紹一下身份證含義 新的18位身份證號碼各位的含義: 1-2位省、自治區、直轄市程式碼; 3-4位地級市、盟、自治州程式碼; 5-6位縣、縣級市、區程式碼; 7-14位出生年月日,比如19670401代表1967年4月1日; 15-17位為順序號,其中17位男為單數,

iOS NSString字串查詢擷取拆分替換驗證改變大小寫

NSString*str = @"aaaaaaaaa bbbbbbbbb ccccccccccccccccccc" @"sdafasdfwerwlkjsaldkfjklkdjs934523jkla

JAVA虛擬機器(JVM)——類載入的過程(載入驗證準備解析初始化)

載入 “載入”是”類載入”過程的一個階段。在載入階段,虛擬機器需要完成以下3件事情: 1.通過一個類的全限定名來獲取定義此類的二進位制位元組流。 2.將這個位元組流所代表的靜態儲存結構轉化為方法區的執行時資料結構。 3.在記憶體中生成一個代表這個類的java

JVM類載入的過程(載入驗證準備解析初始化)

載入 載入一般可以分為顯示載入(通過Class.forName()方法載入類)和隱式載入(通過關鍵字new載入),這個過程主要完成三件事: 1.通過路徑/類全名獲取該類的class檔案的二進位制位元組流。 2.將存於class檔案中的靜態資料結構轉化成JVM方法區中執行

PHP安全過濾函式

在PHP中,有些很有用的函式開源非常方便的防止你的網站遭受各種攻擊,例如SQL注入攻擊,XSS(Cross Site Scripting:跨站指令碼)攻擊等。 1. mysql_real_escape_string() 這個函式在PHP中防止SQL注入攻擊時非常有用。

PHP安全過濾使用者輸入

/** * 安全過濾函式 */ function public_safe_replace($string) { $string = str_replace('%20','',$string); $

Yii之登入登出驗證授權理解

驗證Authentication的目的是驗證某個使用者是否就是他聲稱的那個使用者,常見的就是 使用者名稱+密碼 來確認使用者身份,通過更復雜的程式設計,可以實現其它的身份確認方法 授權Authorization就是對於身份明確的(即已經過“驗證”這一步的)使用者檢查他是否允

php安全過濾

安全的過濾函式:function filter($input){ $input=strip_tags(trim($input)); $input=htmlentities($input,

RSA 簽名驗證加密解密幫助類

ner back cin .get throws creat signature ecb byte import java.io.IOException; import java.security.InvalidKeyException; import java.s

Java類加載機制(加載驗證準備解析初始化)

包含 image 發生 進程 引用變量 就會 www. pub 內存空間 如下圖所示,Java的類加載機制主要分為三個部分,分別為加載、鏈接、初始化。其中鏈接又分為三個小部分——驗證、準備、解析。 加載——在經過對Java代碼進行編譯後,JVM將Java類編譯後的二

rpm安裝升級查詢與安全驗證

a13 type 安裝包 所有 技術分享 ffffff fff pro 軟件 安裝: rpm -ivh 軟件包 升級: rpm -Uvh 軟件包 查詢:a. 查詢所有安裝的軟件包: rpm -qa b. 查詢安裝包的詳細信息: rpm -qi nginx c.

PHP操作Redis(一) PHP連接Redis,含Redis密碼驗證指定某一Redis數據庫

自己 mysq iss rds 沖突 清除數據 syntax nbsp 就是 臺服務器上都快開啟200個redis實例了,看著就崩潰了。這麽做無非就是想讓不同類型的數據屬於不同的應用程序而彼此分開。 那麽,redis有沒有什麽方法使不同的應用程序數據彼此分開同時又存儲在相

Web安全_檔案上傳總結(前端js驗證後端驗證)

一、檔案上傳思路 首先我們通過一個網站上傳一個非法格式的檔案 在瀏覽載入檔案,但還未點選上傳按鈕時便彈出對話方塊,內容如:只允許上傳.jpg/.jpeg/.png字尾名的檔案,而此時並沒有傳送資料包。 如果網頁未彈窗,而在頁面彈窗,則考慮後端驗證 所以就圍繞前

PHP中的單引號雙引號和轉義字元詳解

PHP單引號及雙引號均可以修飾字符串型別的資料,如果修飾的字串中含有變數(例$name);最大的區別是: 雙引號會替換變數的值,而單引號會把它當做字串輸出。 轉義字元,顧名思義會將規定的語法用"\"來輸出。但語法規定在不同的系統中轉義字元的作用不同,例如:windows下的回車換行符用"\r"或"

php中的單引號雙引號和轉義字元

在PHP中,可以使用 echo() 和 print() 語句傳送資料到Web瀏覽器,也可以使用它們傳送HTML 程式碼到Web瀏覽器。從技術上講,echo() 和 print() 是語言構造,而不是函式,這裡用了一對括號,從而有助於與變數以及PHP的其他部分割槽分開。這兩個語句本質上沒有什麼區別,因此用那

app與php後臺介面登入認證驗證(seesion和token)

簡要:隨著電商的不斷髮展,APP也層次不窮,隨著科技的發展主要登入形式(微信、QQ、賬號/密碼);為此向大家分享一下"app與php後臺介面登入認證、驗證"想法和做法;希望能夠幫助困惑的夥伴們,如果有不對或者好的建議告知下;*~*!一、登入機制粗略分析:登入可分為三個階段(登

PHP自帶方法驗證郵箱URLIP是否合法

以前用PHP驗證郵箱、URL、IP是否合法都是通過自己寫正則來實現,但是有時候腦子發昏,可能會寫出一個不是完全正確的正則,導致驗證出錯,今天發現原來PHP本身自帶了驗證郵箱、URL、IP是否合法的函式。 主要使用的是filter_var函式。 語法 filter_var(variable,

php正則過濾html標籤空格換行

$str=preg_replace("/\s+/", " ", $str); //過濾多餘回車 $str=preg_replace("/<[]+/si","<",$str);//過濾<__("<"號後面帶空格) $str=preg_replace("/<\!--.*?-->

ISAPICGIFASTCGIPHP-FPM與執行緒安全執行緒非安全

ISAPI:Internet Server Application Programming Interface,是種協議,對應語言的實現就是對應的伺服器擴充套件(以動態連結庫dll形式存在)。一個ISAPI的DLL,可以在被使用者請求啟用後長駐記憶體,等待使用者的另一個請求,還可以在一個DLL裡設定多個使用