您好,登錄后才能下訂單哦!
本篇文章為大家展示了使用php怎么實(shí)現(xiàn)sql注入與轉(zhuǎn)義,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
php是一個(gè)嵌套的縮寫(xiě)名稱,是英文超級(jí)文本預(yù)處理語(yǔ)言,它的語(yǔ)法混合了C、Java、Perl以及php自創(chuàng)新的語(yǔ)法,主要用來(lái)做網(wǎng)站開(kāi)發(fā),許多小型網(wǎng)站都用php開(kāi)發(fā),因?yàn)閜hp是開(kāi)源的,從而使得php經(jīng)久不衰。
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ù)字等等。
要使自己相信,從客戶端傳來(lái)的信息永遠(yuǎn)是不可靠的??!
轉(zhuǎn)義:
有時(shí)候從客戶端傳來(lái)的數(shù)據(jù),可能惡意包含些特殊的字符,比如單引號(hào)、斜杠等,所以需要轉(zhuǎn)義,轉(zhuǎn)義成普通的字符,此時(shí)就要用到string addslashes ( string $str ),這個(gè)函數(shù)可以對(duì)某個(gè)變量進(jìn)行轉(zhuǎn)義。但是,如果對(duì)數(shù)組里的元素進(jìn)行轉(zhuǎn)義,就用foreach循環(huán)數(shù)組,如下:
復(fù)制代碼 代碼如下:
foreach($_POST as $k=>$v) {
if(is_string($v)) {
$_POST[$k] = addslashes($v);
}
}
但是如果數(shù)組中還包含數(shù)組,那就要遞歸進(jìn)行轉(zhuǎn)義了,此時(shí)用到
array_walk_recursive(array &$input , callback $funcname [, mixed $userdata ])
將用戶自定義函數(shù) funcname 應(yīng)用到 array 數(shù)組中的每個(gè)單元。本函數(shù)會(huì)遞歸到更深層的數(shù)組中去。典型情況下 funcname 接受兩個(gè)參數(shù)。input 參數(shù)的值作為第一個(gè),鍵名作為第二個(gè)。如果提供了可選參數(shù) userdata,將被作為第三個(gè)參數(shù)傳遞給 callback funcname。成功時(shí)返回 TRUE, 或者在失敗時(shí)返回 FALSE
也就是說(shuō):用自定義的函數(shù),至少要能接收兩個(gè)參數(shù),而addslashes()只能接收一個(gè)參數(shù)所以自定義一個(gè)函數(shù)如下:
復(fù)制代碼 代碼如下:
function a(&$v,$k){
$v=addslashes($v);
}
array_walk_recursive(&$arr,'a');
系統(tǒng)自動(dòng)轉(zhuǎn)義:
PHP中,有一個(gè)魔術(shù)引號(hào)的概念,如何打開(kāi)?答:在PHP.ini中,magic_quotes_gpc=On;重啟apache即可
魔術(shù)引號(hào)被打開(kāi)后,系統(tǒng)會(huì)自動(dòng)對(duì)$_GET,$_POST,$_COOKIE數(shù)據(jù)進(jìn)行轉(zhuǎn)義,在不知情的情況下,再次進(jìn)行手動(dòng)轉(zhuǎn)義的話,就轉(zhuǎn)多了,要想合理的進(jìn)行轉(zhuǎn)義,就要首先判斷,魔術(shù)符號(hào)是否已經(jīng)打開(kāi)了,用magic_quotes_gpc()進(jìn)行判斷,不需要傳值,關(guān)閉返回0,關(guān)閉返回1
復(fù)制代碼 代碼如下:
if(!get_magic_quotes_gpc()) { // 如果魔術(shù)引號(hào)沒(méi)開(kāi)
function _addslashes(&$v,$k) {
$v = addslashes($v);
}
array_walk_recursive(&$_GET,'_addslashes');
array_walk_recursive(&$_POST,'_addslashes');
array_walk_recursive(&$_COOKIE,'_addslashes');
}
上述內(nèi)容就是使用php怎么實(shí)現(xiàn)sql注入與轉(zhuǎn)義,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。