Sql注入與轉義

2022-08-29 22:12:28 字數 1511 閱讀 4991

del.php?id=3

$sql = 'delete from news where id=' . $_get['id'];

del.php?id=3 or 1;

這時 $sql = 'delete from news where id=3 or 1'

這樣,所有的新聞將都被刪除.

*//*

addslashes 可以對某個變數轉義,

但是,$_post是乙個陣列,可能有多個單元,

如果每個單元手動的addslashes來轉義,工作量大.

有什麼辦法,可以對$_post陣列的每乙個單元,進行轉義?

//

我們用系統提供好乙個函式,來對陣列進行遞迴

// array_walk_recursive ,這是遞迴處理陣列單元的函式

// 函式本身只有乙個功能------遞迴的把陣列每個單元走一遍

// 至於你怎麼處理這個陣列,自己寫乙個函式,

// 然後 array_walk_recursive會帶著你寫的函式把陣列單元走一遍.

// 如下,array_walk_recursive帶著addslashes在陣列各單元走一遍,

// 自然,各單元都被轉義了.

function abc(&$v,$k

) array_walk_recursive(&$_get,'abc');

print_r($_get);

/*

php中,有乙個魔術引號的概念,

如何開啟?

答:在php.ini中,magic_quotes_gpc=on;

重啟apache即可

然後做下面的實驗

發現$_get被自動轉義了.

這是魔術引號的作用---魔術引號開啟時,$_get,$_post,$_cookie資料,會被系統自動轉義.

*/print_r($_get); //

此時已被系統轉義了.

function abc(&$v,$k

) array_walk_recursive(&$_get,'abc');

print_r($_get); //

到此處,第二次轉義,轉多了.

/***

要想合理的轉義,得先判斷 魔術引號 有沒有開啟

如果開啟了,不要再轉義了,

如果沒開啟,再轉義.

問:如何判斷魔術引號沒有開啟?

答: 用magic_quotes_gpc()來判斷

***/

//

合理的判斷及轉義

if(!get_magic_quotes_gpc())

array_walk_recursive(&$_get,'_addslashes');

array_walk_recursive(&$_post,'_addslashes');

array_walk_recursive(&$_cookie,'_addslashes');

}

java處理sql注入方法 sql轉義

昨天被掃瞄出來sql注入問題,之前以為已經解決了,沒想到還是出現了。網上現有方法 1 preparestatement 由於每次執行都需要prepare,所以不推薦使用 2 乙個單引號變成兩個 replace 其他的字串替代方法有著侷限性,就不列舉了。我最開始使用的是2方法,但是還是有方法可以破解。...

mysql注入轉義繞過 SQL注入防禦繞過

一 寬位元組注入 1 什麼是寬位元組 gb2312 gbk gb18030 big5等這些都是常說的寬位元組,實際為兩位元組 2 寬位元組注入原理 防禦 將 轉換為 繞過 將 消滅 mysql在使用gbk編碼的時候,會認為兩個字元為乙個漢字 編碼為 5c 編碼為 27 df 5c mysql會認為是...

SQL 通配與轉義

今天專案碰到乙個問題,關於sql模糊查詢的通配和轉義,在網上查一些資料,整理一下 萬用字元 說明 與任意單字元匹配 與包含乙個或多個字元的字串匹配 與特定範圍 例如,a f 或特定集 例如,abcdef 中的任意單字元匹配。與特定範圍 例如,a f 或特定集 例如,abcdef 之外的任意單字元匹配...