php常用的安全過濾函數(shù)集錦
雖然各種開發(fā)框架給我們提供了很好的安全的處理方式,但是,我們還是要注意一下安全問題的。
原因簡單:很多小的功能和項(xiàng)目是用不到框架的,我們需要自己解決安全問題!
①常用的安全函數(shù)有哪些:
mysql_real_escape_string()
addslashes()
②這些函數(shù)的作用:
mysql_real_escape_string()和addslashes()函數(shù)都是對數(shù)據(jù)中的 單引號、雙引號進(jìn)行轉(zhuǎn)義!也就是防止sql注入!
但是mysql_real_escape_string()考慮了字符集,更加的安全一些!
經(jīng)過查閱相關(guān)的資料,可以得出一個(gè)結(jié)論:當(dāng)前的字符集是單字節(jié)的話,這兩個(gè)函數(shù)作用相同,都可以起到轉(zhuǎn)義過濾的作用,但是,有誰會只是用單字節(jié)呢?尤其是utf8越來越廣泛的被使用到!
③函數(shù)的用法:
在了解mysql_real_escape_string()和addslashes()這兩個(gè)函數(shù)的用法的時(shí)候,我們必須先了解另外兩個(gè)函數(shù)的含義!
get_magic_quotes_gpc()和get_magic_quotes_runtime(),我們來比較一下兩個(gè)函數(shù)的異同:
相同:
a、兩者都是用來獲取php.ini配置文件的配置情況的!當(dāng)開啟的時(shí)候返回1,關(guān)閉的時(shí)候返回0!
b、當(dāng)開啟的時(shí)候,都會對指定范圍內(nèi)的數(shù)據(jù)進(jìn)行轉(zhuǎn)義過濾!
不同:
a、兩者的作用范圍不同:
magic_quotes_gpc主要作用于web客戶端,簡單的說主要是對$_GET、$_POST、$_COOKE中的數(shù)據(jù)進(jìn)行過濾!
magic_quotes_runtime主要是對文件中讀取的數(shù)據(jù)或從數(shù)據(jù)庫查詢得到的數(shù)據(jù)進(jìn)行過濾!
b、設(shè)置時(shí)間不同:
magic_quotes_gpc不可以在運(yùn)行時(shí)進(jìn)行設(shè)置[只能在重啟服務(wù)器的時(shí)候讀取該設(shè)置]
magic_quotes_runtime可以在運(yùn)行時(shí)設(shè)置!
注意:所謂運(yùn)行時(shí)設(shè)置,就是,我們可以通過ini_set()函數(shù),在腳本中對php.ini文件中的配置進(jìn)行設(shè)置!
明白了get_magic_quotes_gpc()和get_magic_quotes_runtime()這兩個(gè)函數(shù)的后,我們就應(yīng)該明白了:當(dāng)我們檢測到php.ini配置文件開啟了magic_quotes_runtime 和 magic_quotes_gpc的話,就會自動(dòng)的對指定范圍內(nèi)的數(shù)據(jù)進(jìn)行轉(zhuǎn)義!如果關(guān)閉的話,我們就需要使用mysql_real_escape_string()[或者addslashes函數(shù)進(jìn)行過濾]
④舉例說明:
1、無論magic_quotes_gpc和magic_quotes_runctime開啟還是關(guān)閉的情況下getdata.php腳本,都可以對數(shù)據(jù)進(jìn)行安全轉(zhuǎn)移,內(nèi)容如下:
<?php
if(!get_magic_quotes_gpc()) {
foreach($_GET as $key=> &$value) {
$value = mysql_real_escape_string($value);
}
}
if(!get_magic_quotes_runtime()) {
$sourceDataRecord= file('./sourceData.txt');
if($sourceDataRecord) {
foreach($sourceDataRecord as $sourceKey => &$sourceValue) {
$sourceValue = mysql_real_escape_string($sourceValue);
}
}
}
$gpcData = implode("\t", $_GET);
$runtimeData = implode("\t", $sourceDataRecord);
echo $gpcData, $runtimeData;
?>
在sourceData.txt中的內(nèi)容如下:
" It's anoterh sunday afternoon
I'm trunning turnning.....turnning around "
我們請求getData.php時(shí)的url如下:
php.test.com/safe/getdata.php?name=maw'eibin&age=25
執(zhí)行結(jié)果如下:
maw\'eibin 25\" It\'s anoterh sunday afternoon\r\n I\'m trunning
turnning.....turnning around \"
⑤參考資料:
相關(guān)文章
PHP使用imap_open實(shí)現(xiàn)讀取QQ郵箱
這篇文章主要為大家詳細(xì)介紹了PHP如何使用imap_open實(shí)現(xiàn)讀取QQ郵箱功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02JoshChen_php新手進(jìn)階高手不可或缺的規(guī)范介紹
所以,今天就整理了一下PHP的規(guī)范,讓大家參考參考。就像大家常說的一句話,“規(guī)矩是死的,人是活的。”。是的,但是,在規(guī)矩中成長的人都會擁有一堆非常讓人羨慕的好習(xí)慣2013-08-08PHP從零開始打造自己的MVC框架之入口文件實(shí)現(xiàn)方法詳解
這篇文章主要介紹了PHP從零開始打造自己的MVC框架之入口文件實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了php實(shí)現(xiàn)MVC框架入口文件的原理、定義及使用方法,需要的朋友可以參考下2019-06-06通過實(shí)例解析PHP數(shù)據(jù)類型轉(zhuǎn)換方法
這篇文章主要介紹了通過實(shí)例解析PHP數(shù)據(jù)類型轉(zhuǎn)換方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07PHP使用stream_context_create()模擬POST/GET請求的方法
這篇文章主要介紹了PHP使用stream_context_create()模擬POST/GET請求的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了stream_context_create模擬POST/GET請求的原理,使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-04-04php + ajax 實(shí)現(xiàn)的寫入數(shù)據(jù)庫操作簡單示例
這篇文章主要介紹了php + ajax 實(shí)現(xiàn)的寫入數(shù)據(jù)庫操作,結(jié)合實(shí)例形式分析了php + ajax 寫入數(shù)據(jù)庫基本原理、操作技巧與相關(guān)使用注意事項(xiàng),需要的朋友可以參考下2020-05-05