- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 smtplib 的非常基本(几乎完全是 from the docs )的用法。从 Bottle FormsDict 检索主题和消息使用 request.forms.get()
,然后使用此代码通过电子邮件发送出去。
msg = MIMEText(message)
msg['Subject'] = subject
msg['From'] = config['from_email']
msg['To'] = config['to_email']
s = smtplib.SMTP('localhost')
s.sendmail(config['from_email'], [config['to_email']], msg.as_string())
s.quit()
我习惯于清理 XSS 等用户输入(通常只是依靠 Jinja2 的魔力)。在这种情况下,我应该做什么,我只通过电子邮件发送用户的输入?会存在什么样的漏洞?
最佳答案
我现在正试图弄清楚自己,我可以告诉你的一件事是,你绝对应该使用 email.header.Header检测 header 注入(inject):
from email.header import Header
>>> Header('Test').encode()
'Test'
>>> Header('Test\n').encode()
'Test'
>>> Header('Test\nTest2').encode()
'Test\nTest2'
>>> Header('Test\nFrom').encode()
'Test\nFrom'
>>> Header('Test\nFrom:').encode()
(...)
HeaderParseError: header value appears to contain an embedded header: 'Test\nFrom:'
另请检查this回答,我想我同意,如果输入有潜在危险,你应该拒绝它,因为这可能意味着有人试图做一些粗略的事情。
编辑:
事实证明,MIME 消息会自行验证 header ,即使您不使用 email.header.Header
,并且还很好地对正文进行了编码:
>>> msg = MIMEText('something\r\nsomething2', 'plain', 'UTF-8')
>>> msg.as_string()
'MIME-Version: 1.0\nContent-Type: text/plain; charset="utf-8"\nContent-Transfer-Encoding: base64\n\nc29tZXRoaW5nDQpzb21ldGhpbmcy\n'
>>> msg['From'] = 'me@localhost\r\nSubject: injected subject'
>>> msg.as_string()
(...)
HeaderParseError: header value appears to contain an embedded header: 'me@localhost\nSubject: injected subject'
您可以在Is there any injection vulnerability in the body of an email?找到更多可能的注入(inject)。 .
所以我想说,您不必做任何特别的事情来保持安全,因为:
subject
的值来添加 header 。 <CRLF>.<CRLF>
序列terminates message body但这不是问题,因为 MIME 类用 LF 替换 CRLF:
>>> MIMEText('something\r\n.\r\nsomething2', 'plain', _charset='iso-8859-1').as_string()
'Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\nsomething\n.\nsomething2'
关于Python smtplib 和清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25404563/
我正在使用 smtplib 的非常基本(几乎完全是 from the docs )的用法。从 Bottle FormsDict 检索主题和消息使用 request.forms.get(),然后使用此代
最近我正在研究用于 python 的 smtplib smtp 客户端库,但我找不到任何对支持它的 smtp 服务器的 PIPELINING 协议(protocol)的引用。有什么我想念的吗?可能还没
我正在使用 smtplib 相当频繁地发送邮件。我使用自己的 SMTP 服务器作为中继。问题是每次发出连接时 smtplib.SMTP(...) 整个过程都会被阻塞。我是 python(v3) 的新手
我最近写了一个脚本,如果我想监控的网站使用 smtplib 发生了变化,它会向我发送一封电子邮件。该程序有效,我收到了电子邮件,但是当我查看已发送的电子邮件时(因为我正在从同一帐户向自己发送电子邮件)
我编写了一个守护进程来监视目录中的文件,并在任何文件发生更改时发送电子邮件。我使用 bb-freeze 将其编译为 Windows .exe。我注意到让它运行几天后,它占用的内存空间越来越多。 我用了
我正在试验电子邮件 python 脚本,想知道在编写基于 python 的电子邮件脚本时,与登录网页时通过 Internet 发送凭据相比,它是否更不安全?在下面的脚本中,user 和 pass 是否
我想通过代理发送电子邮件。 我目前的实现如下: 我通过身份验证连接到 smtp 服务器。成功登录后,我会发送一封电子邮件。它工作正常,但当我查看电子邮件标题时,我可以看到我的主机名。我想改为通过代理隧
我想使用 smtplib 使用 cron 作业每天发送一次状态邮件。 邮件发送效果很好,但是发送时间和日期似乎总是我阅读邮件时的时间和日期,而不是发送邮件时的时间和日期。这可能是 6 小时后。 我还没
我无法弄清楚为什么我的 python 代码无法在同一封电子邮件中附加 HTML 表格(第 2 部分)和普通句子(第 1 部分)。我尝试注释一行 message.attach(part2) ,反之亦然。
因之前不清楚而进行了编辑。 如果我在不处于 while 循环的情况下运行下面的代码,它会完美运行。一旦我将其放入 while 循环中(我需要将其作为较大脚本的一部分),它就会由于某种原因丢失邮件的主题
每当我尝试在 Python 解释器中导入 smtplib 时,都会收到此错误: ImportError: cannot import name fix_eols 我该如何解决这个问题? 编辑:这是完整
出于某种原因,当我尝试发送电子邮件时,当我传递字符串 msg 时,没有出现消息 这是我使用的代码: import smtplib server = smtplib.SMTP('smtp.gmail.c
我有一个激活邮件发送脚本如下。 #!/usr/bin/python __author__ = 'Amyth Arora (***@gmail.com)' import smtplib import s
我有一个通过邮件服务器发送电子邮件的脚本。该脚本仅在我首先在交互式窗口中调用 import smtplib 时才有效。否则,我会收到以下错误: ImportError: No module named
我想从 python 脚本发送电子邮件。但是,当我尝试运行 server.login 时,我收到以下错误:smtplib.SMTPAuthenticationError: (535, '5.7.0 (
因此,在 Python 解释器中,我这样做(并且只这样做): >>> import smtplib >>> s=smtplib.SMTP("localhost") 这就是我得到的: Traceback
我试图构建一个可以通过 Gmail 发送电子邮件的 python 脚本。 当我尝试连接到 Gmail 服务器时,出现错误 Errno 10013。 这就是我想要做的: gmail_message =
我有以下工作代码可以从 GMail 帐户发送邮件: mailServer = smtplib.SMTP(SMTP_SERVER, SMTP_PORT) mailServer.ehlo() mailSe
html = html_table + html_table1 import smtplib from email.mime.multipart import MIMEMultipart from e
我正在尝试将带有缩进格式的词典列表发送到我的电子邮件。目前,这是我根据我的代码收到的电子邮件: [{ 'post_id': '3524', 'text': '🥕\n.
我是一名优秀的程序员,十分优秀!