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 // <p><script>alert("You won the Nigerian lottery!");</script></p>View Code5 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_HIGH16 ); 17 echo $safeString.PHP_EOL; 18 // i18n说的话 19 20 // 轉義輸出 21 $output = '<p><script>alert("NSA backdoor installed")</script></p>'; 22 echo htmlentities($output, ENT_QUOTES, 'UTF-8').PHP_EOL; 23// <p><script>alert("NSA backdoor installed")</script></p>
模板引擎
一些加密函式
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
相關推薦
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自帶方法驗證郵箱、URL、IP是否合法
以前用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("/<\!--.*?-->
ISAPI、CGI、FASTCGI、PHP-FPM與執行緒安全、執行緒非安全
ISAPI:Internet Server Application Programming Interface,是種協議,對應語言的實現就是對應的伺服器擴充套件(以動態連結庫dll形式存在)。一個ISAPI的DLL,可以在被使用者請求啟用後長駐記憶體,等待使用者的另一個請求,還可以在一個DLL裡設定多個使用