在codeigniter或restful结构中,页面可以通过URI路由到
例如,如果我想查看id:1的项目列表,那么我只需要创建一个这样的路径:
domain.com/item/view/1
在控制器中
function view() {
$id = $this->uri->segment(3);
//database get data and return view...
}
这应该是实现restful结构的标准方法。但是,当在成员系统中,并且项目ID依赖于用户时,我该如何保护链接?
这样其他用户就不能强行尝试不同的ID并读取其他成员项。
一种方法是比较每个函数中的user_id和item_id。但是如果系统很大,这意味着我需要在每个函数中进行比较,那就是大量的编码和检查。
有没有更智能的方法来减少开销/编码?
谢谢
答案 0 :(得分:2)
无法保护网址。有人可以简单地更改URL中的数字并获取不同的数据。如果ID是敏感的,您不希望通过URL传递信息。
一种选择是加密在URL中传递的ID(例如:29可以加密,因此它显示为' S84jG483dJd')。
也可以使用代码点火器会话库或甚至闪存数据(为一个请求存储)传递ID。这样,如果ID是敏感的,那么任何人改变它们的可能性都会很小(在CI中启用会话cookie加密以获得更高的安全性)。
但是,如果信息是敏感信息,我将始终在获取数据库并向用户显示之前进行检查。为您的用户编写最糟糕的意图始终是一个好习惯!
答案 1 :(得分:1)
在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;
}