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 之外的任意單字元匹配...