# laravel admin-03-验证码和防XSS攻击

# 一.验证码

有个现成的库:https://github.com/Iamtong/laravel-admin-login-check-safe 直接拿来用吧。

安装一下

composer require iamtong/laravel-admin-login-check-safe

php artisan vendor:publish --provider=Encore\LoginCheckSafe\LoginCheckSafeServiceProvider

根据需求修改配置文件config/admin.php,主要是extensions字段

 'login-check-safe' => [
            'enable' => true,
            'login-error-num' => 5,//登录允许密码错误的次数
            'login-error-limit-sec' => 600,//达到错误次数后锁定的时间(单位秒)
            'password-expired' => 90*86400,//密码过期时间 90 天(单位秒)
            'password-expired-except-name' => ['admin'],//排除账号不验证密码过期
            'auto-out-sec' => 1800,//多久没活跃后,自动退出账号(单位秒),设置为0时,表示不开启此功能
            'limit-one-login' => true,//是否开启 限制同时间一个账号仅限一人登录
            'username-rules' => 'regex:/^[a-zA-Z0-9]+$/i|between:3,40',//用户名除了唯一性和必须填写之外的所有规则
            'username-rules-msg' => [
                'regex' => '用户名必须以大小写字母和数字组成',
            ],//对应的提示方法
            'password-strong' => 1,// 【大写字母 小写字母 数字 特殊字符】 密码强度 必须使用其中的几种。
            'password-length' => '6,40',//密码长度范围 10,40 10到40位;
            'db' => [
                //密码修改纪录表
                'password_log_table' => 'admin_password_log',
                'password_log_model' =>Encore\LoginCheckSafe\Models\PasswordLogModel::class,
                //登录日志表
                'login_log_table' => 'admin_login_log',
                'login_log_model' =>Encore\LoginCheckSafe\Models\LoginLogModel::class,
            ]
        ],

由于会增加一些字段和表,要执行一下数据库变更

php artisan migrate

增加到中间件中

route.middleware里面添加 Encore\LoginCheckSafe\Http\Middleware\AdminCheck::class

'middleware' => ['web', 'admin',Encore\LoginCheckSafe\Http\Middleware\AdminCheck::class]

注意事项

  1. 如果数据库的变更文件没发布到database目录下,则去vendor下找到对应的文件,手动复制到database下,再执行变更。

  2. 中文文件lang也是,手动复制下到resource对应的zh-cn下。对于要变更的,则在zh-cn对应的文件中添加或修改即可。

# 二.防XSS攻击

laravel有个现成的库purifier,拿来直接用。

composer require mews/purifier

安装完成后,在配置文件config/app.phpproviders中注册HTMLPurifier服务提供者:

'providers' => [
          
          Mews\Purifier\PurifierServiceProvider::class,
      ]

然后在aliases中注册Purifier门面:

'aliases' => [
          // ...
          'Purifier' => Mews\Purifier\Facades\Purifier::class,
      ]

发布配置文件到config目录:

php artisan vendor:publish

在config目录下会生成一个purifier.php文件。

这个配置文件里注意下,'AutoFormat.AutoParagraph' => true, 选项改为false,不然会在过滤字段中增加<p></p>字符

之后在需要做防xss攻击的地方直接调用它即可,比如:

$form->saving(function (Form $form){
    $form->title = \Purifier::clean($form->title);
    $form->uri = \Purifier::clean($form->uri );
});