首页 > 编程知识 正文

业界已知不安全的加密算法,水平越权和垂直越权区别

时间:2023-05-04 01:49:02 阅读:9496 作者:2359

一.什么是横越权和纵越权?

1 .跨界越权(攻击者尝试访问与自己权限相同的用户。 例如,忘记密码并回答问题后,转到要重置密码的页面。 此时,用户可以自行填写用户名和密码,并在数据库中正好存在该用户时修改其他用户的密码。 这是跨界越权

2 .纵向越权:低级攻击者想访问高级用户的资源。

二.如何解决

1 .生成横向越权(回答问题时,如果成功,则在服务端根据用户名进行token )随机数与用户名的映射)并将其保存到本地缓存中。 具体如下。

1 //此代码位于检查问题答案的界面中。 即,在回答问题时生成该token,标记用户名

stringforgettoken=uuid.random uuid ().toString ); 2 token cache.setkey (token cache.token _ prefix username,forgetToken ); 3 returnserverresponse.creatbysuccess (forget token );

在这里,我们使用Guaua本地缓存来保存token。 此token定期禁用。 具体代码如下。

公共类令牌缓存{

//前缀

publicstaticfinalstringtoken _ prefix=' token _ ';

隐私保护日志gerlogger=logger factory.getlogger (token cache.class;

privatestaticloadingcachelocalcache=

CacheBuilder.newBuilder ().initial capacity (1000 ).maximumsize (10000 ) )。

. expireafteraccess(12,TimeUnit.HOURS )。

构建(newcacheloader ) )。

@Override

//如果get方法没有检索数据,则调用此方法加载缺省数据实现

公共字符串加载(字符串) throws Exception {

返回'空';

}

);

publicstaticvoidsetkey (字符串密钥,字符串值) {

本地缓存. put (key,value;

}

publicstaticstringgetkey (字符串密钥) {

字符串值=null;

try{

value=local cache.get (密钥;

if('null'.equals(value ) ) ) ) ) ) ) ) )。

返回空值;

}

返回值;

}

catch(exceptione ) {

logger.error (锁定器),e );

}

返回空值;

}

}

此token最后返回前台,在重置密码时传递此token。 然后,后台将此token (重置随机数和密码时输入的用户名映射)与本地用户名进行比较,以确定是否修改了当前用户

//此代码位于复位密码接口中

string token=token cache.getkey (token cache.token _ prefix username ); if(stringutils.isblank(Token ) ) returnserverresponse.creatbyerrormessage (' token无效或过期');

}

//跳到此密码重置时,前台传递token,后台从本地缓存中检索并比较,如果正确,则进行密码重置。 if (string utils.equals (forget Token,token ) ) ) ) ) )。

string m D5 password=m D5 util.m D5 encode utf8(password new ).toString ); int count result=user mapper.undatepasswodbyusername (username,md5Password ); if (计数结果0 ) returnserverresponse.creatbysuccessmessage (“密码更改成功”)

}

} else { returnserverresponse.creatbyerrormessage (' token错误);

}

2 .通过设置用户角色并为每个角色提供不同的权限,来避免垂直越权: 例如,可以在用户注册时设定角色,并持久化到数据库中,在那时进入后台管理者时判断角色的状态。 如下。

if (user.getrole (==const.role.role _ admin ) {

SSS ion.set attribute (const.current _ user,user );

返回响应;

}else{

returnserverresponse.creatbyerrormessage;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。