2

まず第一に、これはStack Overflowでの私の最初の投稿であり、私が取り組んでいる個人的なプロジェクトのためにPHP/MySqlを学ぼうとしています。たくさんの質問をするためにここで多くの時間を費やすと思いますので、些細なことだと思うほど多くの質問をする場合はご容赦ください。

質問に移ります。

サーバーサイドスクリプトを処理するためにajaxとPHPの組み合わせを使用しています。私がやりたいのは、入力を受け入れ、何かを処理し、出力を提供するPHPモジュールを用意することです。関数によく似ています。

私が頭を悩ませようとしているのは、PHPをページではなく関数のようなブラックボックスプロセスモジュールのようにするにはどうすればよいかということです。

例として、AJAXを使用してlogin.phpページにリクエストを送信するlogin.htmlページがあります。login.phpは入力を受け入れ、入力を処理し、jsonオブジェクトを出力します。これは、成功したかどうかを呼び出しページに通知し、成功しなかった場合は、途中で発生したエラーを一覧表示します。

ここに問題があります。ユーザーがlogin.phpに直接アクセスできるようにしたくありません。実際、login.phpを一般に公開したくありません。login.phpは単なるプロセスであるため、そこにアクセスすると空白になります。これは、ユーザーに空白のページを表示させるための良い方法ではないようです。

login.phpをパブリックフォルダーの外に置くことを考えましたが、これはajaxがそれに対してもリクエストを行うことができないことを意味します。

これを回避するために、login.htmlをlogin.php内に配置します。それはそれ自体にリクエストを行い、リクエストのタイプに基づいて、phpはさまざまなことを実行します。これにより、「空白ページ」の問題が解決されます。しかし、ページのように機能させることなくスタンドアロンのPHPモジュールを作成する方法があるかどうか疑問に思わずにはいられません。

これについての考えは大歓迎です。ありがとう。

4

2 に答える 2

1

AJAXがページをリクエストできる場合、すべてのユーザーがブラウザでページに移動できます。彼らが詮索しない限り、彼らはPHPページで起こらないので、あなたは本当にこれを心配するべきではありません。リクエストがAJAXによって行われたことを少し確認したい場合は、ヘッダーを探すX-Requested-Withことができますが、すべてのブラウザーがこれを送信するわけではないため、これが常に機能するとは限りません。

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    // Ajax Request
} else {
    // Not AJAX, redirect to login page
    header('Location: login.html');
    exit();
}

これをすべてのブラウザで確実に機能させるには、クライアント側で次のヘッダーを設定する必要があります。

xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");

ただし、誰でもTamperdataのようなプログラムでヘッダーを送信できるため、これはまだ完全な証拠ではありませんが、これは怠惰なスヌープを防ぐのに十分なはずです。繰り返しになりますが、ユーザーがこのページを表示できるようにすることは(スヌープした場合)大きな問題にはなりません。セキュリティの脆弱性が生じることはなく、ユーザーがページにつまずく可能性が低いlogin.php場合は、にリダイレクトされlogin.htmlます。

于 2012-07-27T00:39:11.100 に答える
1

AJAXリクエストを送信するものはすべて、AJAXの性質上、直接ナビゲートすることもできます。あなたができることは、そのページが存在することをユーザーに示すことだけではありません。

includeを使用して、あるPHPファイルに別のPHPファイルを呼び出させるオプションがあります。このようにして、login.phpへのリクエストに基づいて動作を変更させることができますが、ログイン処理は、一般にアクセスできないファイルによって実際に処理されます。

if($_POST) {include '../login-handler.php'; die();}
于 2012-07-27T00:42:44.177 に答える