sql注入與轉(zhuǎn)義的php函數(shù)代碼
sql注入:
正常情況下:
delete.php?id=3;
$sql = 'delete from news where id = '.$_GET['id'];
惡意情況:
delete.php?id=3 or 1;
$sql = 'delete from news where id = 3 or 1'; -------如此執(zhí)行后,所有的記錄將都被刪除
應(yīng)該采取相關(guān)措施。。。比如用之前先判斷是否是數(shù)字等等。
要使自己相信,從客戶端傳來的信息永遠(yuǎn)是不可靠的??!
轉(zhuǎn)義:
有時候從客戶端傳來的數(shù)據(jù),可能惡意包含些特殊的字符,比如單引號、斜杠等,所以需要轉(zhuǎn)義,轉(zhuǎn)義成普通的字符,此時就要用到string addslashes ( string $str ),這個函數(shù)可以對某個變量進(jìn)行轉(zhuǎn)義。但是,如果對數(shù)組里的元素進(jìn)行轉(zhuǎn)義,就用foreach循環(huán)數(shù)組,如下:
foreach($_POST as $k=>$v) {
if(is_string($v)) {
$_POST[$k] = addslashes($v);
}
}
但是如果數(shù)組中還包含數(shù)組,那就要遞歸進(jìn)行轉(zhuǎn)義了,此時用到
array_walk_recursive(array &$input , callback $funcname [, mixed $userdata ])
將用戶自定義函數(shù) funcname 應(yīng)用到 array 數(shù)組中的每個單元。本函數(shù)會遞歸到更深層的數(shù)組中去。典型情況下 funcname 接受兩個參數(shù)。input 參數(shù)的值作為第一個,鍵名作為第二個。如果提供了可選參數(shù) userdata,將被作為第三個參數(shù)傳遞給 callback funcname。成功時返回 TRUE, 或者在失敗時返回 FALSE
也就是說:用自定義的函數(shù),至少要能接收兩個參數(shù),而addslashes()只能接收一個參數(shù)所以自定義一個函數(shù)如下:
function a(&$v,$k){
$v=addslashes($v);
}
array_walk_recursive(&$arr,'a');
系統(tǒng)自動轉(zhuǎn)義:
PHP中,有一個魔術(shù)引號的概念,如何打開?答:在PHP.ini中,magic_quotes_gpc=On;重啟apache即可
魔術(shù)引號被打開后,系統(tǒng)會自動對$_GET,$_POST,$_COOKIE數(shù)據(jù)進(jìn)行轉(zhuǎn)義,在不知情的情況下,再次進(jìn)行手動轉(zhuǎn)義的話,就轉(zhuǎn)多了,要想合理的進(jìn)行轉(zhuǎn)義,就要首先判斷,魔術(shù)符號是否已經(jīng)打開了,用magic_quotes_gpc()進(jìn)行判斷,不需要傳值,關(guān)閉返回0,關(guān)閉返回1
if(!get_magic_quotes_gpc()) { // 如果魔術(shù)引號沒開
function _addslashes(&$v,$k) {
$v = addslashes($v);
}
array_walk_recursive(&$_GET,'_addslashes');
array_walk_recursive(&$_POST,'_addslashes');
array_walk_recursive(&$_COOKIE,'_addslashes');
}
相關(guān)文章
『PHP』PHP截?cái)嗪瘮?shù)mb_substr()使用介紹
截?cái)辔恼聵?biāo)題,控制在15個文字,接下來為大家講解下如何實(shí)現(xiàn)這個需求,感興趣的朋友可以參考下哈2013-04-04
PHP5.5在windows安裝使用memcached服務(wù)端的方法
這篇文章主要介紹了PHP5.5在windows安裝使用memcached服務(wù)端的方法,需要的朋友可以參考下2014-04-04
php中使用接口實(shí)現(xiàn)工廠設(shè)計(jì)模式的代碼
php實(shí)現(xiàn)工廠設(shè)計(jì)模式,使用接口實(shí)現(xiàn),表面上接口沒有什么用,因?yàn)閜hp是類型自動轉(zhuǎn)換的。實(shí)現(xiàn)上使用接口可以約束類的定義,從而實(shí)現(xiàn)一致的訪問2012-06-06
PHP超級全局變量、魔術(shù)變量和魔術(shù)函數(shù)匯總整理
這篇文章主要介紹了PHP超級全局變量、魔術(shù)變量和魔術(shù)函數(shù)匯總整理,有需要的同學(xué)可以看下2021-02-02
php阿拉伯?dāng)?shù)字轉(zhuǎn)中文人民幣大寫
這篇文章主要介紹了php阿拉伯?dāng)?shù)字轉(zhuǎn)中文大寫金額,分享了兩種實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下2015-12-12

