我正在通过'sendmail‘发送内容,其中包括一些用户提供的数据。我称它为perl,例如
open(MAIL, "| /usr/sbin/sendmail -fsomeone\@somewhere.com -t ")
print MAIL "the user content..."
close(MAIL)这里有没有什么风险,比如用户以注入代码的方式格式化他的数据?
发布于 2013-02-16 02:47:31
Perl脚本本身不会因此而面临风险(我假设“用户内容”代表变量的内容)。但是,无论谁收到邮件,都要受“用户内容...”的支配。可能是吧。
为了确保不会发生任何糟糕的事情,我们需要更多地查看您的脚本。请阅读(并确保您理解) Dawid Wheeler的"Secure programming for Linux and Unix HOWTO",同时查找安全的Perl编程(也许CERT standard是一个很好的起点)。
发布于 2013-02-16 03:09:08
这取决于命令行参数中的电子邮件地址是硬编码的,还是用户提供的。
如果命令是硬编码的,并且您使用了双引号字符串,则将内插@somewhere数组。我假设这是一个打字错误,它将被反斜杠。
如果地址可以是用户设置(open MAIL, "| ... -f$adress"),则容易受到外壳代码注入攻击:$adress = '; rm -rf * ;'
这可以通过输入验证和/或对open使用多个参数来避免
open my $MAIL, "|-", "/usr/bin/sendmail", @args or die ...;由于单独的参数更安全,因此better
的外壳解释检查
-t标志将(iirc)从用户输入中读取标题值。这不会影响脚本的安全性,但会允许用户包含假标头。用户可能会滥用你的脚本来达到他们的目的,例如垃圾邮件!最好是自己构造消息头,并限制用户只提供消息的正文。
https://stackoverflow.com/questions/14901080
复制相似问题