内容类型json,安全处理私人数据?

时间:2012-02-10 22:00:50

标签: ajax json codeigniter

所以我读了一篇有趣的article 前一段时间,我想从CI社区获得一些关于如何处理私人数据(如电子邮件地址,任何用户数据被视为私有的权限)的反馈。

公共数据很好,因为我可以控制最终输出,因此它不会出现安全问题。

下面是我为所有用户提取所有公共数据的方式,我真的想知道在私有数据下使用相同的方法是多么安全 管理员控制器(输出是json);

前端的Ajax请求(users.js)我喜欢为每个模块创建一个新的js文件用于开发目的,然后编译。

(function($){

    var userObj = {
        init: function(){

            if(document.getElementById(id)){
                this.populateUserData();
            }
        },
        populateUserData : function(){
            //for demonstration purposes let build output into a table
            $.ajax({
                url : BASE_PATH + 'users/get_active_users',
                dataType : 'json',
                success : function(callback){

                    if(callback.status === 'ok')
                    {
                        var output = "";
                        $.each(callback.users, function(){

                            var $this = this;
                            output += '<tr>'
                            output += '<td>'+$this.firstname+'</td>';
                            output += '<td>'+$this.lastname+'</td>';
                            output += '<td>'+$this.alias+'</td>';
                            output += '<td>'+$this.joined.date+'</td>';
                            output += '</tr>'

                        });
                        output += "</tr>";
                        $("table#id tbody").append(output);
                    }

                }
            });
        }
    }

    $(function(){
        userObj.init();
    });


})(jQuery);

html(允许构建一些虚拟数据)

<table class="bordered" id="id">
    <thead>
        <tr>
            <th>Firstname</th>
            <th>Lastname</th>
            <th>Alias</th>
            <th>Joined</th>
        </tr>
    </thead>

    <tbody>
        //rendered out via js
    </tbody>
</table>

控制器请求

if (!defined('BASEPATH'))
exit('No direct script access allowed');

class Users extends MY_Controller {

    public function __construct() {parent::__construct();}

    public function get_active_users()
    {
        if($this->input->is_ajax_request())
        {
            //grab all the active users(php-activerecord)
            $users = User::get_all_active_users();

            //render the ouput content type as json
            $this->output
                  ->set_content_type('application/json')
                  ->set_output(json_encode($users));
        }
        else
        {
            show_404();
        }
    }

Activerecord模型

if (!defined('BASEPATH'))
exit('No direct script access allowed');

class User extends ActiveRecord\Model {

     public static function get_all_active_users()
     {
         $users = self::find('all', array('conditions' => array('active=?', (int) 1)));

         if($users)
         {
             foreach($users as $user){

                $date = explode('-', date('F jS, Y - G:i', strtotime($user->created_at)));

                $ret[] = array(
                    'joined'    =>  array(
                        'date'  =>  $date[0],
                        'time'  =>  $date[1]
                    ),
                    'firstname' =>  $user->firstname,
                    'lastname'  =>  $user->lastname,
                    'alias' =>  $user->alias
                );
             }

             return array(
                'status'    =>  'ok',
                'users' =>  $ret
             );
         }
         else
         {
             //do something else
         }
     }
}

2 个答案:

答案 0 :(得分:2)

您使用的内容类型(JSON,XML等)无关紧要。如果加密,您应该只发送私人数据。即使您的控制器对某些用户是安全的,它仍然无关紧要。只有在加密后才能通过网络发送私人数据。

答案 1 :(得分:1)

就安全性而言,使用JSON与任何其他基于AJAX的实现没有什么不同。