假设我有url http://localhost/home
,这是页面的标准url。
当用户登录时,他们被重定向到http://localhost/admin/home
。
这个没有任何路由的URL实际上更像http://localhost/admin/panel/index/home
。
在admin是一个文件夹的情况下,面板是一个控制器,索引是一个函数,主页是一个扩展以提供视图。
理论上,我可以根据rsegment(2)是否等于"admin"来检查用户是否登录吗?或者用户可以以某种方式伪造url以破坏系统。
注意:面板控制器(位于管理文件夹内)的索引功能中有一个实际的登录检查,我想知道用户是否能够欺骗系统不运行索引功能,或者是否安全。
否,您不能依赖URI来检查用户是否已登录。您必须使用像TankAuth或IonAuth这样的身份验证库。
此外,如果您需要更多选项,可以访问"我应该如何为CodeIgniter选择身份验证库?"?。
我建议您阅读Phil Sturgeon关于CI基类的文章。类继承是维护谁可以访问控制器,谁不能访问控制器的关键。URL本身不包含任何类型的检查,但您知道它调用了一个控制器。基本前提是:
如果您创建了一个名为MY_Admin_controller的控制器,并且您的所有管理控制器都从中继承,并且您在MY_Admin-controller中执行管理检查,那么您可以保持系统干燥(不要重复自己),因为您不必检查该用户是否应该访问每个控制器。只有一次,控制器将继承该检查。
或者用户可以以某种方式伪造url以破坏系统。[?]
当然,URL是可以发送到服务器的最简单的部分,你只需要一个带有地址栏的浏览器——现在我写的时候,每个浏览器都有;)
什么?
您的路由将指向一个控制器,如果该控制器不安全,则对公共访问开放。