如何限制控制器页面从Codeigniter中的url直接访问



我已经使用了几个代码来限制从url直接访问控制器页面,但这并没有发生。控制器页面中的以下代码不阻止直接访问url。有什么合适的方法可以防止从url直接访问吗?

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Cont extends CI_Controller
{
public function __construct()
{
parent ::__construct();
$this->load->model('test');
}
public function handle($function){
if($function=='abcd'){
$this->load->view('testpage');
}
}
}

您可以使用HTTP_REFERER,它保存有关将您引用到当前页面的页面的信息(地址(,如果它为空,您可以将其重定向到404页面。此外,您应该始终检查$_SESSION,如果未设置则重定向

if( !isset($_SERVER['HTTP_REFERER'])) {
$this->load->helper('url');
redirect('/page404');
}

或者,您也可以使用HTTP_X_FORWARDED_FOR,但它对AJAX请求没有帮助。在这里和这里阅读更多关于它的信息。

您可以在控制器中使用_remap()函数,我们可以在其中定义方法的路由位置。

以下代码阻止对该控制器的所有方法调用。

function _remap($method)
{
return false;
}

请参阅DOC此处的

来自文档

为了获得最佳安全性,系统和任何应用程序文件夹都应该放在web根目录之上,这样就不能通过浏览器直接访问它们。默认情况下,.htaccess文件包含在每个文件夹中,以帮助防止直接访问,但最好将其完全从公共访问中删除,以防web服务器配置更改或不遵守.htaccess.

如果你想阻止直接访问特定的方法,那么你可以尝试

public function _handle(){ //adding _ before the method name
}

private function handle(){ //private functions cannot access by url
}

相关内容

  • 没有找到相关文章