這可能是一個noob問題,對不起。通過電子郵件發送POST的print_r沒有任何安全漏洞,在那裏?
這種代碼中沒有任何安全漏洞嗎?我一直在使用它,但是想確保我不會漏洞。
$body = print_r($_POST, true);
mail($to, $subject, $body, $headers, "-f $from_address");
這可能是一個noob問題,對不起。通過電子郵件發送POST的print_r沒有任何安全漏洞,在那裏?
這種代碼中沒有任何安全漏洞嗎?我一直在使用它,但是想確保我不會漏洞。
$body = print_r($_POST, true);
mail($to, $subject, $body, $headers, "-f $from_address");
不,這不安全。
但是當你需要其他糟糕的設置系統讓黑客通過時,你可能會放棄它。
詳細
「正常」的電子郵件安全問題是衆所周知的:總是獸醫任何進入頭部,防止頭部注射;最簡單的方法是刪除新的行字符(或拒絕是否有人發送:意味着某人的黑客行爲/測試)。這不是你提出的問題。
但是,在過去使用SMTP注入攻擊時,可以通過明智地使用句點(句點)和%0D%0A(CRLF)和MAIL TO:命令來終止SMTP消息並啓動一個新消息。 SMTP郵件以自己的句號結束:相當容易添加。看這裏:http://projects.webappsec.org/w/page/13246948/Mail%20Command%20Injection和https://www.owasp.org/index.php/Testing_for_IMAP/SMTP_Injection_(OTG-INPVAL-012)
有防禦措施:例如SMTP服務器可以配置爲不允許鏈接,並將全部視爲一體。所以HOPEFULLY你是安全的。但可以肯定的是,看看你是否可以剝離。並將%0D%0A(CRLF)轉換爲%0A以幫助消除風險(但請檢查最後一個:您的結果可能會有所不同並且可能不合適)。
爲了完整性,還有XSS注入的可能性(即包括鏈接),但除非您遵循鏈接,否則這是無害的。 Web客戶端可能會自動將純文本鏈接轉換爲可點擊的鏈接:我無法想象如何利用這種鏈接,但始終有一種方法:如果您擔心鏈接,請仔細閱讀鏈接。
只有當您發送多部分電子郵件並且用戶/黑客知道邊界分隔符時,纔可以在現有電子郵件中添加附件(如一個答案中的建議)所以隨機生成邊界分隔符或發送純文本(而不是多部分)以避免這種情況。
有可能運行JavaScript的能力,如果你有完全正確的情況。與附件一樣,如果您發送多部分消息,則可以使用邊界分隔符創建HTML部分;所以隨機更改你的邊界分隔符並檢查HTML標籤。如果您使用的是允許以純文本形式發送javascript的Web客戶端運行,那麼您需要一個新的Web客戶端(我真的懷疑有一個)。
那些是什麼,我能想到的快。
簡單的解決方案:使用庫。衆所周知的庫旨在避免這些問題。您也可以通過查看源代碼及其應對方式來獲得更多建議。 Swiftmailer是我目前選擇的圖書館。
正如評論中所顯示的那樣,您永遠不會相信任何用戶輸入。漏洞的一些可能性可能是:
謝謝,但我不一定會考慮這些漏洞。在代碼範圍內似乎允許的所有內容。我更感興趣的是像潛在的緩衝區溢出和劫持郵件功能等。我知道很多人都表示永遠不會信任用戶的輸入,但我明白,但是我正在尋找純粹的技術安全漏洞。由於沒有人還沒有提供更好的,我可能會獎勵你的賞金。 – Serhiy
另一個安全方面是Cross Site Request Forgery。攻擊者可能會嵌入一個圖像,導致您的郵件閱讀器或瀏覽器向另一個站點發出請求。您可以在[Wikipedia](https://en.wikipedia.org/wiki/Cross-site_request_forgery)找到有關此漏洞的更多詳細信息。 – bratkartoffel
您應該小心謹慎地使用$headers
和$from_address
,因爲這些攻擊可以輕鬆地用於Email Injection攻擊。
此外,如果您的print_r
包含HTML的變量,您將通過電子郵件發送一個帶有HTML的字符串。儘管電子郵件可能以純文本的形式發送,但郵件客戶端仍然需要解釋和顯示這些字符串。因此,你不能簡單地假設沒有安全漏洞。
如果$ _POST包含密碼字段,然後通過電子郵件發送它發送明文信息....有一個安全漏洞 –
嗯,我會說不,因爲你是它無論如何轉換爲字符串。 –
那麼,'print_r()'不會執行任何類型的轉義,也不會'mail()',所以是的,我猜想有人創意可能會在其中注入一些奇怪的字符,並導致某些*你不打算。我敢肯定,在某些(大多數)設置中可能會欺騙郵件隊列來查看兩個單獨的項目,這意味着您可以設置一個新的To:報頭並將其用作垃圾郵件網關。 **不要信任輸入。** – IMSoP