3

外部の訪問者からの直接の要求を検出/防止/転送したいと考えています。一部のスクリプトは、jQuery ダイアログにのみ表示する必要があります。

私の現在のコード:

<script>
$(".dialog").click(function() {
    // some code for validation
    // ...
    $("#dialog").load(this.href).dialog();
});
</script>    

<a href="http://domain.de/path/to/form/" class="dialog">Open me in a dialog</a>

それは問題なく動作しますが、このリンクを新しいタブ/ウィンドウで開くと (たとえば、マウスの中央ボタンをクリックして)、フォームが「裸」で表示されます。

この場合、ユーザーを参照されたページに転送したいと思います。

if ($requester != $server) {
    header ("Location: " . $_SERVER["HTTP_REFERER"];
}

$requester と $server を検出するにはどうすればよいですか? すべてのスクリプトやディレクトリ全体をブロックしたくありません!

前もって感謝します!

4

4 に答える 4

4

@Dharmanが提案したものに追加するには、jQueryは呼び出されたすべてのajaxリクエストにヘッダーを追加するため、グローバル配列HTTP_X_REQUESTED_WITHでこのヘッダーを簡単にチェックできます。$_SERVER

例:

if($_SERVER['HTTP_REFERER']!=$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"])
{
    // check if the request is ajax 
    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
          $_SERVER['HTTP_X_REQUESTED_WITH']  == 'XMLHttpRequest' ){
          // ajax content loading
    }

    header ("Location: index.php");
}
于 2012-12-15T20:12:03.713 に答える
2
if($_SERVER['HTTP_REFERER']!=$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"])
{
    header ("Location: index.php");
}
于 2012-12-15T19:48:06.187 に答える
0

はい、$_SERVER['REMOTE_ADDR'] を使用して、リクエスト送信者の IP アドレスのリモート アドレスを確認できます。次のようにします。

if( $_SERVER['REMOTE_ADDR'] == $your_Server_IP_Address)
     echo 'From same server';
else
     echo 'from different server';

別の考えられる解決策は、nonceを使用することです。

  • フォームを表示するとき、ランダムな値を含む非表示の入力フィールドをフォームに入れます

  • 同時に、そのランダムな値をユーザーに対応するセッションに保存します。

  • フォームが送信されたら、隠しフィールドの値がセッションに保存されているものと同じであることを確認してください。

これらの 2 つの値が同じでない場合、提出されたデータの使用を拒否します。

注 : この考え方は、CSRF との戦いを支援するためによく使用され、一部のフレームワーク (Zend Framework など) の「フォーム」コンポーネントに統合されています。

于 2012-12-15T19:50:53.383 に答える