2

URL を介してコントローラー機能へのアクセスを制限できる方法があるかどうかを知りたいです。しかし、サイト内の私のリンクから彼らに電話をかけたい. たとえば、自分のサイトにコントローラー関数を指すリンクがある場合:

<a href='test/function'>Call me</a>

しかし、上記の URL をブラウザーのアドレス バーに配置したときに、コントローラー関数が呼び出されるのは望ましくありません。誰でもこれを手伝ってもらえますか?

4

5 に答える 5

3

これは不可能です。Apache とその結果として CodeIgniter は、手動で入力されたブラウザー URL または訪問したハイパーリンクを介して、PHP スクリプトへの外部世界へのアクセスを許可しています。どちらのシナリオもまったく同じ方法で Web アプリケーションに接続しますが、接続方法が異なるだけです。

以下を使用して、CodeIgniter スクリプトのみへのアクセスを許可する (つまり、パブリック ユーザーがコントローラーにアクセスできないようにする) ことができます。

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

マーカスが指摘したように、次のようなものを使用できます。

if (!$_SERVER['HTTP_REFERER']) $this->redirect('/home');

しかし、それはしばしば非常に矛盾しています。

于 2013-01-19T13:30:06.960 に答える
2

解決策: このコードをすべてのコントローラー メソッドの先頭に配置します。

if (defined('BASEPATH') && !$this->input->is_ajax_request()) 
    exit('No direct script access allowed'); 
于 2016-11-10T10:57:00.013 に答える
0

コメントで述べたように、AJAXを介してリンクをロードする場合は次のようになります。

あなたのマークアップ:

<a href="test/function" data-key="abc">

あなたのjquery:

$('a').on('click',function(){
    var data = $(this).data('key');
    $('#result').load($(this).attr("href") + '?key=' + data);
});

次に、CodeIgniterコントローラーで、キーが存在し、一致するかどうかを確認します( "abc")。そうでない場合は、403などを返します。

また、もちろん$_SERVER['HTTP_REFERER']、ユーザーがどこから来たのかを確認し(ただし、これは非常に簡単になりすまします)、自分のサイトからGETリクエストが行われた場合にのみアクセスを許可することもできます。

于 2013-01-19T13:39:39.477 に答える
0
 In view: `<input type="hidden" value="1" name="back">`

 put inside your function in Controller: 


if(($this->input->post('back'))==1)
              {
                echo " what you want do here";
              }
              else
              {
                 $this->load->view('template',array('welcome_page')) ;
              }

フォーム検証は、条件の場合にこの中に入れます..これは間違いなく機能します..

于 2016-11-23T04:50:04.400 に答える
0

これは本当に役に立ちました。これも追加チェックとして追加しました

$allowed_host = gethostname();
$host = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
if(substr($host, 0 - strlen($allowed_host)) != $allowed_host)
  $this->redirect('/home');`
于 2013-12-20T17:16:12.723 に答える