编码器URI路由和安全性


Codeigniter URI routing and security

在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;
    }