2012-01-12 70 views
0

我已經搜索過,並發現了幾個good ideas但沒有100%解決了這個PHP郵件問題我有。有沒有辦法100%防止php郵件腳本被濫用?

注意:當我從服務器上刪除此文件時,垃圾郵件會停止。 Captcha也不是一個真正的選擇,這是一個Ajax調用,它需要很快。我不是100%確定垃圾郵件發送者是如何做到的,但任何幫助都會讓人賞心悅目。

這裏是HTML的位添加到窗體:

<input name="spam_stopper" value="DO NOT CHANGE THIS VALUE" style="display:none;"/> 

這裏是額外的代碼我在mail.php文件的頂部並沒有阻止垃圾郵件說:

if ($_POST['spam_stopper'] != 'DO NOT CHANGE THIS VALUE') { 
     echo '<h3>Incorrect use of this form!</h3>'; 
     exit; 

} 


if(!strpos($_SERVER['HTTP_REFERER'],'my-sample-domain-name.com')) 
{ 
     echo '<h3>Incorrect use of this form!</h3>'; 
     exit; 

} 
if($_SERVER['REQUEST_METHOD'] != "POST"){ 
    echo("Unauthorized attempt to access page."); 
    exit; 
} 
+0

100%不,但是一個好的驗證碼很接近。我不明白你爲什麼不能使用它。 – 2012-01-12 01:56:14

+1

你能不能詳細說明爲什麼文本驗證碼回答http://stackoverflow.com/a/3825272/76989不是你的問題的解決方案? – mmhan 2012-01-12 02:00:09

+0

我寧願不必依靠某些第三方服務。你有沒有使用uniqid();創建一次性令牌? – 2012-01-13 02:11:55

回答

1

您允許通過POST提交您自己的表單。所以,如果我一直在自己的網站上使用JavaScript提交它,使用Firebug說,那麼阻止我的是什麼?

您應該爲每個發送郵件請求附帶一個唯一有效的標記,以確保您的表單不能多次提交,即使是從您自己的網站提交。

+0

感謝您的回覆。你有任何代碼示例嗎? – 2012-01-12 02:22:32

+1

不幸的是,現在不是。您可以使用'uniqid();'生成一個隨機密鑰,並將其作爲期望的令牌存儲在會話中,並以表單的形式存儲爲要發送的令牌。一旦表單被提交一次,您就會使該令牌無效(可能會替換爲另一個令牌),因此如果垃圾郵件發送者重新提交表單,您將不會接受該表單。 – 2012-01-12 02:27:09

相關問題