0

私のサーバーでは、Symfony2 アプリケーションが実行されています。

さらに、サーバーには、いくつかの PHP クラスが置かれるフォルダーがあります。これらのクラスは、ユーティリティの目的で使用され、http 呼び出しで使用されます (特に、私の Web サイトのページから AJAX を使用して)。たとえば、PHP クラスはファイルのアップロードに使用されます (次の図を参照)。

php ユーティリティ クラスの現在の使用のスキーマ

http 呼び出しは、私の Web ページの 1 つで実行する必要があります (すべて問題ありません) が、外部の Web サイトから実行することもできます。後者の http リクエストは、悪意のあるものであると想定されています。

したがって、そのようなコードをphpクラスに挿入して、ユーザーがログインしているかどうかを確認する必要があります(特定の役割を持っていない場合でも)。Symfony2を使用していることを考慮して、それを行う方法は?

PS: コントロールは、Symfony2 コントローラーではなく、一般的な PHP クラスで行う必要があることを強調します!

前もって感謝します。

4

2 に答える 2

2

一番いい方法はGoogleに聞くことだと思います。2つの可能性があります。Symfony2 を使用するか、スクリプトを使用できます。最善の方法は、Symfony アプリケーションにファイルアップロードを実装してこれを呼び出すことです。

Securityに関する SF2 ドキュメントの完全なセクションがあります。よく読んでから実装してください。

認証がなければ、SESSION でユーザー情報を保護することはできません。しかし、Symfony にログインしている場合は、次のように SESSION 変数を設定できます。

$_SESSION['loggedOn'] = true;

次に、セッションが設定されているかどうかを fileupload スクリプトで尋ねます。

session_start;
if($_SESSION['loggedOn'] == false) {
    exit();
}
于 2012-08-28T07:49:31.150 に答える
0

Stonyによって提案されたようにSession変数を設定するなど、一般的なPHPソリューションを使用しようとしましたが、Symfony2セッションに欠けているものがあります。変数がSymfony2コントローラーで定義されていても、$_SESSIONオブジェクトにはそれが含まれていないようです。

したがって、私はStonyによって提案されたように、「コントローラーの方法」に従おうとしました。

これが私がしたことです。http呼び出しを介してPHPクラス「FileUpload.php」を実行する必要があるとします。PHPファイルには、使用するクラスFileUploadがあります。私の場合、呼び出しはAJAXを介して行われました。したがって、私は次のようなことをする必要があります:

<script>
  load('http://path/to/fileupload.php')
<script>

ここload()で、はAJAX呼び出し用の架空のJavascript関数です。

もちろん、最初のアイデアは、FileUpload.phpにすべてのコントロールを含めることでした。できません!だから何?

単純に、Symfony2でコントローラーを作成します。次に、アクションを作成します。例えば

public function fileUploadAction(){
    //control if user is logged and has required role as usual with Symfony2
    $uploader = new \Path\To\\FileUpload();
    //do something with object uploader

    exit(0);//Symfony will not require an answer, but you did what you needed
}

もちろん、Webページのスクリプトを更新する必要があります。

<script>
  load("{{path('route_to_fileUploadAction')}}")
<script>

FileUpload.phpを安全なフォルダーに置くことを忘れないでください。

于 2012-08-28T14:02:59.673 に答える