所以我读了一篇有趣的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
}
}
}
答案 0 :(得分:2)
您使用的内容类型(JSON,XML等)无关紧要。如果加密,您应该只发送私人数据。即使您的控制器对某些用户是安全的,它仍然无关紧要。只有在加密后才能通过网络发送私人数据。
答案 1 :(得分:1)
就安全性而言,使用JSON与任何其他基于AJAX的实现没有什么不同。