2010-08-21 114 views
1

在php上創建了一個小的聯繫表單,它獲得了$_POST變量和郵件給我。PHP安全郵件變量

<form action="/myscript.php" method="post"> 

小塊代碼:

$subject = trim($_POST['subject']); 
$comment = trim($_POST['comment']); 
mail($email, $subject, $comment, $headers); 

$email是我的郵件地址,$headers是平常。

沒有過濾主題和評論。 它可能是我的網站潛在的安全漏洞嗎?

我的郵件放在gmail.com上。 當我在瀏覽器中打開Gmail接口時,我的網站的未過濾郵件是否會傷害到我?

我應該如何過濾所有變量?也許我希望echo其中一些在我的網站發送電子郵件後。 (比如'Thanks,%name%!')

回答

1

不,這並不危險。 Gmail不信任您收到的電子郵件,否則每個垃圾郵件發送者都可能會對您造成危害。

但是,至少檢查一下變量是否存在以及它們的長度是否超過最大值是一種很好的做法。

編輯舊版本的PHP可能會受到電子郵件注入攻擊的攻擊,如here所述。它不會危害您的網站,您的電子郵件客戶端應該能夠安全地處理惡意電子郵件,但可能會將您變成垃圾郵件中繼。

新版本不會出現此漏洞,因爲所有控制字符(低於0x20)都是sanitized。你可以像這樣做相同的衛生設施:

$subject = filter_input(INPUT_POST, "subject", FILTER_UNSAFE_RAW, 
    FILTER_FLAG_STRIP_LOW); 
if ($subject === false) { /* subject not given/not scalar; handle it */ } 
+0

對於這兩個問題都適用? – James 2010-08-21 19:31:38

+0

@工作是的,兩者兼而有之。 – Artefacto 2010-08-21 19:32:01

+0

郵件字段的最大長度是多少? – James 2010-08-21 19:36:02

1

是的,這是危險的,易受攻擊稱爲郵件注入。
雖然它不能傷害你的網站,但可以被垃圾郵件發送者使用。

$subject = "Site feedback"; 
$comment = trim($_POST['subject'])."\n\n".trim($_POST['comment']); 
mail($email, $subject, $comment); 

這一個將是安全的。

+0

爲什麼'trim'在這裏幫助你? – Artefacto 2010-08-21 19:42:03

+0

@藝術裝飾不幫助注射大聲笑 – 2010-08-21 19:45:39

+0

對不起,-1。這根本不會幫助你。 – Artefacto 2010-08-21 20:01:49

1

可能你可以檢查http://swiftmailer.org/一個php郵件組件庫,以便比較你的解決方案。 Swiftmailer是symfony-project.org等框架的郵件解決方案。

純文本不是一個網站的問題,附件是,但評論和主題不會在您的服務器中產生任何問題。關於Gmail,它有自己的電子郵件驗證,因此,病毒或類似的電子郵件將很難通過他們的分析。 rgds。