Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以将PHP mail()中的标头插入参数?_Php_Security - Fatal编程技术网

是否可以将PHP mail()中的标头插入参数?

是否可以将PHP mail()中的标头插入参数?,php,security,Php,Security,我想知道这个密码是否安全 $mail = mail($_POST['email'], 'foo' , 'foo'); RIPS报告它不安全。它肯定不安全,容易受到邮件注入的攻击。你为什么这么问 SMTP协议非常简单,非常接近HTTP协议。 它包含标题,每个标题仅通过换行符与另一个标题分开。 因此,$_POST['email']等于 foo@example.com To: bar@example.com 您的脚本将发送2封邮件。 几乎每一个论点都是如此,包括主题 此外,与HTTP一样,头与正文

我想知道这个密码是否安全

$mail = mail($_POST['email'], 'foo' , 'foo');

RIPS报告它不安全。

它肯定不安全,容易受到邮件注入的攻击。你为什么这么问

SMTP协议非常简单,非常接近HTTP协议。
它包含标题,每个标题仅通过换行符与另一个标题分开。 因此,$_POST['email']等于

foo@example.com
To: bar@example.com
您的脚本将发送2封邮件。
几乎每一个论点都是如此,包括主题

此外,与HTTP一样,头与正文之间用空行分隔。
因此,攻击者也可以重写主体


为了防止出现这种情况,只需检查用户输入的字段(当然,正文除外)中的
\n
\r
字符。

它肯定不安全,容易受到邮件注入的攻击。你为什么这么问

SMTP协议非常简单,非常接近HTTP协议。
它包含标题,每个标题仅通过换行符与另一个标题分开。 因此,$_POST['email']等于

foo@example.com
To: bar@example.com
您的脚本将发送2封邮件。
几乎每一个论点都是如此,包括主题

此外,与HTTP一样,头与正文之间用空行分隔。
因此,攻击者也可以重写主体


为了防止出现这种情况,只需检查用户输入的字段(当然,正文除外)中的
\n
\r
字符。

恶意用户不能插入标题,但他可以传递一长串逗号分隔的电子邮件地址,并使用您的服务发送垃圾邮件


在将用户输入数据用于函数(或任何您需要的)之前,应始终对其进行检查

恶意用户无法插入邮件头,但他可以传递一长串逗号分隔的电子邮件地址,并使用您的服务进行垃圾邮件处理


在将用户输入数据用于函数(或任何您需要的)之前,应始终对其进行检查

正如其他人已经说过的,在您还没有开始考虑标头注入攻击之前,使用
邮件($\u POST['email'])
是不安全的,原因有很多

允许POST变量用作“收件人”地址是不安全的,因为您的表单可以用于向任何人发送邮件。即使垃圾邮件发送者无法将其邮件写入正文,它仍然可以通过用数千条邮件炸开邮箱来攻击某人

其次,您还没有向我们展示您的
$\u POST['email']
变量是否已消毒。在将其用作电子邮件地址之前,您应该检查它是否是有效的电子邮件地址。否则,是的,它可能会被用来给你的邮递员带来麻烦。幸运的是,PHP内置了电子邮件验证功能:

$sanitisedEmail = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if(!$sanitisedEmail) {die('your email address is invalid');}
但除此之外,如果您想避免头部注入攻击,您应该完全避免使用PHP的
mail()
函数。内置的
mail()
功能非常基本,有许多弱点可被黑客利用。您最好使用一个高质量的包装器库,例如

phpMailer的主要目的是让用PHP发送电子邮件更简单——如果需要开始添加标题或附件,那么使用标准
mail()
函数所需的PHP代码可能会变得非常混乱;phpMailer使这一切变得非常简单

但除此之外,使用它也会使你的代码更安全;phpMailer为您执行所有必要的输入消毒;作为其标准流程的一部分,它验证电子邮件地址并去除恶意标头攻击


希望这会有所帮助。

正如其他人已经说过的,在您开始考虑标头注入攻击之前,使用
邮件($\u POST['email'])
是不安全的,原因有很多

允许POST变量用作“收件人”地址是不安全的,因为您的表单可以用于向任何人发送邮件。即使垃圾邮件发送者无法将其邮件写入正文,它仍然可以通过用数千条邮件炸开邮箱来攻击某人

其次,您还没有向我们展示您的
$\u POST['email']
变量是否已消毒。在将其用作电子邮件地址之前,您应该检查它是否是有效的电子邮件地址。否则,是的,它可能会被用来给你的邮递员带来麻烦。幸运的是,PHP内置了电子邮件验证功能:

$sanitisedEmail = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if(!$sanitisedEmail) {die('your email address is invalid');}
但除此之外,如果您想避免头部注入攻击,您应该完全避免使用PHP的
mail()
函数。内置的
mail()
功能非常基本,有许多弱点可被黑客利用。您最好使用一个高质量的包装器库,例如

phpMailer的主要目的是让用PHP发送电子邮件更简单——如果需要开始添加标题或附件,那么使用标准
mail()
函数所需的PHP代码可能会变得非常混乱;phpMailer使这一切变得非常简单

但除此之外,使用它也会使你的代码更安全;phpMailer为您执行所有必要的输入消毒;作为其标准流程的一部分,它验证电子邮件地址并去除恶意标头攻击


希望能有所帮助。

您基本上可以从服务器向任何人发送邮件。垃圾邮件发送者可能会滥用它。在任何内容中添加$u帖子都不是明智的选择,请始终清理您的输入!引用安全建议时,请链接到它或引用它。它永远不会只包含“这是不安全的”,而是对问题所在以及出现问题的语言版本的准确描述。@Pekka웃 - 在这种情况下不会有一个建议链接,因为RIPS是一个安全扫描应用程序,您可以根据自己的代码运行——请参阅@SDC ah,这很公平。您基本上可以从服务器向任何人发送邮件。它可能被垃圾邮件发送者滥用。在任何内容中添加$u帖子都不是一个好主意