• 党务问答:党组与党委有何区别? 2018-02-21
  • 杨浦区贯彻实施长护险 春节加班满足老人护理需求 2018-02-21
  •  “不打烊”不等于“全配送” 快递如何保障春节网购 2018-02-21
  • 冬奥观察:奥林匹克在“云”间 2018-02-20
  •  “不打烊”不等于“全配送” 快递如何保障春节网购 2018-02-20
  • 开创生态文明新时代 绘出美丽中国新图景 2018-02-20
  • 人民网驻阿尔及利亚记者报道集 2018-02-19
  • 党务问答:党组与党委有何区别? 2018-02-19
  • MINI车联网服务3月起升级至4G网络 增加新功能 2018-02-18
  • 以色列警方:已有足够的证据可以用于起诉以总理 2018-02-18
  • 冬奥会短节目第四 金博洋:伤病令我更强大 2018-02-18
  • 天津市北辰区委书记冯卫华:强化政治担当 把主体责任落实落细 2018-02-17
  • 正月初一客流继续回落 全国铁路预计发送旅客389万人次 2018-02-17
  • 送别余光中:诗人虽远行,乡愁永流传 2018-02-17
  • 集团原董事长违纪被查 人员伤亡事故频发 湖北宜化:去年亏损额超过公司市值 2018-02-17
  • [PHP-CodeIgniter]程序开发过程中应该注意的5个安全问题

    栏目: 我的笔记 发布于: 2014-08-11 15:20:51

    使用CodeIgniter框架开发过程中需要注意的5个安全问题,及防御措施:

    1、XSS(跨站脚本攻击 Cross Site Scripting)

    方法1:开启全局XSS过滤

    $config['global_xss_filtering'] = TRUE;
    该方法会对所有的POST/COOKIE数据进行XSS过滤,但有时我们并不需要过滤所有的输入值,如:文章内容,这些输入值中一般含有我们需要的HTML、JS等代码,这时我们并不希望它被过滤,这时我们就需要通过单独对输入进行过滤。

    方法2:对POST/COOKIE数据单独过滤

    $this->input->post('some_data', TRUE);
    
    $this->input->get('some_data', TRUE);
    
    $this->input->cookie('some_data', TRUE);

    2、CSRF(跨站请求伪造 Cross-site request forgery

    打开你的 application/config/config.php 文件,进行如下设置,即可启用 csrf ?;?

    $config['csrf_protection'] = TRUE;
    

    如果你使用 表单辅助函数, form_open() 函数将会自动地在你的表单中插入一个隐藏的csrf字段.

    例子:

    form表单页面代码:

    <?php echo form_open('http://localhost/CodeIgniter_2.2.0/');?>
    	<input type="text" name="age">
    	<input type="submit" name="submit" value="Submit">
    <?php echo form_close();?>
    在我们开启csrf后,可以查看表单的隐藏域和cookie信息是否有csrf字段信息?

    下图为系统自动添加的csrf隐藏字段:

    form-csrf

    页面cookie信息:

    csrf_cookie_name

    3、CRLF注入(HTTP响应头拆分漏洞)

    处理方法:

    /**
     * CRLF安全过滤
     * @param  string $param 
     * @return string        
     */
    function clean_crlf($param)
    {
            $param = strip_tags($param);    //清除HTML代码
            $param = str_replace('\t','',trim($param)); //清除制表符
            $param = str_replace('\r\n', '', $param);   //清除回车换行符
            $param = str_replace('\r', '', $param); //清除回车
            $param = str_replace('\n', '', $param); //清除换行
            $param = str_replace(' ', '', $param);  //清除空格
            $param = str_replace("'", '', $param);  //清除单引号
            
            return trim($param);
    }
    

    4、SQL注入

    在CI中可以使用转义查询或者封装查询来出来。

    1)、转义查询

    将数据转义以后提交到你的数据库是非常好的安全做法,CodeIgniter 提供了 3 个函数帮助你完成这个工作。

    $this->db->escape() 这个函数将会确定数据类型,以便仅对字符串类型数据进行转义。并且,它也会自动把数据用单引号括起来,所以你不必手动添加单引号,用法如下: 
    $sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
     
    $this->db->escape_str() 此函数将忽略数据类型对传入数据进行转义。更多时候你将使用上面的函数而不是这个。这个函数的使用方法是: 
    $sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";
     
    $this->db->escape_like_str() This method should be used when strings are to be used in LIKE conditions so that LIKE wildcards ('%', '_') in the string are also properly escaped. 
    $search = '20% raise';
    $sql = "SELECT id FROM table WHERE column LIKE '%".$this->db->escape_like_str($search)."%'";
    
    2)、封装查询

    封装,通过让系统为你组装各个查询语句,能够简化你的查询语法。参加下面的范例:

    $sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 
    
    $this->db->query($sql, array(3, 'live', 'Rick')); 
    查询语句中的问号会自动被查询函数中位于第二个参数位置的数组中的值所替代。
    
    使用封装查询的第二个好处是所有的值都会被自动转义,形成了较为安全的查询语句。你无需手动地去转义这些数据;控制器将会自动为你进行。
    

    5、WebShell注入

    对于这点可以通过禁用系统敏感函数等方法来避免。

    本站文章除注明转载外,均为本站原创或编译?;队魏涡问降淖?,但请务必注明出处。
    转载请注明:文章转载自 七星彩票平台
    本文标题:[PHP-CodeIgniter]程序开发过程中应该注意的5个安全问题
    IT技术书籍推荐:
    疯狂Java讲义(第3版)
    疯狂Java讲义(第3版)
    李刚 (作者)
    《疯狂Java讲义(第3版)》内容简介:《疯狂Java讲义(第3版)》是《疯狂Java讲义》的第3版,第3版保持了前两版系统、全面、讲解浅显、细致的特性,全面新增介绍了Java 8的新特性,《疯狂Java讲义(第3版)》大部分示例程序都采用Lambda表达式、流式API进行了改写,因此务必使用Java 8的JDK来编译、运行。 《疯狂Java讲义(第3版)》深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多线程编程、Java网络通信编程和Java反射机制。覆盖了java.lang、java.util、java.text、java.io和java.nio、java.sql、java.awt、javax.swing包下绝大部分类和接口?!斗杩馢ava讲义(第3版)》全面介绍了Java 8的新的接口语法、Lambda表达式、方法引用、构造器引用、函数式编程、流式编程、新的日期、时间API、并行支持、改进的类型推断、重复注解、JDBC 4.2新特性等新特性。