用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4700|回复: 8
收起左侧

[安全] 求考虑安全问题的数据库操作经典例子

[复制链接]
发表于 2010-1-5 13:51:32 | 显示全部楼层 |阅读模式
在接收任何数据到你的程序之前,不管是表单提交的 POST 数据、COOKIE 数据、URI 数据、XML-RPC 数据、还是 SERVER 数组中的数据,我们都推荐你实践下面的三个步骤:

1.过滤不良数据.
2.验证数据以确保符合正确的类型, 长度, 大小等. (有时这一步骤也可取代第一步骤)
3.在提交数据到你的数据库之前将其转换.


遵循如上所述的例子,我貌似没有看到过。
希望各位大侠们,能够提供之。
 楼主| 发表于 2010-1-5 14:14:45 | 显示全部楼层
笔记下:
使用AR操作数据库的时候 会自动地对用户输入的数据进行类型转义。。
即自动实现类似如下的功能$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
所以不需要再考虑这个。
发表于 2010-1-5 14:58:02 | 显示全部楼层
XSS 过滤直接使用 CI 提供的方法就可以了。
 楼主| 发表于 2010-1-5 15:05:29 | 显示全部楼层
那我有个问题不解。
对数据库的操作 我如果使用AR的话
我先对数据进行验证 然后再进行xss过滤 最后操作数据库($this->db->get();$this->db->insert(),$this->db->update(),$this->db->delete()) 这样的流程就可以了吧?
 楼主| 发表于 2010-1-5 15:58:45 | 显示全部楼层
插入数据操作总结:
1.使用xss过滤
例如:
$data = array('entry_id'=> $this->input->xss_clean($this->input->post('entry_id')),
                                              'body' => $this->input->xss_clean($this->input->post('body')),
                                                          'author' => $this->input->xss_clean($this->input->post('author'))
                                                          ) ;
2.使用AR类进行操作 (所有的值已经被自动转换为安全查询,所以不需要进行转义)
$this->db->insert('comments',$data)
发表于 2010-1-5 16:01:20 | 显示全部楼层
基本上进行 xss 过滤就可以了。
 楼主| 发表于 2010-1-5 17:07:03 | 显示全部楼层
非常感谢。附上自己下午的成果。。。http://codeigniter.org.cn/forums ... tid=4447&extra=
发表于 2010-1-17 19:59:28 | 显示全部楼层
回复 5# hdusec
   $this->input->xss_clean($this->input->post('body'));不需要这么复杂。
可以这样:
$this->input->post('some_data', TRUE);



第二个参数是可选的,如果想让取得的数据经过跨站脚本过滤(XSS Filtering),把第二个参数设为TRUE。
 楼主| 发表于 2010-1-18 11:29:06 | 显示全部楼层
谢谢哈!!  已查看文档,清楚了。

本版积分规则