haoshaoyee 发表于 2012-9-17 23:05:06

关于flash上传csrf保护的一个解决办法

本帖最后由 haoshaoyee 于 2012-9-17 23:06 编辑

查了众多资料 理解为
php把浏览器当作一客户端,把flash当作是另一客户端 CI会为其也创建一个随机保护值
那么我们在浏览器客户端赋给flash的保护值就与CI为其创建的保护值不相等,于是拒绝所有post

不会改ci的底层 于是就用了个简单的办法 判断是否为flash上传 是则不保护 不是则保护.
但这样改不知会对flash上传的安全性有多大影响.

改 core/Input.php 646行
if ($this->_enable_csrf == TRUE)

if ($this->_enable_csrf == TRUE && !$this->post('close_csrf'))

flash上传时附加一个名为close_csrf 的post参数

流年、 发表于 2012-12-7 01:25:47

哈哈! 感谢,刚刚搜到这篇文章我的问题也解决了 ! 谢谢

qingxin 发表于 2012-12-13 10:16:42

另一种办法是废除ci的csrf,自己在扩展控制器(MY_controller)的构造函数或者_remap函数里自己构建,主要参考csrf过程,里面有自定义的加密函数和输出函数,控制器属性data会在输出视图时被输出。

public function _remap($method = NULL, $params = array())
        {
                $go = TRUE;

                //自建跨站请求防御以取代CI的并不方便也不十分安全的跨站请求防御
                if(empty($_COOKIE['token']))
                {
                        $uniqid = uniqid();
                        setcookie('token',$uniqid);
                }
                else
                {
                        $uniqid = $_COOKIE['token'];
                }

                if(!empty($_POST))
                {
                        $token = $this->input->get_post('token');
                        if($token === saltedhash($_COOKIE['token'],$token))
                        {
                                $go = TRUE;
                                if(!is_ajax())
                                {
                                        //$uniqid = uniqid();
                                        setcookie('token',uniqid());
                                }
                        }
                        else
                        {
                                $go = FALSE;
                                show_error('Your request is not allowed.');
                        }
                }
                $this->data['token'] = saltedhash($uniqid);

                if($go)
                {
                        if (!empty($method) && method_exists($this, $method)) call_user_func_array(array($this, $method), $params);
                       
                        $this->__output();
                }
        }

qingxin 发表于 2012-12-13 10:20:28

靠,回复不能收藏,我新开贴去
页: [1]
查看完整版本: 关于flash上传csrf保护的一个解决办法