2010-05-01 71 views
2

我在印度的一個非政府組織實習(Seva Mandir,http://sevamandir.org),並試圖解決他們的「訂閱新聞簡報」框。由於員工不是非常複雜,我們的網絡主機不是很好,我決定通過mail()將相關數據發送給出版人員,而不是將其存儲在MySQL數據庫中。消毒稍後將通過電子郵件發送的用戶輸入 - 我應該擔心什麼?

我知道最好把用戶輸入視爲惡意,並且我已經在SO論壇搜索了與轉義用戶數據相關的帖子以發送郵件消息。我知道數據應該逃脫;我應該擔心什麼以及在發送電子郵件之前清理輸入的最佳方式是什麼?

另請注意,組織的網絡主機仍然使用PHP 4,所以我不能只使用filter_var作爲字符串。我是working with them to fix the problem,但現在我不得不使用正則表達式或strip_tags或其他方法。

形成流動:
1.用戶進入主頁上的電子郵件,然後點擊提交
2.用戶輸入姓名,地址,第二頁的詳細信息(壞的可用性,我知道,但我的老闆問我)和點擊「提交」
3.通過$ _POST收集數據並將其發送到出版物編輯器(並可能向訂閱者發送確認)。

我要消毒步驟2中的電子郵件,並在第3步我感謝你的幫助的其他數據,
凱文

回答

1

您需要注意Email Header Injection攻擊。

基本上,如果你從$name$from$to剝去\n\r$subject你應該是相當安全的,但它總是最好採取白名單的做法。

+1

我使用此代碼(來自鏈接,對於將來訪問此問題的任何人): function safe($ name){str_ireplace(array(「\ r」,「\ n」,「%0a 「,」%0d「,」Content-Type:「,」bcc:「,」to:「,」cc:「),」「,$ name)); } – 2010-05-01 12:18:25

2

至於我,因爲我知道,只要你使用純文本並且只將用戶輸入的數據插入到電子郵件正文中,沒有任何可用於清理的內容。

2

如果您使用用戶輸入的電子郵件地址發送確認,請確保他們只輸入了一封電子郵件。如果您不注意,垃圾郵件發送者可以將換行符,因此任意長的Bcc:條目潛入您的郵件標題中。

請參閱email injection

+0

以及主題 – 2010-05-01 05:29:06

+0

看起來他並沒有讓用戶輸入主題,但是是的,任何註定要用於標題的內容都應該更乾淨。 – 2010-05-01 05:30:50

+1

我正在使用rfc3696來清理用戶的電子郵件輸入。所有條目(姓名,電子郵件等)都會發送到我發送給出版編輯的電子郵件的正文中。 – 2010-05-01 05:35:21

相關問題