2010-01-10 63 views
0

我用get方法創建了一個搜索表單。但當url看起來像這樣search.php?search []搜索?搜索[](mod_rewrite)然後我得到一個sql fattal錯誤。它傳遞一個數組,我想避免這個問題。如何用htaccess重寫搜索[]到其他東西

我的問題是我怎麼重定向一個人從該網址到search.php中

+1

無論如何,您應該在消毒數據庫之前進行消毒。 – 2010-01-10 22:02:06

+0

是的,我使用mysqli_real_escape_string()函數執行此操作,但它會打印出該行的錯誤。這就是我想要避免的。 – Christophe 2010-01-11 09:00:46

回答

4

這聽起來像你直接傳遞?search[]查詢字符串變量到SQL。 mod_rewrite不會爲你解決這個問題...如果我決定用http://www.yoursite.com/search.php?search=;DROP TABLE users;來打電話給你的頁面怎麼辦?你只是無法使用mod_rewrite來預測用戶可以想到的所有不好的輸入。

您的代碼需要進行輸入驗證和消毒。 您必須假設您的腳本從用戶處收到的所有內容都是惡意且危險的。包括$_GET,$_POST$_COOKIE中的所有數據。

這裏的正確解決方案是檢查$_GET['search']是傳遞給SQL的有效值。例如:

if (is_string($_GET['search']) && ! empty($_GET['search']) { 
    //escape the input properly using your database-specific method, e.g.: 
    $searchParam = mysql_real_escape_string($_GET['search']); 
    //run your query with the escaped data 
} 

至少,這將確保您傳入的搜索變量不是空字符串。

+0

我已經使用mysqli_real_escape_string();所以這是一件好事,但我使用isset()來查看它是否存在,然後嘗試使用is_string(); – Christophe 2010-01-11 09:03:39

+0

完美,工作,但我不得不使用isset()第一否則我有「未定義的索引:...」 – Christophe 2010-01-13 16:04:15