我用get方法創建了一個搜索表單。但當url看起來像這樣search.php?search []或搜索?搜索[](mod_rewrite)然後我得到一個sql fattal錯誤。它傳遞一個數組,我想避免這個問題。如何用htaccess重寫搜索[]到其他東西
我的問題是我怎麼重定向一個人從該網址到search.php中
我用get方法創建了一個搜索表單。但當url看起來像這樣search.php?search []或搜索?搜索[](mod_rewrite)然後我得到一個sql fattal錯誤。它傳遞一個數組,我想避免這個問題。如何用htaccess重寫搜索[]到其他東西
我的問題是我怎麼重定向一個人從該網址到search.php中
這聽起來像你直接傳遞?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
}
至少,這將確保您傳入的搜索變量不是空字符串。
我已經使用mysqli_real_escape_string();所以這是一件好事,但我使用isset()來查看它是否存在,然後嘗試使用is_string(); – Christophe 2010-01-11 09:03:39
完美,工作,但我不得不使用isset()第一否則我有「未定義的索引:...」 – Christophe 2010-01-13 16:04:15
無論如何,您應該在消毒數據庫之前進行消毒。 – 2010-01-10 22:02:06
是的,我使用mysqli_real_escape_string()函數執行此操作,但它會打印出該行的錯誤。這就是我想要避免的。 – Christophe 2010-01-11 09:00:46