2016-11-08 11 views
0

私のPHPページにフォームがあります。このページでは、ウィンドウポップアップを開いています。このポップアップにはいくつかのフィールドがあります。私たちはフォームに記入して提出します。フォームを送信した後、私たちはユーザーにメールを送信します。基本的には、ユーザーは彼にメールを送信して友人にウェブサイトの参照を与えることができる形式です。 残念ながら、誰かが私のウェブサイトをハックし、私のPHPスクリプトを使ってメールを送信しています。 したがって、私は外部のサーバーからのPHPスクリプトのアクセスを制限したいと思います。 アクセスを制限するにはどうすればよいですか。 私はいくつかの選択肢を試しましたが、成功しませんでした。異なるドメインからのデータの投稿を防止するPHP

+1

現在メールをどのように送信しているかを示すコードがないと、あまり言い表せません。また、あなたのコードは脆弱ですか、あるいはあなたがサーバー上のメールに使っているものは何ですか?ポストタイトルだけで、CSRFトークンが役立ちます。 –

+0

あなたの機能が電子メールを送信することに基づいているため、あなたが何かできることはないと思います!おそらくあなたは自分のIP(100%安全ではない)でユーザを制限することができますが、あなたのスクリプトを使用する人々を減速させることができます! – Soheyl

+1

クロスドメイン要求を防ぐには、ポストリクエストごとにcsrfトークンを追加する必要があります。詳細はこちらhttp://stackoverflow.com/a/31683058/4584028 –

答えて

1

これを軽減する方法は2つありますが、これを完全に停止することはできません。

使用HTTPリファラー:あなたはHTTP_REFERER値を信頼することはできません

$referer = parse_url($_SERVER['HTTP_REFERER']); 
$allowedDomain = 'yourdomain.com'; 

if ($referer['host'] == $allowedDomain){ 
    //Process your mail script here. 
} 

注意。簡単になりすますことができます。

使用トークン:

ランダムなトークンを生成し、同様にフォームのPOST中にそれを置く:

if (!isset($_POST['submit'])){ 
    $_SESSION['random_code'] = rand(0, 1000000); 
}else{ 
    if ($_POST['random_code'] == $_SESSION['random_code']){ 
     //process your mail script here 

     //reissue session code 
     $_SESSION['random_code'] = rand(0, 1000000); 
    } 
} 
<input type='hidden' name="random_code" value="<?php echo $_SESSION['random_code'];?>"> 

保存したセッションで、このランダムコードを。フォームが提出されたら、提出されたrandom_code値をセッションに保存されたコードと一致させます。両方が同じ場合は、メールスクリプトを処理します。

このように、攻撃者はまずページを開いてランダムコードを取得してフォームを送信する必要があります。この攻撃を止めることはできませんが、それは間違いなくプロセスを遅くします。

関連する問題