我有一个搜索程序,它有多个输入文本框,对应于mysql数据库中的字段。我想知道一个自定义搜索框是否安全,用户可以在其中输入要搜索的实际字段及其值。
像这样:
<form method='post'>
<input type='text' name='param1' />
<input type='text' name='param2' />
<input type='text' name='customField' />
<input type='text' name='customValue' />
</form>
然后提交时:
$param1 = mysql_real_escape_string($_POST['param1']);
$param2 = mysql_real_escape_string($_POST['param2']);
$customField = mysql_real_escape_string($_POST['customField']);
$customValue = mysql_real_escape_string($_POST['customValue']);
$query = "SELECT * FROM mytable WHERE field1 LIKE '" . $param1 . "' AND field2 LIKE '" . $param2 . "' AND " . $customField . " LIKE '" . $customValue . "'";
这是一个内部网页,我们中只有少数人会真正看到这些新框,但我想知道是否可以在这里找到类似sql注入的内容。
答案 0 :(得分:5)
您应该检查他们提供的字段是否在您允许搜索的字段列表/数组中。在查询中的字段名称周围添加反引号也是为了更加安全。做这两件事会阻止任何注入这些变量。
答案 1 :(得分:1)
你必须对所有可能的战士进行硬编码
答案 2 :(得分:0)
我使用PDO,只是为了安全 - 然后确保相应地处理所有错误。
答案 3 :(得分:0)
Mike首先禁用你的mysql的多查询模式,其余的很好,
并注意使用单个表,如果你没有使用连接,那么我不在那里会有任何影响。