在codeigniter或restful结构中,页面可以通过URI
路由到例如,如果我想查看id: 1的项目列表,那么我只需要创建这样的路径:
domain.com/item/view/1
And in controller
function view() {
$id = $this->uri->segment(3);
//database get data and return view...
}
这应该是实现restful结构的标准方式。但是,当在成员系统中,并且项目id依赖于用户时,我如何保护链接?
这样其他用户就不能强行尝试不同的ID并读取其他成员项。
一种方法是比较每个函数中的user_id和item_id。但是如果系统很大,那就意味着我需要对每个函数进行比较,这需要大量的编码和检查。
有没有更聪明的方法来减少代码开销?
谢谢
没有办法保护URL。有人可以简单地改变URL中的数字并获取不同的数据。如果ID是敏感的,则不希望通过URL传递信息。
一种选择是加密URL中传递的ID(例如:29可以加密,因此它显示为' s84jg483dd ')。
ID也可以通过使用代码点火器会话库传递,甚至可以使用flash数据(为一个请求存储)。这样,如果ID是敏感的,任何人修改它们的可能性就很小(在CI中启用会话cookie加密以提高安全性)。
但是,如果信息如此敏感,我总是在获取数据库并显示给用户之前进行检查。在编写代码时考虑到用户最坏的意图总是好的做法!
在domain.com/item/view/1
中,始终代表base_url/controller/Method
所以如果你创建控制器(item
),那么函数(view
)。
class Item extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function view($id)
{
//so in $id it will assign the 3rd value to it.
$new_id = $id;
echo $new_id;
}