【发布时间】:2014-09-22 06:35:44
【问题描述】:
我正在开发一个移动应用程序,它必须访问外部 web 应用程序(PHP + Codeigniter)来管理 ajax 查询的操作。
所以这样一来,就有问题了。如果有人看到使用的 url,可以删除行,或修改数据库中的用户信息。所以我想在这个系统中避免这种情况:
成功登录后,我会这样做:
// getToken : https://stackoverflow.com/a/13733588/2154101
$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
会话是加密的,我也将它们存储在数据库中。 你认为这种方法行得通吗?我错过了什么重要的东西吗?
【问题讨论】:
-
应用程序是远程访问数据库还是远程访问某种隐藏数据库的web应用程序?巨大的差异。如果是 Web 应用程序,该应用程序的身份验证和授权机制是什么?它如何识别发出请求的用户?显然,任何请求修改他不允许修改的数据的用户都应该只收到一条错误消息,实际上不能修改数据。从代码中并不清楚应用程序是如何排列的或如何跟踪身份验证/授权。
-
我已经修改了问题。请再读一遍。谢谢! :)
-
访问 Web 服务的移动应用程序听起来像是使用 OAuth 之类的东西进行授权的一个非常好的用例。最好使用经过行业测试的标准,而不是实施自己的标准。
标签: php codeigniter optimization cross-domain