簡體   English   中英

email.errors.HeaderParseError:標頭值似乎包含嵌入式標頭:

[英]email.errors.HeaderParseError: header value appears to contain an embedded header:

我正在嘗試使用Office api使用肥皂消息來還原郵件,但是它為某些郵件給出了“標頭值似乎包含嵌入式標頭”錯誤。 例如。

msg = MIMEMultipart()
msg['From'] = 'me@locmsglhost\r\nSubject: injected subject'
msg.as_string()

發生錯誤,因為email.errors.HeaderParseError:標頭值似乎包含嵌入式標頭:“ me @ locmsglhost \\ nSubject:注入的主題”

但是如果我將msg ['From']更改為

'hello\r man: man'
'tya: Hello'
'push@#$\r\nPus'
'Hello \n\r Pushpa: World'
'@\r\nhello : World'

然后它按預期工作。

可能是什么原因?啞劇消息中將存在哪些漏洞?

您不能隨意使用任何標題,這是被禁止的。

文檔中所述

email.errors.HeaderParseError異常

...當試圖創建一個似乎包含嵌入式標頭的標頭時(也就是說,應該有一個沒有前導空格並且看起來像標頭的續行)。


為什么它很危險並且應該妥善處理?

首先,您可能讀過這篇文章 ,它提供了一個簡單的示例如何進行SMTP標頭注入攻擊。

您可能會問怎么做? 我的意思是您不讓任何人編輯您的后端嗎?

想象一下,對於您的應用程序,用戶可能會輸入一些字段,例如'message'

msg['message'] = 'abc' #Entered by user

沒關系,但是如果

msg['message'] = 'abc\r\nreplyTo:attacker@hello.com'
#or
msg['message'] = 'abc\r\nTo:attacker@hello.com'

攻擊者可以輕松地覆蓋您的電子郵件,例如發送垃圾郵件。 這就是為什么它為您做檢查。


您甚至可以通過以下方式檢查標題是否安全

email.header.Header('string')

讓我們看一下python電子郵件庫如何進行檢查。

搜索源代碼Lib/email/header.py

在ln50-52中:

# Find a header embedded in a putative header value.  Used to check for
# header injection attack.
_embedded_header = re.compile(r'\n[^ \t]+:')

您可以嘗試一下,您提供的所有示例都可以通過,但您聲明的示例除外。

由於電子郵件標頭結構始終為\\n(key_without_space): \\nhello :因此\\nhello :通過,但未傳遞\\nhello:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM