我用get方法创建了一个搜索表单。但是当网址看起来像 search.php?search [] 或搜索?search [] (mod_rewrite)时,我得到一个sql fattal错误。它正在传递一个数组,我想避免这个问题。
我的问题是如何将一个人从该网址重定向到search.php
答案 0 :(得分: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
}
至少,这将确保您传入的搜索变量不是空字符串。