• 防SQL注入漏洞只要加入这段关键字过滤代码就可以了
  • 发布于 2个月前
  • 570 热度
    0 评论

SQL注入是我们数据库常见的一种安全漏洞,这种漏洞一般都是通过在前台表单页面输入有危害关键字的信息,系统在接收前台传输的信息在后台拼接SQL查询语句时利用拼接后的SQL语句漏洞达到入侵的目的。这里我们举一个比较常见的例子来简要说明一下sql注入的原理。


假如我们有一个users表,里面有两个字段username和password。在我们的java代码中我们初学者都习惯用sql拼接的方式进行用户验证。比如:"select id from users where username = '"+username +"' and password = '"  + password +"'" 这里的username和password都是我们存取从web表单获得的数据。下面我们来看一下一种简单的注入,如果我们在表单中username的输入框中输入' or 1=1-- ,password的表单中随便输入一些东西,假如这里输入123.此时我们所要执行的sql语句就变成了select id from users where username = '' or 1=1--  and password = '123',我们来看一下这个sql,因为1=1是true,后面 and password = '123'被注释掉了。所以这里完全跳过了sql验证。这里只是简单的举一个例子。


那如何解决这种SQL注入漏洞呢?最简单的就是对敏感关键字进行过滤,如下是一段过滤敏感关键字的js代码,大家可以在自己的项目中加入如下一段关键字过滤功能,就可以达到最基本的防范注入漏洞功能了。

js防注入漏洞过滤代码如下:

<!-- 堆代码 duidaima.com -->
function filterValue($data, $filterKeyword=false){
    if(is_numeric($data)){
        return $data;
    }else{
        $data = addslashes($data);
        if(get_magic_quotes_gpc()){
            $data = trimslashes($data);
        }
        $data = str_replace('_', '\_', $data);
        $data = str_replace('%', '\%', $data);
        $data = str_replace('*', '\*', $data);
        $data = nl2br($data);
        $data = trim($data);
        if($filterKeyword){//进行严格的敏感词替换
            $data = str_ireplace('select', 'sel&#101;ct', $data);
            $data = str_ireplace('join', 'jo&#105;n', $data);
            $data = str_ireplace('union', 'un&#105;on', $data);
            $data = str_ireplace('where', 'wh&#101;re', $data);
            $data = str_ireplace('insert', 'ins&#101;rt', $data);
            $data = str_ireplace('delete', 'del&#101;te', $data);
            $data = str_ireplace('update', 'up&#100;ate', $data);
            $data = str_ireplace('like', 'lik&#101;', $data);
            $data = str_ireplace('drop', 'dro&#112;', $data);
            $data = str_ireplace('create', 'cr&#101;ate', $data);
            $data = str_ireplace('modify', 'mod&#105;fy', $data);
            $data = str_ireplace('rename', 'ren&#097;me', $data);
            $data = str_ireplace('alter', 'alt&#101;r', $data);
            $data = str_ireplace('cast', 'ca&#115;', $data);
            $data = str_ireplace('outfile', 'outf&#105;le', $data);
            $data = str_ireplace('load_file', 'load_f&#105;le', $data);
        }
        return $data;
    }
}
总结:

SQL注入漏洞是一种古老而又简单的安全漏洞,而我们解决起来也必将简单,直接把一些SQL关键字过滤掉就可以了。

用户评论