2011-12-30 68 views
0

某位客戶最近從主機收到垃圾郵件警告。這是怎麼聯繫我們的腳本容易/被操縱?

我想我已經把問題指向了一個老聯繫我們的形式。前端採用簡單的html,後端採用簡單的PHP腳本。

if ($_POST['submit'] == "Send"){ 

    //START SEND MAIL SCRIPT 
    $mail = $_POST['email']; 
    $to = "[email protected]"; 
    $subject = "Message from Website Contact Us Form"; 
    $headers = "From: Contact us Form <[email protected]>"; 
    $message = "Message from Contact Us Form\n\n"; 
    $message .= "\nName: " . $_POST['contactname']; 
    $message .= "\nEmail: " . $_POST['contactemail']; 
    $message .= "\nTelephone: " . $_POST['contactphone']; 
    $message .= "\n\n\nMessage:\n" . $_POST['contactmessage']; 


     if(mail($to,$subject,$message,$headers)) { 

       header('Location: http://www.website.co.uk/contact-us/?action=success'); 

     }else{ 

       header('Location: http://www.webisite.co.uk/contact-us/?action=fail');       

     }//END IF MAIL 

}//END SCRIPT 

我所知道的補救措施來解決它,如消毒後瓦爾得當,使用驗證碼,使用隱藏的「蜜罐」的空白領域,JS技巧等等等等(我也很喜歡這個劇本的樣子太http://www.alt-php-faq.com/local/115/

但爲了幫助我理解發生了什麼,我想知道這個腳本是如何被操縱的。一個外國腳本發佈變量,但他們如何發送電子郵件給除 '[email protected]'以外的任何人,或者如果他們強制抄送/密送字段爲什麼我不會收到所有垃圾郵件?

感謝

+1

如果您確實在使用Gmail地址,則可能會阻止垃圾郵件。 – DampeS8N 2011-12-30 14:25:33

+0

你在哪裏使用'$ mail'變量?這似乎是最容易發生注入攻擊的一種。 – bummzack 2011-12-30 14:42:16

回答

1

像這樣的線$message .= "\nName: " . $_POST['contactname'];可能是危險。 如果設置了$_POST['contactname']='MegaSteve4 \r\nCc: [email protected], [email protected]';,則有2個用戶會收到垃圾郵件。

請仔細閱讀。它附加更多的標題。在這種情況下,Cc。我不確定Cc是否是原始郵件標題。但我希望你明白這一點。

+0

因此,我們如何才能使郵件數據僅包含一個電子郵件地址以避免這種情況?一個正則表達式可能? – ppp 2011-12-30 14:40:21

+2

是的,你可以使用** RegEx **驗證。 :) – 2011-12-30 14:44:21

+0

這個腳本(http://www.alt-php-faq.com/local/115/)使用了一個foreach循環 - 可能比正則表達式要慢兩三毫秒,但可以正常工作。還有一些其他很好的技巧,其中表單是從同一個域提交的,還有一個用戶代理集等等。這些東西中的一些可能可能被機器人欺騙,但它更難...... – megaSteve4 2011-12-30 16:13:39

1

你不是在做後期的數據進行轉義處理。這意味着這種形式易受到injection attacks的影響。

我不能告訴你他們是怎麼做到的,但這可能是發生了什麼事。