PHP邮件脚本的安全问题,没有用户输入字段

时间:2013-11-22 11:07:15

标签: php security email

我有一个php文件,每次加载时都会向我发送一封电子邮件。没有用户输入字段,它不是联系表单或任何其他表单。它只是一个重定向的php文件,我希望每次加载时都会收到电子邮件。我在其中包含了以下php邮件功能,并想知道它是否存在任何安全问题(因为没有用户输入字段,我希望我可以这样离开它):

   $to      = 'myemail@gmail.com';
$subject = 'the file is loaded';
$message = 'the file loaded, check it out';
$headers = 'From: webmaster@mywebsite.com' . "\r\n" .
    'Reply-To: webmaster@mywebsite.com' . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

mail($to, $subject, $message, $headers);

2 个答案:

答案 0 :(得分:0)

对于具有您完全控制的静态内容的电子邮件,可能存在哪些安全问题。无论如何,我相信如果你只是在本地文件或数据库中跟踪文件加载会更好。祝好运! :P

答案 1 :(得分:0)

从功能角度来看,这是非常安全的。您的电子邮件无法更改。

然而,如果一个人决定哄骗你,他可以在很短的时间内向你发送大量的电子邮件。您的主机或ISP会对此感到生气。

您可以通过排队来避免这种情况。获取数据库或文件,保存调用页面的次数以及发送最后一封电子邮件的时间。

如果脚本被调用并且最后发送的电子邮件是x分钟前,您可以向自己发送一条消息,表明该页面已被调用x次。然后,您只需清空数据库并重新开始计数:)


这是一个启动(尚未测试)的脚本

// Duration in seconds
$duration = 60 * 15;

$now = time();
$file = 'tmp.json';
$json = json_decode(file_get_contents($file));

array_push($json['calls'], $now);

// It appears it's time to send the content
if($json['sent'] + $duration > $now) {
    $to      = 'myemail@gmail.com';
    $subject = 'the file is loaded';
    $headers = 'From: webmaster@mywebsite.com' . "\r\n" .
        'Reply-To: webmaster@mywebsite.com' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

    $message = '';

    // Generate message
    foreach($json['calls'] as $c) {
        $message .= sprintf("File loaded at: %s\r\n", date('r', $c));
    }

    if(mail($to, $subject, $message, $headers)) {
        // Reset the file but ONLY if the mail was sent
        file_put_contents($file, json_encode(array(
            'calls' => array(),
            'sent'  => $now
        )));
    }
} else {
    file_put_contents($file, json_encode($json));
}