托管我的应用程序时关于phpMailer安全性的两个问题



目前我使用phpMailer以表单子菜单的形式向我的Gmail帐户发送电子邮件。我用来发送电子邮件的代码类似于下面的代码:

###################
/* sendeng email */
###################
use phpMailerPHPMailerPHPMailer;
if ($sehat === true) {
require_once "../phpMailer/PHPMailer.php";
require_once "../phpMailer/SMTP.php";
require_once "../phpMailer/Exception.php";
$mail = new PHPMailer();
//smtp settings
$mail->isSMTP();
$mail->Host = "smtp.gmail.com";
$mail->SMTPAuth = true;
$mail->Username = "myGmail@gmail.com";
$mail->Password = 'myPassword';
$mail->Port = 465;
$mail->SMTPSecure = "ssl";
//email settings
$mail->isHTML(true);
$mail->setFrom($commEmail, $commName);
$mail->addAddress("myGmail@gmail.com");
$mail->Subject = ("$commEmail ($commTopic)");
$mail->Body = "<div style='text-align:right; direction:rtl;'>" . nl2br(strip_tags($commMess)) . "</div>";
// $mail->Body = nl2br(strip_tags($commMess));
// $mail->AltBody = nl2br(strip_tags($commMess));
// $mail->Body = $commMess;
/* for other language messages */
$mail->CharSet = 'UTF-8';
if($mail->send()){
$status = "success";
$response = "Email is sent!";
}
else
{
$status = "failed";
$response = "Something is wrong: <br>" . $mail->ErrorInfo;
}
exit(json_encode(array("status" => $status, "response" => $response)));
}

我发送电子邮件没有任何问题。但是我的第一个问题是我在代码中使用$mail->Password = 'myPassword';的位置。实际上,我正在本地主机(WAMPSERVER(上编写和调试代码,并且在代码中使用了我的真实密码,而不是myPassword。但在完成应用程序后,我将把它托管到一个真正的服务器上(部署我的应用程序(。我的问题是,使用此代码,主机提供商是否可以访问我的Gmail密码?如果是这样,解决方案是什么?这是phpMailer中的错误还是我错了?

第二个问题是,当我想将表单数据发送到我的Gmail帐户时,我必须将我的Gmail设置更改为"较低安全性">在此localhost版本中。如果我部署了我的应用程序,并且它可以在线使用,我必须再次这样做(降低Gmail的安全性(,或者有更好的方法?因为现在,当我将Gmail安全设置返回到正常状态时,phpMailer不会发送数据。

我的问题是,有了这个代码,主机提供商可以访问我的Gmail密码吗?

是。

如果是,解决方案是什么?

不要使用您不信任的主机。

通常,您需要能够信任主机,但有一个步骤可以帮助避免这一切:使用XOAUTH2进行身份验证。

使用此机制,您不必在服务器上存储真实的ID和密码;您需要在一次性操作中使用它们来获得仅限于gmail操作的令牌。PHPMailer提供了一些代码示例,以及一个可以用来获取身份验证令牌的实用程序脚本,以及一篇帮助您配置它的wiki文章(尽管它可以使用更新;欢迎投稿(。但是,请注意,使用OAuth通常是一种复杂而令人不快的体验,它包含了许多潜在的混乱方法。在这个用例中,它确实提供了一个安全增强,因为这意味着你不必把你真正的谷歌凭据放在那里。

一个谨慎的托管提供商将允许你加密虚拟机的磁盘映像,这意味着他们无法从系统管理程序读取你的数据,如果他们也不能通过SSH访问你的实例,你的数据应该得到很好的保护。

相关内容

  • 没有找到相关文章

最新更新