我正在向网页添加反馈表,并想知道通过“邮件”命令简单地过滤 TEXTAREA 元素的内容(解码后)以向页面的维护者发送电子邮件是否安全。
我查看了手册页,看不到滥用它的方法,特别是只要“邮件”不在交互模式下运行,波浪号转义被禁用,“。” 单独一行不会终止消息正文。
但是我还应该注意其他危险吗?
该命令类似于:
echo "$MESSAGE_BODY" | mail [email protected] -s 'Website feedback'
我正在向网页添加反馈表,并想知道通过“邮件”命令简单地过滤 TEXTAREA 元素的内容(解码后)以向页面的维护者发送电子邮件是否安全。
我查看了手册页,看不到滥用它的方法,特别是只要“邮件”不在交互模式下运行,波浪号转义被禁用,“。” 单独一行不会终止消息正文。
但是我还应该注意其他危险吗?
该命令类似于:
echo "$MESSAGE_BODY" | mail [email protected] -s 'Website feedback'
是的,这很危险。邮件消息可以包含以波浪号 ~ 字符开头的行,邮件程序将其视为转义序列。这包括外壳转义和添加新收件人。(嗯,垃圾邮件!)
看看
看看我的意思。
你问这个很好 - 许多人只是想完成工作,因此在“啊……没关系”的基础上引入了一大堆漏洞。
话虽如此,我认为做你正在做的事情很好——但只要你使用过滤器——而不是你自己编写的过滤器,而是一个开源的(因此开放给公众监督)、成熟的过滤器(已经存在了一段时间)。我还要确保过滤器去除任何可能嵌套一些讨厌的 XSS 攻击的 HTML 标记和内容。
使用一个开源库,你可以在其中找到一个基本上就是我想要的。(永远不要使用任何封闭的安全应用程序——它们都注定要失败——我可以在那条评论上签名)。
我会尽量避免从 CGI 调用任何命令。我确信您使用的任何语言都应该有一个库来发送电子邮件。
这是一个巨大的安全漏洞。这是编写安全 CGI 代码的资源。
只是为了给您一个想法,以下是您需要注意的具有特殊用途的字符列表:
使用其他人已经实现和调试过的库。电子邮件表格以前做过,不要重新发明轮子!
您使用哪种 CGI?大多数 cgi 语言/框架都支持发送邮件。它们总是比调用外部命令好。好吧,PHP 的 mail() 确实很糟糕,但仍然比调用外部命令更好。
从安全角度来看,建议使用 SMTP 发送邮件(例如到 localhost)。
不要使用邮件,这是一个面向行的最终用户程序。使用大多数 MTA 中包含的“sendmail”命令(但不要使用那段被诅咒的 shblip,即 sendmail 程序)。它旨在以编程方式使用。例如,我知道 postfix 和 qmail 包含它。
附录:只要您知道自己在做什么,从 CGI 调用程序不一定“危险”。特别是,就像在这种情况下一样,确保您调用的程序不是为最终用户准备的,或者不是在交互模式下调用的(大多数这样的程序都允许生成一个 shell!)