1

POST 情報を process.php ファイルに送信できるドメインを制限することは可能ですか。

たとえば、process.php ファイル (フォーム送信からの $_POST データを使用するファイル) の先頭に、次のようなものを追加したいと思います。

<?php
  Allowed Domains: domain.com, domain2.com
?>

また、許可されたドメインから送信されたフォームのみが投稿情報を使用します。

これは、誰かが自分のサーバーで HTML フォームを作成し、フォームを操作して process.php のあらゆる種類の抜け穴を悪用しようとするのを防ぐためです。

基本的に、複数のドメインからのフォーム送信を受け入れたい process.php ファイルがあります。

e.g. Domain.com/form.html  >>> http://MainDomain.com/process.php
or   Domain2.com/form.html >>> http://MainDomain.com/process.php

許可されたドメイン リストにあるフォームを含むすべてのページが、process.php で機能できるようにしたいと考えています。拒否されていないドメインが process.php に送信された場合、それを拒否したいと思います。

4

5 に答える 5

4

リクエストを送信するドメインはユーザー エージェントによって簡単に偽装される可能性があり、無力になるため、ドメインをチェックすることによってこれを行うことはできません。どうしようもない!

あなたが懸念しているのは、クロス サイト リクエスト フォージェリと呼ばれるものです。理想的な解決策は、ランダムに生成されたトークンを保護したいフォームに含めて、一致するトークンをセッションに保存し、一致する場合にのみ投稿を許可することだと思います。別のドメインから投稿する人は、最初にセッションでトークンを設定してから、何らかの方法でトークンを取得する必要があります..作成したフォームを表示しないと (または非常に幸運でなければ)、それを行うことはできません。

于 2012-05-25T05:43:54.767 に答える
2

次のようなものを試すことができます。

<?php

$allowedDomains = array('www.abc.com', 'www.xyz.com');

$referer = $_SERVER['HTTP_REFERER'];

$domain = parse_url($referer); //If yes, parse referrer

if(in_array( $domain['host'], $allowedDomains)) {
    //Run your code here which will process the $_POST
} else {
    echo "you are not allowed to post at this page";
    exit(); //Stop running the script
}
 ?>
于 2012-05-25T05:31:16.130 に答える
0

POST リクエストは常にドメインから来るとは限りません。それらは、インターネットに接続されたあらゆるデバイスから来る可能性があります。したがって、IP アドレスに従ってフィルタリングする必要があります。

これを行うには、ホワイトリストに登録された IP アドレスの配列を作成し、使用in_arrayして確認します。

if (in_array($_SERVER['REMOTE_ADDR'], $whitelist)) {
于 2012-05-25T05:23:06.663 に答える
0

_SERVER[HTTP_HOST]許可されたドメイン リストにあることを確認できます。この値はサーバーによって設定されるため、クライアントによってスプーフィングされることはありません。これは、コードが実行されているドメインであることに注意してください。これは、質問が求めているもののようです。リクエストが送信されたドメインのことですか?

于 2012-05-25T05:24:25.600 に答える
0
if (!in_array($_SERVER['REMOTE_ADDR'], array('ip1', 'ip2'))) die('Not allowed');
于 2012-05-25T05:26:48.943 に答える