我想知道以下代码是否有潜在的安全风险。每当用户提交评论时,我都会在我的博客上使用此功能,它会向我发送一条短信:
mail('[email protected]', '',
"Comment posted by $name: $comment",
"From: [email protected]");
其中,
$name
和$comment
是用户输入的值,这些值实际上没有经过任何消毒。用户是否有可能在这里做任何恶意的事情?mail()文档并没有说明这一点,但是将用户输入的值直接粘贴到字符串中是错误的。有什么真正的风险吗?还是我只是多疑? 最佳答案
只要所有的用户资料都保存在邮件中,就不会有注射的风险。
然而,一旦用户可以影响邮件头,他们就可以注入额外的标题,并使用诸如垃圾邮件的任意垃圾邮件地址,或者包括完全不同的消息——包括附件。
如果在影响标题的部分中检查换行符,如果出现则拒绝,那么这就足够了。smtp标准使用crlf分隔头行,但是afaik,许多基于unix的服务器希望您只使用lf(因为这是那些系统上的本机行分隔符)。邮件中继程序在进一步向上游发送邮件时将其转换。