Как запретить странице контроллера прямой доступ с URL-адреса в Codeigniter? - PullRequest
0 голосов
/ 07 мая 2020

Я использовал несколько кодов для ограничения прямого доступа к странице контроллера с 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');
            }
}
}

Ответы [ 3 ]

0 голосов
/ 07 мая 2020

Вы можете использовать HTTP_REFERER, который содержит информацию (адрес) о странице, которая направила вас на текущую страницу, если она пуста, вы можете перенаправить ее на свою 404 страницу. Кроме того, вы всегда должны проверять $_SESSION и перенаправлять, если не установлен.

if( !isset($_SERVER['HTTP_REFERER'])) {

    $this->load->helper('url');
    redirect('/page404');

}

В качестве альтернативы вы также можете использовать HTTP_X_FORWARDED_FOR, но это не поможет вам в запросе AJAX . Подробнее об этом здесь и здесь .

0 голосов
/ 08 мая 2020

Из документации

Для обеспечения максимальной безопасности и система, и любые папки приложений должны быть размещены над веб-root, чтобы они не были напрямую доступны через браузер. По умолчанию файлы .htaccess включены в каждую папку, чтобы предотвратить прямой доступ, но лучше полностью удалить их из доступа publi c, если конфигурация веб-сервера изменится или не соблюдает .htaccess.

Если вы хотите предотвратить прямой доступ к определенным c методам, вы можете попробовать

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

или

private function handle(){ //private functions cannot access by url
}
0 голосов
/ 07 мая 2020

Вы можете использовать функцию _remap() внутри вашего Контроллера, где мы можем определить, куда направлять метод.

Следующий код блокирует все вызовы методов для этого контроллера.

function _remap($method)
{
  return false;
}

См. DO C здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...