日韩精品免费在线_含咬她的花蒂高潮h|HD中文字幕在线播放,国产精品久久久久久久久久妇女,精品国产乱码久久久久久蜜臀,风流少妇被粗大爽

0411-39943997
工作時間:周一至周日 8:30-22:00
前端技術(shù)
News and information

PHP安全之數(shù)據(jù)過濾和驗證

標簽:瀏覽次數(shù):?? 時間:2017-08-28

永遠不要信任外部輸入,不要相信任何來自不受自己直接控制的數(shù)據(jù)源中的數(shù)據(jù)。實際開發(fā)中,總有人有意或無意的把危險數(shù)據(jù)注入PHP代碼中,因此PHP安全編程變得和重要,一般我們處理外部輸入安全思路是:過濾輸入、驗證數(shù)據(jù)。

過濾輸入

過濾輸入是指將來自外部數(shù)據(jù)中不安全的字符轉(zhuǎn)義或刪除。

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

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

假如有人在評論框中輸入以下內(nèi)容并提交:

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

很顯然,這里加了惡意的<script>標簽,如果我們不加任何處理,那么數(shù)據(jù)就直接進存儲層了,然后用戶再瀏覽網(wǎng)頁的時候就會輸出彈出警告框了。所以這就是我們?yōu)槭裁床灰嘈湃魏瓮獠枯斎氲脑颉?/p>

那么,如何使用PHP處理過濾輸入數(shù)據(jù)呢?以下是我的幾點建議:

1、對于需要輸出到頁面的內(nèi)容,使用strip_tags()函數(shù)來去除 HTML 標簽或者使用 htmlentities()或是htmlspecialchars()函數(shù)來對特殊字符分別進行轉(zhuǎn)義從而得到各自的HTML實體,避免XSS攻擊。如對上面的script腳本過濾:

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

2、如果需要傳入能夠在命令行中執(zhí)行的選項,調(diào)用exec()等函數(shù)時要格外小心。你可以使用自帶的 escapeshellarg()函數(shù)來過濾執(zhí)行命令的參數(shù)。

3、通過輸入數(shù)據(jù)拼接構(gòu)建的SQL查詢語句,一定要注意使用PDO預(yù)處理。PDO是PHP內(nèi)置的數(shù)據(jù)庫抽象層,使用一個接口表示多種數(shù)據(jù)庫。PDO預(yù)處理語句是PDO提供的一個工具,用于過濾外部數(shù)據(jù),然后把過濾后的數(shù)據(jù)嵌入SQL語句中,避免SQL注入。

4、當接收外部輸入來從文件系統(tǒng)中加載文件。這可以通過將文件名修改為文件路徑來進行利用。你需要過濾掉"/", "../", null 字符或者其他文件路徑的字符來確保不會去加載隱藏、私有或者敏感的文件。

5、盡量不要使用正則表達式函數(shù)過濾HTML輸入,如preg_replace()和preg_replace_all(),正則表達式很復(fù)雜,一不小心就掉坑里了,出錯幾率高。

驗證數(shù)據(jù)

與過濾輸入不同,驗證數(shù)據(jù)不會從輸入數(shù)據(jù)中刪除信息,而是只確認輸入數(shù)據(jù)是否符合預(yù)期,比如輸入的數(shù)據(jù)是否是Email郵箱、手機號碼、數(shù)字等等。這種數(shù)據(jù)我們或叫做無效數(shù)據(jù),我們驗證這種無效數(shù)據(jù),并阻止其進入數(shù)據(jù)存儲層,并適當?shù)奶崾居脩翦e誤的輸入信息。

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

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

我們需要特別注意filter_var()函數(shù)的返回值,如果驗證成功,返回的是要驗證的值,如果驗證失敗,則返回false。

附PHPfilter_var()函數(shù)的驗證標志:

FILTER_VALIDATE_BOOLEAN: 布爾值

FILTER_VALIDATE_EMAIL: Email

FILTER_VALIDATE_FLOAT: 浮點數(shù)

FILTER_VALIDATE_INT: 整數(shù)

FILTER_VALIDATE_IP: IP地址

FILTER_VALIDATE_MAC: MAC地址

FILTER_VALIDATE_REGEXP: 正則表達式

FILTER_VALIDATE_URL: URL地址

最后,說明下,黑客都是通過使用工具或非正常手段,繞過我們的前端驗證,構(gòu)建危險數(shù)據(jù)進行WEB滲透,所以我們代碼開發(fā)時,尤其是后端開發(fā),安全是我們的首要任務(wù)。接下來Helloweba將繼續(xù)給大家提供開發(fā)級別的安全防范文章,敬請關(guān)注。



本文地址:http://www.achat-haute-saone.com/front/20170828188.html
Copyright? 2011 仟億科技,All rights reserved.
首頁關(guān)于我們新聞資訊服務(wù)項目軟件產(chǎn)品解決方案成功案例網(wǎng)站地圖加入我們聯(lián)系我們