本篇文章主要讲解PHP管理系统后台管理员登录中心的防护方法。
适用范围:php原生、框架内部使用、或者其他语言和系统参考。
方案一、通过在登录界面增加URL的加密参数进行判断 【能避免暴力破解、相对轻便简单】
配置参数说明: 后台系统设置界面、或者数据库存储、再或者将加密参数存储在redis缓存中都可。
主要思路: 保存一个明文或者密文在指定的位置,登录界面访问时进行加密参数的匹配,成功者显示界面,不成功则不显示。
代码实例:
<?php
//以URL /admin.php?key=123456 为例子
$key = $_GET['key'];//加密的参数,明文或者密文
$_key = $_SESSION['key'];//以保存在session中为例,mysql的自行取值存,redis自行,只要做到存储密文读取密文内容即可。加密时则保存加密的内容
//明文时判断
if($key!==$_key){
return '404';//此处提示错误信息,或者直接用header函数跳转到首页即可
}
//以md5()加密的密文为例
if($key!==md5($_key)){
return '404';//此处提示错误信息,或者直接用header函数跳转到首页即可
}
作用:保护后台管理系统不被暴力破解。
二、对登录进行多重密码的校验 【能避免暴力破解】
配置参数说明: 设置一个登录的口令,登录表单中账号密码、口令都输入正确才可进行登录,并且同上一个方法一样,存储固定。可单一一个对应一个管理员,也可共同使用一个。
主要思路: 验证口令,口令和密码均对才可登录,防止被暴力破解的可能性。
代码实例:
<?php
//参数获取示例
$number = $_POST['number'];//账号号码
$pwd = md5($_POST['pwd']);//密码
$aqm = md5($_POST['aqm']);//安全码 用户前端输入的
$_aqm = $_SESSION['_aqm'];//以session为例子获取早早存储好的安全码
$code = $_POST['code'];//登录验证码,也可以时行为验证的参数
...增加上验证码的验证,对比验证码的参数是否匹配
//进行验证
if($aqm!==$_aqm){
echo '验证失败';
//...存入失败次数和账号以及ip的信息,并累计失败次数,达到一定数目时直接拒绝请求
}
$login_err_num = $_SESSION['login_err_num'];//以session为例累计失败次数,并获取失败的次数
if($login_err_num>=5){
echo '请求被拒绝';
}
.... 此处代码逻辑省略,用户的密码验证以及相关的安全验证逻辑 自行书写
三、通过固定的vpn进行登录 【相对私密安全、实用】
说明:通过运维,禁止访问登录url,并创建一个vpn,并将这个vpn的地址绑定为白名单。只有通过这个vpn账号在自己的电脑中登录后才可访问这个url,否则任何访问都不可以。
四、通过固定的win云主机进行登录 【相对私密安全、比较多此一举】
说明:购买一台win系统的主机,通过绑定这台主机的ip地址,进行验证和判断是否可以请求登录url。或者后台管理系统假设在这台主机中,只能通过127.0.0.1进行内部的访问。
五、内网限制 【相对私密安全、实用适合办公】
说明:和三四的方案异曲同工,通过linux或其他系统特性,制定企业内网环境,并将后台管理系统搭建在内网中独立存在,只能通过连接公司有线网络或者无线网络进行访问,同时假设vpn,员工在家也可电脑登录vpn进行内网的访问。
end:当然除了上面举例的以外,还是有很多其他方式对此进行安全防护的方法,如通过服务器系统进行相对应的防御机制的开发。