今天就跟大家聊聊有關(guān)如何進(jìn)行PHP中的數(shù)據(jù)過濾和驗(yàn)證,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
創(chuàng)新互聯(lián)專注于中大型企業(yè)的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計(jì)客戶上1000+,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長!
永遠(yuǎn)不要信任外部輸入,不要相信任何來自不受自己直接控制的數(shù)據(jù)源中的數(shù)據(jù)。實(shí)際開發(fā)中,總有人有意或無意的把危險(xiǎn)數(shù)據(jù)注入PHP代碼中,因此PHP安全編程變得和重要,一般我們處理外部輸入安全思路是:過濾輸入、驗(yàn)證數(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ù)到達(dá)存儲(chǔ)層(MySQL或redis)前一定要過濾輸入的數(shù)據(jù),這是第一道防線。
假如有人在評論框中輸入以下內(nèi)容并提交:
<script>alert("Helloweba");</script>
很顯然,這里加了惡意的<script>
標(biāo)簽,如果我們不加任何處理,那么數(shù)據(jù)就直接進(jìn)存儲(chǔ)層了,然后用戶再瀏覽網(wǎng)頁的時(shí)候就會(huì)輸出彈出警告框了。所以這就是我們?yōu)槭裁床灰嘈湃魏瓮獠枯斎氲脑颉?/p>
那么,如何使用PHP處理過濾輸入數(shù)據(jù)呢?以下是我的幾點(diǎn)建議:
1、對于需要輸出到頁面的內(nèi)容,使用strip_tags()
函數(shù)來去除 HTML 標(biāo)簽或者使用 htmlentities()
或是htmlspecialchars()
函數(shù)來對特殊字符分別進(jìn)行轉(zhuǎn)義從而得到各自的HTML實(shí)體,避免XSS攻擊。如對上面的script腳本過濾:
<?php
$input = '<script>alert("Helloweba");</script>';
echo htmlentities($input, ENT_QUOTES, 'utf-8');
2、如果需要傳入能夠在命令行中執(zhí)行的選項(xiàng),調(diào)用exec()等函數(shù)時(shí)要格外小心。你可以使用自帶的 escapeshellarg()
函數(shù)來過濾執(zhí)行命令的參數(shù)。
3、通過輸入數(shù)據(jù)拼接構(gòu)建的SQL查詢語句,一定要注意使用PDO預(yù)處理。PDO是PHP內(nèi)置的數(shù)據(jù)庫抽象層,使用一個(gè)接口表示多種數(shù)據(jù)庫。PDO預(yù)處理語句是PDO提供的一個(gè)工具,用于過濾外部數(shù)據(jù),然后把過濾后的數(shù)據(jù)嵌入SQL語句中,避免SQL注入。
4、當(dāng)接收外部輸入來從文件系統(tǒng)中加載文件。這可以通過將文件名修改為文件路徑來進(jìn)行利用。你需要過濾掉"/", "../", null 字符或者其他文件路徑的字符來確保不會(huì)去加載隱藏、私有或者敏感的文件。
5、盡量不要使用正則表達(dá)式函數(shù)過濾HTML輸入,如preg_replace()
和preg_replace_all()
,正則表達(dá)式很復(fù)雜,一不小心就掉坑里了,出錯(cuò)幾率高。
與過濾輸入不同,驗(yàn)證數(shù)據(jù)不會(huì)從輸入數(shù)據(jù)中刪除信息,而是只確認(rèn)輸入數(shù)據(jù)是否符合預(yù)期,比如輸入的數(shù)據(jù)是否是Email郵箱、手機(jī)號碼、數(shù)字等等。這種數(shù)據(jù)我們或叫做無效數(shù)據(jù),我們驗(yàn)證這種無效數(shù)據(jù),并阻止其進(jìn)入數(shù)據(jù)存儲(chǔ)層,并適當(dāng)?shù)奶崾居脩翦e(cuò)誤的輸入信息。
PHP的filter_var()
和 filter_input()
函數(shù)可以過濾文本并對格式進(jìn)行驗(yàn)證。PHP提供了驗(yàn)證布爾值、Email、浮點(diǎn)數(shù)、整數(shù)、IP地址、MAC地址、正則表達(dá)式以及URL地址的標(biāo)志,如以下代碼是驗(yàn)證輸入的郵箱是否正確:
$input = 'hello@example.com';
$isEmail = filter_var($input, FILTER_VALIDATE_EMAIL);
if ($isEmail !== false) {
echo '驗(yàn)證結(jié)果:成功';
} else {
echo '驗(yàn)證結(jié)果:失敗';
}
我們需要特別注意filter_var()函數(shù)的返回值,如果驗(yàn)證成功,返回的是要驗(yàn)證的值,如果驗(yàn)證失敗,則返回false。
附PHPfilter_var()
函數(shù)的驗(yàn)證標(biāo)志:
FILTER_VALIDATE_BOOLEAN
: 布爾值
FILTER_VALIDATE_EMAIL
: Email
FILTER_VALIDATE_FLOAT
: 浮點(diǎn)數(shù)
FILTER_VALIDATE_INT
: 整數(shù)
FILTER_VALIDATE_IP
: IP地址
FILTER_VALIDATE_MAC
: MAC地址
FILTER_VALIDATE_REGEXP
: 正則表達(dá)式
FILTER_VALIDATE_URL
: URL地址
最后,說明下,黑客都是通過使用工具或非正常手段,繞過我們的前端驗(yàn)證,構(gòu)建危險(xiǎn)數(shù)據(jù)進(jìn)行WEB滲透,所以我們代碼開發(fā)時(shí),尤其是后端開發(fā),安全是我們的首要任務(wù)。接下來Helloweba將繼續(xù)給大家提供開發(fā)級別的安全防范文章,敬請關(guān)注。
看完上述內(nèi)容,你們對如何進(jìn)行PHP中的數(shù)據(jù)過濾和驗(yàn)證有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)站標(biāo)題:如何進(jìn)行PHP中的數(shù)據(jù)過濾和驗(yàn)證
文章URL:http://www.rwnh.cn/article8/ghscop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、自適應(yīng)網(wǎng)站、小程序開發(fā)、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)