我正在开发一个移动应用程序,它必须访问外部webapp(PHP + Codeigniter)来管理ajax查询的操作.
所以通过这种方式,存在一个问题.如果有人看到使用的URL,可以删除行,或从数据库修改用户的信息.所以我想在这个系统中没有这个:
成功登录后,我会这样做:
// getToken : /sf/ask/17360801/ $this->session->set_userdata('private_token', getToken(50)); $public_token = getToken(50); $this->session->set_userdata('secure_token', md5("$private_token:$public_token")); $data['token'] = $public_token; // some stuff ... // send $data in JSON
然后客户端将在下一个查询中使用公共令牌,我将在服务器上执行此操作:
$public_token = $this->input->post('token'); $data['token'] = get_public_token($public_token); // some stuff ... // send $data in JSON
get_public_token
使用此代码的助手位于何处:
public get_public_token($public_token) { $last_secure_token = $this->session->userdata('secure_token'); $private_token = $this->session->userdata('private_token'); $actual_token = md5("$private_token:$public_token"); if ($actual_token === $last_secure_token) { $public_token = getToken(50); $this->session->set_data('private_token', getToken(50)); $this->session->set_data('secure_token', md5("$private_token:$public_token")); return $public_token; } else { // you are cheating me ... $this->session->sess_destroy(); redirect('/'); } }
因此,只有此会话的用户才能修改数据库的数据.
我只是想在这里解释同样的问题:https://stackoverflow.com/a/17371101/2154101
会话已加密,我也将它们存储在数据库中.你认为这种方法会好吗?我错过了重要的事吗?