PHP安全之數據過濾和驗證

永遠不要信任外部輸入,不要相信任何來自不受本身直接控制的數據源中的數據。實際開發中,總有人有意或無心的把危險數據注入PHP代碼中,所以PHP安全編程變得和重要,通常咱們處理外部輸入安全思路是:過濾輸入、驗證數據。

 

過濾輸入

過濾輸入是指未來自外部數據中不安全的字符轉義或刪除。php

外部輸入能夠是任何東西:$_GET 和 $_POST 等表單輸入數據,$_SERVER 超全局變量中的某些值,還有經過 fopen('php://input', 'r') 獲得的 HTTP 請求體。記住,外部輸入的定義並不侷限於用戶經過表單提交的數據。上傳和下載的文檔,session 值,cookie 數據,還有來自第三方 web 服務的數據,這些都是外部輸入。html

在數據到達存儲層(MySQL或Redis)前必定要過濾輸入的數據,這是第一道防線。前端

假若有人在評論框中輸入如下內容並提交:web

 <script>alert("Helloweba");</script>

很顯然,這裏加了惡意的<script>標籤,若是咱們不加任何處理,那麼數據就直接進存儲層了,而後用戶再瀏覽網頁的時候就會輸出彈出警告框了。因此這就是咱們爲何不要相信任何外部輸入的緣由。正則表達式

那麼,如何使用PHP處理過濾輸入數據呢?如下是個人幾點建議:shell

一、對於須要輸出到頁面的內容,使用strip_tags()函數來去除 HTML 標籤或者使用 htmlentities()或是htmlspecialchars()函數來對特殊字符分別進行轉義從而獲得各自的HTML實體,避免XSS攻擊。如對上面的script腳本過濾:數據庫

<?php  
$input = '<script>alert("Helloweba");</script>'; 
echo htmlentities($input, ENT_QUOTES, 'utf-8');

2、若是須要傳入可以在命令行中執行的選項,調用exec()等函數時要格外當心。你可使用自帶的 escapeshellarg()函數來過濾執行命令的參數。編程

3、經過輸入數據拼接構建的SQL查詢語句,必定要注意使用PDO預處理。PDO是PHP內置的數據庫抽象層,使用一個接口表示多種數據庫。PDO預處理語句是PDO提供的一個工具,用於過濾外部數據,而後把過濾後的數據嵌入SQL語句中,避免SQL注入。後端

4、當接收外部輸入來從文件系統中加載文件。這能夠經過將文件名修改成文件路徑來進行利用。你須要過濾掉"/", "../", null 字符或者其餘文件路徑的字符來確保不會去加載隱藏、私有或者敏感的文件。安全

五、儘可能不要使用正則表達式函數過濾HTML輸入,如preg_replace()preg_replace_all(),正則表達式很複雜,一不當心就掉坑裏了,出錯概率高。

驗證數據

與過濾輸入不一樣,驗證數據不會從輸入數據中刪除信息,而是隻確認輸入數據是否符合預期,好比輸入的數據是不是Email郵箱、手機號碼、數字等等。這種數據咱們或叫作無效數據,咱們驗證這種無效數據,並阻止其進入數據存儲層,並適當的提示用戶錯誤的輸入信息。

PHP的filter_var()filter_input()函數能夠過濾文本並對格式進行驗證。PHP提供了驗證布爾值、Email、浮點數、整數、IP地址、MAC地址、正則表達式以及URL地址的標誌,如如下代碼是驗證輸入的郵箱是否正確:

$input = 'hello@example.com'; 
$isEmail = filter_var($input, FILTER_VALIDATE_EMAIL); 
if ($isEmail !== false) { 
    echo '驗證結果:成功'; 
else { 
    echo '驗證結果:失敗'; 
}

咱們須要特別注意filter_var()函數的返回值,若是驗證成功,返回的是要驗證的值,若是驗證失敗,則返回false。

附PHPfilter_var()函數的驗證標誌:

FILTER_VALIDATE_BOOLEAN: 布爾值

FILTER_VALIDATE_EMAIL: Email

FILTER_VALIDATE_FLOAT: 浮點數

FILTER_VALIDATE_INT: 整數

FILTER_VALIDATE_IP: IP地址

FILTER_VALIDATE_MAC: MAC地址

FILTER_VALIDATE_REGEXP: 正則表達式

FILTER_VALIDATE_URL: URL地址

最後,說明下,黑客都是經過使用工具或非正常手段,繞過咱們的前端驗證,構建危險數據進行WEB滲透,因此咱們代碼開發時,尤爲是後端開發,安全是咱們的首要任務。接下來Helloweba將繼續給你們提供開發級別的安全防範文章,敬請關注。

相關文章
相關標籤/搜索