2013-08-23 30 views
2

我有以下代碼:發送郵件時是否需要轉義POST?

<?php 

    $email_from = "[email protected]"; 
    $email_to = $_POST["referred_email"]; 
    $email_subject = 'test subject here'; 
    $email_message = $_POST["referred_message"]; 

    // create email headers 
    $headers = 'From: '. $email_from ."\r\n". 
    'Reply-To: '. $email_from ."\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

    if (filter_var($email_to, FILTER_VALIDATE_EMAIL)) { 
     $result = mail($email_to, $email_subject, $email_message, $headers); 
     echo 'Mail accepted for delivery '; 
    } else { 
     echo 'Mail could not be sent '; 
    } 

?> 

如果任何POST值中,無論如何escape'ed以防止用戶惡意行爲?如果是,應該使用哪種轉義方法?魔術引號?

我使用PHP 5.x.

+0

你問一個yes或no的問題或者如何做的問題? – Jared

+0

@Jazza,它的「如果是,那麼哪種方法適合這個問題」。的 – oshirowanen

+0

可能重複[這是郵件()函數頭注射安全嗎?(http://stackoverflow.com/questions/11040328/is-this-mail-function-safe-from-header-injection) –

回答

1

所有的代碼輸出應該進行轉義或以合適的方式消毒。這包括以電子郵件形式發送的輸出。

當談到編寫郵件標題,你必須非常警惕,以保護自己免受注入攻擊,可能導致您的郵件被髮送到任意地址,並用任意內容。

最終,這要歸結爲確保您的電子郵件地址有效且不包含任何換行字符等,並且您當前的FILTER_VALIDATE_EMAIL代碼是處理此問題的良好開端。

但是因爲它的立場,你的程序基本上允許用戶發送他們喜歡他們喜歡的任何收件人的任何內容。他們只有硬編碼部分是你的'從'地址。這聽起來像是一個公開的邀請,它被用來發送垃圾郵件,無論您有任何逃避行爲。

如果這是你實際的代碼,我勸你還是重新考慮它在做什麼!

一旦你這樣做了,我會建議你下載一個phpMailer class的副本,並用它來發送PHP中的郵件而不是內置的mail()函數。它使用起來更容易,功能更多,最重要的是,它爲你做了所有驗證,防範和逃避,所以你不必再擔心它。

希望有所幫助。

+0

因此,phpMailer無法阻止捲髮腳本和/或機器人從代碼中發送垃圾郵件? – oshirowanen

+0

@oshirowanen - 您的原始代碼需要用戶輸入,並將其發送到任何地址的用戶想要的東西,而對消息或誰被髮送到內容的任何限制。如果你這樣做,沒有什麼可以阻止它被用於垃圾郵件。 phpMailer會讓你更容易地在一個更受限制的系統中防止未授權的垃圾郵件,但是你的系統是不受限制的,垃圾郵件是不可避免的。 – Spudley

0

將您從用戶獲得的任何東西都轉義出來。它可能是任何東西。

1

是的,他們都需要轉義或至少驗證。

例如,您可以email_to包含數千個地址 - 這可能是確定您的使用情況,但我對此表示懷疑。

此外,POST參數正在進入的郵件標題,這是一個危險的操作,因爲它可以操縱郵件服務器做完全不同的事情比預期的。

0

首先,多數人混淆單詞「逃逸」的含義。

他們把它作爲某種「使數據神奇安全,無數據性質的物質或它的目的地」。大部分時間都是以向其他角色添加一些字符的形式考慮的。

當然,這樣的逃避永遠不存在。

在現實中,數據必須格式化驗證取決於性質是目的地。而且任何「轉義」可能只有部分這樣的格式化,甚至根本不用。

在這個特殊情況下,數據被添加到郵件標題郵件正文

集管很容易發生主噴射 - 因此,它們必須進行檢查,以不包含換行符。 你是正確的檢查電子郵件。
只要你有硬編碼的主題,它顯然不需要驗證。但是,如果您從表單中獲得它,它也必須進行驗證。確保其中沒有換行符。

郵件正文認爲安全,只要您發送純文本消息。

因此,您的代碼目前看起來很安全。

然而,這樣的郵件形式開放地址的想法,可以作爲一個垃圾郵件門 - 任何人,實際上,可以從你的名義發送電子郵件給任何人。

相關問題