1樓:飛揚舞俠
資料進行轉義,
資料型別要轉換判斷,如id,要強制轉換為整形。
mysql語句中 值要加上單引號
$username=addslashes($_get['username']);
$id=intval($_get['id']);
$sql="update member set username='$username' where id='id'";
ps:配置環境不同,有的環境下會對提交的資料自動進行轉義,注意不要重複轉義
2樓:匿名使用者
對輸入的資料進行校驗,如果包含英文的分號、單引號等特殊字元,直接提示輸入資料有誤
3樓:匿名使用者
最簡單的方法,mysql_real_escape_string
stringmysql_real_escape_string ( string$unescaped_string [, resource$link_identifier ] )
本函式將 unescaped_string 中的特殊字元轉義,並計及連線的當前字符集,因此可以安全用於 mysql_query()。
php如何防止sql注入
4樓:小雞再次
額,這是我老師給的答案
答:過濾一些常見的資料庫操作關鍵字,
select ,insert,update,delete,and,*等或通過系統函式addslashes對內容進行過濾
php配置檔案中register_globals=off;設定為關閉狀態.(作用將註冊全域性變數關閉);如接收post表單的值使用$_post['user'],假設設定為on的話$user才接收值
sql語句書寫的時候盡量不要省略小引號(tab上面那個)和單引號
提高資料庫命名技巧,對於一些重要的字段根據程式的特點命名,使之不易被猜中
對於常的方法加以封裝,避免直接暴漏sql語句
開啟php安全模式safe_mode=on
開啟magic_quotes_gpc來防止sql注入,預設為關閉,開啟後自動把使用者提交sql查詢語句進行轉換把"'"轉換成"\'"
控制錯誤資訊輸出,關閉錯誤資訊提示,將錯誤資訊寫到系統日誌
使用mysqli或pdo預處理
5樓:匿名使用者
這個方法比較多,這裡簡單舉個例子:
提交的變數中所有的 ' (單引號), " (雙引號), \ (反斜線) and 空字元會自動轉為含有反斜線的轉義字元,給sql注入帶來不少的麻煩。
請看清楚:「麻煩」而已~這並不意味著php防範sql注入,書中就講到了利用改變注入語句的編碼來繞過轉義的方法,比如將sql語句轉成ascii編碼(類似:char(100,58,92,108,111,99,97,108,104,111,115,116…)這樣的格式),或者轉成16進製制編碼,甚至還有其他形式的編碼,這樣以來,轉義過濾便被繞過去了
// 去除轉義字元
function stripslashes_array($array)
} else if (is_string($array)) return $array;
}@set_magic_quotes_runtime(0); // 判斷 magic_quotes_gpc 狀態
if (@get_magic_quotes_gpc())
php防範sql注入的**
$keywords = addslashes($keywords); $keywords =
str_replace("_","\_",$keywords);//轉義掉」_」 $keywords =
str_replace("%","\%",$keywords);//轉義掉」%」
怎麼樣在php中阻止sql注入式攻擊
6樓:
php自帶乙個功能可以對輸入的字串進行處理,可以在較底層對輸入進行安全上的初步處理,也即magic quotes。(php.ini
magic_quotes_gpc)。如果magic_quotes_gpc選項啟用,那麼輸入的字串中的單引號,雙引號和其它一些字元前將會被自動加
上反斜槓/。
但magic quotes並不是乙個很通用的解決方案,沒能遮蔽所有有潛在危險的字元,並且在許多伺服器上magic quotes並沒有被啟用。所以,我們還需要使用其它多種方法來防止sql注入。
許多資料庫本身就提供這種輸入資料處理功能。例如php的mysql操作函式中有addslashes()、 mysql_real_escape_string()、mysql_escape_string()等函式,可將特殊字元和可能引起資料庫操作出錯的字
符轉義。那麼這三個功能函式之間有什麼卻別呢?下面我們就來詳細講述下。
雖然國內很多php程式設計師仍在依靠addslashes防止sql注入,還是建議大家加強中文防止sql注入的檢查。addslashes的問題在
於黑客可以用0xbf27來代替單引號,而addslashes只是將0xbf27修改為0xbf5c27,成為乙個有效的多位元組字元,其中的0xbf5c仍會
被看作是單引號,所以addslashes無法成功攔截。
當然addslashes也不是毫無用處,它是用於單位元組字串的處理,多位元組字元還是用mysql_real_escape_string吧。
另外對於php手冊中get_magic_quotes_gpc的舉例:
if (!get_magic_quotes_gpc()) else
最好對magic_quotes_gpc已經開放的情況下,還是對$_post[』lastname』]進行檢查一下。
再說下mysql_real_escape_string和mysql_escape_string這2個函式的區別:
mysql_real_escape_string 必須在(php 4 >= 4.3.0, php 5)的情況下才能使用。否則只能用
mysql_escape_string ,兩者的區別是:mysql_real_escape_string
考慮到連線的當前字符集,而mysql_escape_string 不考慮。
總結一下:
* addslashes() 是強行加/;
* mysql_real_escape_string() 會判斷字符集,但是對php版本有要求;
* mysql_escape_string不考慮連線的當前字符集。
dz中的防止sql注入就是用addslashes這個函式,同時在dthmlspecialchars這個函式中有進行一些替換$string =
preg_replace('/&((#(/d|x[a-fa-f0-9]));)/',
'&//1',這個替換解決了注入的問題,同時也解決了中文亂碼的一些問題
7樓:匿名使用者
過濾不符合要求的字元。
如何防止phpsql注入式攻擊
php如何防止sql注入?
8樓:小雞再次
額,這是我老師給的答案
答:過濾一些常見的資料庫操作關鍵字,
select ,insert,update,delete,and,*等或通過系統函式addslashes對內容進行過濾
php配置檔案中register_globals=off;設定為關閉狀態.(作用將註冊全域性變數關閉);如接收post表單的值使用$_post['user'],假設設定為on的話$user才接收值
sql語句書寫的時候盡量不要省略小引號(tab上面那個)和單引號
提高資料庫命名技巧,對於一些重要的字段根據程式的特點命名,使之不易被猜中
對於常的方法加以封裝,避免直接暴漏sql語句
開啟php安全模式safe_mode=on
開啟magic_quotes_gpc來防止sql注入,預設為關閉,開啟後自動把使用者提交sql查詢語句進行轉換把"'"轉換成"\'"
控制錯誤資訊輸出,關閉錯誤資訊提示,將錯誤資訊寫到系統日誌
使用mysqli或pdo預處理
9樓:銀馳陳慕
對於網頁來講,注入源頭還是在於使用者提交的資料問題,只要把這個資料控制好,注入是很難成功的。所以,對使用者提交上來的資料需要嚴格過慮及處理。
如何學習php,如何最快速的學習PHP
最簡單的就是網上自學 但是這樣自律性要求很強 而且能力也要強 建議去報一些培訓班之類的 然後找份工作慢慢深造 php相對於其他語言,比較簡單,相對好上手,比較適合零基礎的人學習,自學的話對自己的自律性要求很高,我之前就在領元學校學習的,所以如果可以的話我建議去學習班裡學習,後期邊開發邊學習,問題和錯...
php哪些方式傳送http請求,php如何通過get方法傳送http請求,並且得到返回的引數
第一種實現方式 實用socket程式設計,通常我們實用fsockopen這個函式來建立乙個socket連線,用fputs來傳送版乙個請求 第二種實現方式權 實用php的curl擴充套件,我們使用curl init 來初始化乙個連線,然後設定一堆的curl setopt 的東西來設定url,post的...
急!!php獲取url引數,php如何獲取url的引數
url 傳值只能用get 方法,親,你的前台頁面必須用get方法 你這前台用post 後台用get,然後還用url 你這是要玩壞伺服器的節奏嗎 你兩種方式不對,你post傳值用get獲取 你列印一下 post和 get試試,看看到底哪種能接收到值 這個位址在 server http referer ...