• 迎丰收 晒丰收 庆丰收 2018-10-15
  • “捂脸表情”被注册成商标?申请人不认为商标侵权 2018-10-15
  • 战巡南海、绕岛巡航…空军有“飞出去”的主心骨 2018-10-14
  • 幼儿园要求家长写一万字读后感:不能这样玩家长|幼儿园|家长-教育时讯 2018-10-13
  • 中国故宫文物展在希腊举行 2018-10-13
  • 車·晓 第26期 車企官方降价真相幾何? 2018-10-12
  • 宝沃总裁杨嵩:曾和奔驰宝马同水平 已不能同日而语 2018-10-11
  • 新时代党员干部要有更大的担当和作为 2018-10-10
  • “2018-雷霆”专项行动破获百余起台湾间谍案 2018-10-09
  • 朝韩首脑今起在平壤会晤 “金文会”将聚焦三大议题 2018-10-09
  • 2018顺义啤酒节--北京频道--人民网 2018-10-08
  • 台湾遭遇的“断交潮”有无化解之道? 2018-10-08
  • 习近平会见爱沙尼亚总统卡柳莱德 2018-10-08
  • 中国空间站研制建设正有序开展 坚持和平利用 2018-10-07
  • Idlib to further divide Ankara and Moscow 2018-10-06
  • [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新特性等新特性。