2013-06-19 99 views
-1

我不能真正理清所有清理GET請求的不同方法,所以我想我會尋求一些幫助。

$view=$_GET['view']; 

if($view){ 
$result = mysql_query('SELECT * FROM main WHERE category = "'.$view.'"', $main); 
} 

這裏是否存在安全隱患?我試圖搜索示例來嘗試注入字符串,但我找不到任何可行的東西。

我正在考慮使用只有字母和數字的preg_match,但不確定是否需要它。

儘管我想知道答案,但是有什麼背景知識可以幫助我?有很多不同的場景和方式來清理字符串以應對那些不同的情況,而我正努力讓自己的頭腦清醒。

+0

[大逃避現實(或:你需要知道的工作,文本中的文字)] (http://kunststube.net/escapism/) – deceze

回答

0

您應該切換到使用mysqli或PDO準備的語句。這將解決安全問題。另外,mysql_函數已被棄用並將被刪除。

+2

而不是僅僅告訴OP該做什麼,他做錯了一個*解釋*會好得多。 Kneejerk *「PDO!「*答案似乎是新的*」jQuery!「*? – deceze

+2

@deceze我認爲這種類型的問題已被詢問(和回答)很多次,以至於RTFM式的答案完全可以接受,更多的是,如果答案給OP提供了正確的關鍵字查找 –

+0

我想他知道自己在做什麼錯誤,因爲他知道自己對SQL注入嘗試的足夠了解,他只是不知道如何解決這個問題。這個問題,所以... – Jessica

1

試試這個:

視圖= DERP 「或睡眠(10000000)=」 的問題?

對此和您的網站有足夠的請求是DoS。

避免它的最佳方法是使用mysql_real_escape_string,或更新爲更新的內容,例如PDO。

1

這裏是否存在安全隱患?

是的,你有一個SQL Injection漏洞。

爲了保護您的查詢,您應該考慮使用PDO或MySQLi並使用準備好的語句。準備好的語句爲轉義或驗證變量提供了更多的安全性。編寫的語句永遠不會將變量插入到查詢中,而是會發生變量(或參數)由MySQL服務器單獨處理,因此不會出現SQL注入的可能性。

This is a good PDO tutorial這是針對來自mysql_*背景的開發人員,它包括一些準備好的語句示例。 ?SQL注入,將您的查詢工作的

例子:

的script.php視圖=「」 OR 1

這會騙你的代碼從表中檢索所有行因爲這會導致WHERE子句始終評估爲true。這是查詢將變成:

SELECT * FROM主WHERE類= '' OR 1