CI(codeigniter)如何防止sql注入 |
||
发表时间: 2012-11-30 06:52:12 By:雪洁 浏览次数:6009 | ||
通常状况下咱们只要使用AR和开启xss就能够防止了。实现方法:php 1.开启xssmysql
2.使用ARweb 也许你会问AR是什么?参考ci手册,请看下图:sql 相信你应该明白了。数据库 那么有的朋友会说为何我都用了仍是有注入呢?那么你就要分析其余方面的漏洞了。安全 因 为若是你所有使用了AR,那么你传进去的都是些“表名,条件”之类的参数,若是是sql注入的话这些参数传进去会是失效的,比 如:$this->db->get('table');若是把table换成"select * from admin"它会执行成功吗?以上只是我的想法,不正确的还请指正。xss |
如下一些建议可供参考。函数
1.不管如何在获取参数之时都建设将 xss过滤打开,好比codeigniter
其中的true就表明打开了 xsspost
2.不要直接使用$_GET等相似方式得到数据,若是这样获取数据的话将不会被xss过滤
3.CI的数据在入库以前不只不会增长转义字符,并且还会取消它
好比 Input.php 里面的这么一段
4.若是你使用 $this->db->query('YOUR QUERY HERE'); 直接查询数据库,那么你须要使用 $this->db->escape('fileld_name') 语句进行转义,这样才安全。
escape函数其实是调用的escape_str这个函数,只不过escape增长了一层对数据类型的判断,看到了没(注意:它可没判断数值类型的哟,因此说若是传入的数据是数值型的话,你得本身动手判断一下了),下面这两个东东就是进行转义的家伙了。
5.不管如何你都必需要对数值型数据手动判断,这个得你本身作,好比用个 (int)之类的强制转换。
对于使用 Active Record 操做的数据你能够偷懒不用 $this->db->escape('fileld_name') 转义了(事实上你若是你使用了反而会被多增长些引号之类的东西),由于它会帮你搞定,但数值型你仍是要本身判断。
若是你使用 Active Record 操做的数据,那么其实CI是在数据快要入数据库的时候进行转义的,因此在前面的不少地方你都看不到addslashes之类函数的身影,这样作也是有好处的你看看escape_str函数里对转义函数的判断就知道了。
8.上面我一再强调数值型数据必须得本身搞定,实际上若是你的SQL语句中对数值型加了单引号的话,应该问题不大,不过仍是建议处理一下。