我正在尝试使用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'
然后它按预期工作。
可能是什么原因以及什么样的漏洞 会出现mime讯息吗?
答案 0 :(得分:0)
您不能随意使用任何标题,这是禁止的。
如Documentation中所述,
例外email.errors.HeaderParseError
...当尝试创建一个看起来包含嵌入式标头的标头时(也就是说,应该有一个没有前导空格并且看起来像标头的续行)。
为什么危险并且应该妥善处理?
首先,您可以阅读this,它提供了一个简单示例,说明如何进行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:
。