[英]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.