我正在寻求帮助以实现jquery自动完成功能,并且有人提到以下代码容易受到sql注入。作为编程新手,我无法说出如何/为什么。
是否有人能够更详细地解释,并采取具体措施来消除安全风险?
由于
JS:
$( "#filter" ).autocomplete({
source: function(request, response) {
$.ajax({
url: "http://rickymason.net/blurb/main/search/",
data: { term: $("#filter").val()},
dataType: "json",
type: "POST",
success: function(data){
var resp = $.map(data,function(obj){
return obj.tag;
});
response(resp);
}
});
},
minLength: 2
});
控制器:
public function search()
{
$term = $this->input->post('term', TRUE);
$this->thread_model->autocomplete($term);
}
型号:
public function autocomplete($term)
{
$query = $this->db->query("SELECT tag
FROM filter_thread ft
INNER JOIN filter f
ON ft.filter_id = f.filter_id
WHERE f.tag LIKE '%".$term."%'
GROUP BY tag");
echo json_encode($query->result_array());
}
答案 0 :(得分:2)
您在查询中使用了$term
未转义的内容。恶意用户可以提交类似' OR 1=1; DROP DATABASE;--
的字符串 - 您当然不希望这样。在将字符串放入查询之前,请使用mysql_real_escape_string()或MySQLi equivalent来清理字符串。
答案 1 :(得分:1)
在查询中使用不需要的字符之前,最好检查用户提交的数据。这样你就没有人在那个领域里输入他们想要的东西。当您在未选中的查询中使用任何用户提交的数据时,它可能会使您暴露于SQL注入攻击。
这是一个相当不错的解释:http://www.cisco.com/web/about/security/intelligence/sql_injection.html
答案 2 :(得分:0)
Sql Injection是Web安全的一个重要问题。请浏览一下有关sql注入的网站,然后你就会明白为什么需要清理字符串。