繁体   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