Laravel提高安全性

前言

最近在LaravelChina看到一篇被黑客模拟token登录帖子,感觉非常触目惊心,原来黑客有这么多方式攻破服务器,所以记录一下这个问题下面一些比较好的评论,能够让laravel更安全的一些必要事情

 

服务器

1 关闭数据库远程链接端口,数据库链接走内网; 2 后台 ip 白名单机制 3 生成 token 时加上 ip, 若 ip 不一致则 token 失效 4 ssh 采用跳板机登陆 5 敏感操作需要谷歌 GA 验证,后台敏感操作只能是指定用户 基本上,除非服务器被攻破,就算客户账号密码被泄露,绑定了谷歌 GA. 大多数情况下也不会发生事故

 

微信验证

也有提现功能,提现只能提现微信钱包,提现必须实名认证,认证的时候微信会校验微信号,手机号,身份证是否匹配,不匹配认证不过的,认证不过不能提现,认证通过提现也要后台审核(前面的微信已经确定是本人了,后面这个其实不做也没太大关系)。

 

进一步加密

在 jwt payload 中加入自定义 key,value 为用户的 ip + 浏览器 UA 信息(只要能识别用户的唯一信息的字段都可以),然后对其进行加密保存(使用 laravel 自带 HASH 加密),使用全局中间件,获取登录用户的 payload 自定义 key,并获取用户的 IP+UA 信息 进行验签,验签不通过视为非法用户

 

避免sql注入

当你使用 Eloquent 查询时,如:

User::where('name', $input_name)->first();
copy
Eloquent 内部使用的是 PDO 参数绑定,所以你的请求是安全的。虽然如此,在一些允许你使用原生 sql 语句的地方,还是要特别小心,例如 whereRaw 或者 selectRaw 。如下:

User::whereRaw("name = '$input_name'")->first();
以上这段代码里是存在安全漏洞的,请尽量避免使用原生查询语句。如果你有必须使用原生语句的情况,语句里又包含用户提交内容的话,可以利用其提供的,类似于 PDO 参数绑定进行传参,以避免 sql 注入的风险:

User::whereRaw("name = ?", [$input_name])->first();

 

相关文章

laravel的dd函数不生效怎么办
看不懂laravel文档咋办
安装laravel框架出现command怎么办
Laravel开发API怎么使用事务
laravel怎么构建复杂查询条件
laravel如何实现防止被下载