有个现成的库: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]
注意事项
如果数据库的变更文件没发布到database目录下,则去vendor下找到对应的文件,手动复制到database下,再执行变更。
中文文件lang也是,手动复制下到resource对应的zh-cn下。对于要变更的,则在zh-cn对应的文件中添加或修改即可。
laravel有个现成的库purifier,拿来直接用。
composer require mews/purifier
安装完成后,在配置文件config/app.php
的providers
中注册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
,不然会在过滤字段中增加字符
之后在需要做防xss攻击的地方直接调用它即可,比如:
$form->saving(function (Form $form){
$form->title = \Purifier::clean($form->title);
$form->uri = \Purifier::clean($form->uri );
});