php 防simplexml_load_string()漏洞攻击
1.在使用simplexml_load_string前放置libxml_disable_entity_loader(true);//禁止引用外部xml实体
2.过滤xml标签内容
1.在使用simplexml_load_string前放置libxml_disable_entity_loader(true);//禁止引用外部xml实体
2.过滤xml标签内容
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
class Email
{
protected $config;
public function __construct()
{
// 以下配置可根据需要存储在数据库或在项目配置文件中存放
$this->config = [
// smtp 服务地址
'host' => 'smtp.qq.com',
// 邮箱的账号
'username' => '你的邮箱',
// 邮箱授权密码
'password' => '邮箱授权码',
// 端口
'port' => '465', // 建议使用465默认
// 发件人名称
'sender' => 'fenmy',
];
}
/**
* 发送邮件
* @param string $email 收件人邮箱
* @param string $subject 邮件主题
* @param string $body 邮件内容
* @param array $vars 邮件内容变量
* @param array $attachments 附件
* @return array
*/
public function sendEmail(string $email, string $subject, string $body, array $vars = [], array $attachments = [])
{
$mail = new PHPMailer(true);
try {
// 邮箱配置
$config = $this->config;
/**** 服务器设置 ****/
// 使用SMTP服务
$mail->isSMTP();
// smtp服务地址
$mail->Host = $config['host'];
// 设置是否进行权限校验
$mail->SMTPAuth = true;
// SMTP账号
$mail->Username = $config['username'];
// SMTP密码(客户端授权密码,注意不是登录密码)
$mail->Password = $config['password'];
// 使用ssl协议
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
// 端口设置
$mail->Port = $config['port'];
// 字符集设置,防止中文乱码
$mail->CharSet = 'utf-8';
/**** 发件人 ****/
// 设置邮箱的来源,与邮箱的账号一致,名称随意
$mail->setFrom($config['username'], $config['sender']);
// 设置回复地址,一般与来源保持一致
$mail->addReplyTo($config['username'], $config['sender']);
/**** 收件人 ****/
// 设置收件人的邮箱地址
$mail->addAddress($email);
/**** 附件 ****/
foreach ($attachments as $key => $val) {
$path = $key;
$name = '';
if (is_numeric($key)) {
$path = $val;
} else {
$name = $val;
}
// 添加附件
$mail->addAttachment($path, $name);
}
/**** 发送内容 ****/
// 是否为 HTML 格式
$mail->isHTML(true);
// 主题
$mail->Subject = $subject;
// 正文
foreach ($vars as $key => $val) {
$search = '{' . $key . '}';
$body = str_replace($search, (string) $val, $body);
}
$mail->Body = $body;
// 发送邮件
$mail->send();
return ['code' => 200, 'msg' => '发送成功', 'data' => null];
} catch (Exception $e) {
return ['code' => 500, 'msg' => $e->getMessage(), 'data' => null];
}
}
}
$res = (new Email())->sendEmail(
'收件人邮箱',
'邮箱验证提醒',
'尊敬的用户,您的验证码为:{code},请勿泄漏于他人!',
['code' => rand(100000, 999999)]
);
var_dump($res);
composer require phpmailer/phpmailer