1.已解密的登录请求

推理: AppScan 识别了不是通过 SSL 发送的登录请求。
测试请求和响应:

1.1.1 产生的原因

登录接口,前端传入的密码参数没有经过md5的加密就直接传给了后端

1.1.2 解决方法

前端代码传参的时候做md5加密处理

2.会话标识未更新

推理: 测试结果似乎指示存在脆弱性,因为“原始请求”和“响应”中的会话标识相同。这些标志应该已在响
应中更新。
测试请求和响应:

2.1.2 产生原因

会话标识未更新漏洞,在用户进入登录页面,但还未登录时,就已经产生了一个session,用户输入信息,登录以后,session的id不会改变,也就是说没有建立新session,原来的session也没有被销毁), 可能会窃取或操纵客户会话和cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。
 
2.1.3 解决方法
如果用的是shiro框架,使用 shiro自己提供的api方法 SecurityUtils.getSubject().logout(); 在登录验证时生成新的session

3.“Content-Security-Policy”,“X-Content-Type-Options”,“X-Content-Type-Options”头缺失或不安全

推理: AppScan 检测到 Content-Security-Policy 响应头缺失或具有不安全策略,这可能会更大程度地暴露于各种跨站点注入攻击之下
 

推理: AppScan 检测到“X-Content-Type-Options”响应头缺失或具有不安全值,这可能会更大程度地暴露
于偷渡式下载攻击之下
 

推理: AppScan 检测到 X-XSS-Protection 响应头缺失或具有不安全值,这可能会造成跨站点脚本编制攻击

3.1.1 产生原因

nginx.conf配置里没有添加对应的请求头

3.1.2 解决方法

nginx.conf里配置缺失的请求头

4.垂直越权

4.1.1 漏洞分析

登录测试账号test并分析下列JS代码:js/app.eb5ecba8.js
可获取若干隐藏配置菜单:

发现通过访问上述对应menuAction即可实现越权:
 
4.1.2.风险分析
攻击者可基于低权限账户获取高权限账户的模块权限。
 
4.1.3.风险等级
 
4.1.4.安全建议
对相关menuAction对应的接口完善鉴权。
 
4.1.4.问题复现
1)浏览器打开F12,找到vue.js中配置的一些项目接口的路由
2)登录低权限test账号,然后在地址栏中直接访问vue.js中的某个路由地址,例如:http://221.***.**.50:58000/#/earlyReport 前提条件是该接口的是test用户不具有访问权限的一个模块中的接口
3)结果是在浏览器能够直接访问接口所在的页面,并能访问数据
 
4.1.5.什么是垂直越权
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞 ,简单来说就是低权限用户能访问高权限用户,就是垂直越权
 
4.1.6.解决方法
采用AOP,切每个接口,对每个接口做权限校验;自定义一个注解,加在需要控制权限的接口方法上,并且设置这个接口的权限角色。然后通过AOP,切点就是这个自定义注解的方法,前置通知把方法拦截后,先拿到当前登录用户的角色,再拿到自定义注解中该方法的权限角色,根据这些判断当前登录用户有没有权限调用这个接口。如果有权限请求正常继续往下走,如果没有权限抛出异常,代码如下:
 
自定义注解类:
 1 @Target(ElementType.METHOD)
2 @Retention(RetentionPolicy.RUNTIME)
3 public @interface SecurityAuth {
4
5 /**
6 * 拥有权限的角色名
7 * @retuen
8 */
9 String roleName();
10 }
AOP切点类:
 1 @Aspect
2 @Component
3 public class SecurityAspect {
4
5 @Autowired
6 private SysRoleUserService sysRoleUserService;
7
8 /**
9 * 自定义注解切点
10 */
11 @Pointcut("@annotation(com.broadu.modules.filter.SecurityAuth)")
12 public void annotationAspect(){}
13
14 /**
15 * 前置通知
16 */
17 @Around("annotationAspect()")
18 public Object doBefore(ProceedingJoinPoint joinPoint) throws Throwable {
19 // 拿到响应
20 HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
21 // 拿到当前登录用户
22 UserDetail user = SecurityUser.getUser();
23 if(null == user){
24 // 未登录
25 throw new RenException(ErrorCode.ACCOUNT_NOT_EXIST,"该用户不存在");
26 }
27 // 从切面织入点处通过反射机制获取织入点处的方法
28 MethodSignature signature = (MethodSignature) joinPoint.getSignature();
29 // 获取切入点所在的方法
30 Method method = signature.getMethod();
31 // 获取注解
32 SecurityAuth auth = method.getAnnotation(SecurityAuth.class);
33 // 获取该方法使用的角色
34 String roleNames = auth.roleName();
35 // 获取该用户的角色列表
36 if(ObjectUtil.notEqual(user.getSuperAdmin(),1)){
37 List<String> roleList = sysRoleUserService.getRoleNameList(user.getId());
38 List<String> list = new ArrayList<>();
39 if(null != roleList && roleList.size() > 0){
40 String[] roleName = roleNames.split(",");
41 for (String str : roleName) {
42 for (String s : roleList){
43 if(ObjectUtil.equal(str,s)){
44 list.add(s);
45 break;
46 }
47 }
48 }
49 if(list.size() == 0){
50 // 没有权限
51 throw new RenException(ErrorCode.ACCOUNT_NOT_PERMISSION,"该用户无权限访问");
52 }
53 }
54 }
55 // 有权限
56 return joinPoint.proceed();
57 }
58
59 }
Controller类:
 1 @RestController
2 @Slf4j
3 @RequestMapping("/ftpConfiguration")
4 public class FtpConfigurationController {
5
6 @Autowired
7 FtpConfigurationService ftpConfigurationService;
8
9 @Autowired
10 FactorService factorService;
11
12 @SecurityAuth(roleName = "用户角色")
13 @GetMapping("/page")
14 @ApiOperation("统计报表")
15 public Result<PageData<FtpConfigurationDto>> page(@ApiIgnore @RequestParam Map<String, Object> params) {
16 PageData<FtpConfigurationDto> page = ftpConfigurationService.page(params);
17 List<FtpConfigurationDto> list = page.getList();
18 // 用户密码md5加密
19 list.forEach(item ->{
20 try {
21 item.setPassword(DigestUtils.md5Hex(item.getPassword()));
22 } catch (Exception e) {
23 log.info("加密异常信息:{}"+e.getMessage());
24 }
25 });
26 page.setList(list);
27 return new Result<PageData<FtpConfigurationDto>>().ok(page);
28 }
 
前端也对代码做了相关的权限校验

静态路由绑定按钮跳转:

4.1.7.验证是否修复成功
先用不是用户角色的用户登录系统后,然后直接在浏览器地址输入“分页查询用户列表”的url,查看页面上是否有数据返回。如果有,则说明漏洞没修复成功;如果没有,则修复成功。

Web安全漏洞解决方案的更多相关文章

  1. Java WEB安全问题及解决方案

    1.弱口令漏洞   解决方案:最好使用至少6位的数字.字母及特殊字符组合作为密码.数据库不要存储明文密码,应存储MD5加密后的密文,由于目前普通的MD5加密已经可以被破解,最好可以多重MD5加密.   ...

  2. 针对需要使用T3协议的Weblogic2628漏洞解决方案

    针对需要使用T3协议的Weblogic2628漏洞解决方案 前几天用户的服务器中检查到了Weblogic2628l漏洞,并且打过Oracle官方补丁后还是能检测到. 针对此问题,去网上查找了一些资料. ...

  3. 手把手让你实现开源企业级web高并发解决方案(lvs+heartbeat+varnish+nginx+eAccelerator+memcached)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://freeze.blog.51cto.com/1846439/677348 此文凝聚 ...

  4. Web安全漏洞深入分析及其安全编码

    摘自:http://blog.nsfocus.net/web-vulnerability-analysis-coding-security/ 超全Web漏洞详解及其对应的安全编码规则,包括:SQL注入 ...

  5. 基于 burpsuite的web逻辑漏洞插件开发(来自JSRC安全小课堂,柏山师傅)

    基于 burpsuite的web逻辑漏洞插件开发 BurpSuite 提供了插件开发接口,支持Java.Python.Ruby语言的扩展.虽然 BApp Store 上面已经提供了很多插件,其中也不乏 ...

  6. 【OWASP TOP10】2021年常见web安全漏洞TOP10排行

    [2021]常见web安全漏洞TOP10排行 应用程序安全风险 攻击者可以通过应用程序中许多的不同的路径方式去危害企业业务.每种路径方法都代表了一种风险,这些风险都值得关注. 什么是 OWASP TO ...

  7. [web安全]Web应用漏洞攻击分析与防范

    网站攻击主要分为以下几类: (1) sql注入攻击 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.它是利 ...

  8. 宣布发布 Windows Azure 导入/导出服务的预览版以及 Web 和移动解决方案场景的若干增强功能

    客户评估基于云的存储解决方案时,面临的挑战之一是以经济高效.安全快速的方式从 Blob 存储区移进和移出大量数据.今天,我们很高兴地宣布发布 Windows Azure 导入/导出的预览版,这款新服务 ...

  9. 基于Web的漏洞利用

    1.Nikto 基于Web的漏洞信息扫描 nikto 自动扫描web服务器上没有打补丁的软件,同时同时也检测驻留在服务器上的危险文件,nikto能够识别出特定的问题,检测服务器的配置问题, 检测某台主 ...

  10. ​Web安全测试解决方案

    Web安全测试解决方案 介绍常见的Web安全风险,Web安全测试方法.测试基本理论和测试过程中的工具引入

随机推荐

  1. vue全家桶进阶之路38:Vue3 组件内部路由守卫

    在 Vue Router 中,可以为路由和路由组件注册全局的路由守卫,也可以在组件内部注册路由守卫. 组件内部的路由守卫有以下几种: beforeRouteEnter:在路由进入组件前被调用,但是在组 ...

  2. Linux:论如何在虚拟机上挂载多个镜像?

    欢迎来到千汐   博客名称:千秋云染博客网址:https://www.cnblogs.com/skyrainmom 寄语:在混乱不堪的世界里你只管前行,时间替会证明一切 world cookie 我可 ...

  3. Structured Streaming 的异常处理 【Concurrent update to the log. Multiple streaming jobs detected】

    目录 异常信息 一.异常表象原因 1.异常源码: 2.打个断点 二.解决方案 1.可以通过代码指定各分区的开始offset 2.不删除而是更改checkpoint offset下的批次文件 三.异常背 ...

  4. 密码暴力破解工具——九头蛇(hydra)使用详解及实战

    转载出处:https://zhuanlan.zhihu.com/p/540998739 二.使用方法 语法:Hydra 参数 IP 服务 参数: -l login 小写,指定用户名进行破解 -L fi ...

  5. 近期SQL优化实战分享

    分享一下本周SQL优化的两个场景. 如果能对读者有一定的启发,共同探讨,不胜荣幸. 版本信息:mysql,5.7.19 引擎: innodb 场景1 我们有一张常口表,里面的数据由各种数据源合并而来, ...

  6. 一张图快速了解 Istio 的 EnvoyFilter

    EnvoyFilter简介 EnvoyFilter 提供了一种机制来定制 Istio Pilot 生成的 Envoy 配置.使用 EnvoyFilter 修改某些字段的值,添加特定的过滤器,甚至添加全 ...

  7. 通过模仿学会Python爬虫(一):零基础上手

    好家伙,爬虫来了 爬虫,这玩意,不会怎么办, 诶,先抄一份作业回来 1.别人的爬虫  Python爬虫史上超详细讲解(零基础入门,老年人都看的懂)_ChenBinBini的博客-CSDN博客 # -* ...

  8. 阿里云ASK试用心得(避坑贴)

    前言 常年BP阿里云的各种服务,今天却被阿里云给上了一课,这一套组合拳把我安排的明明白白,血亏50大洋,算是提前为各位大佬排坑了,预祝大家中秋快乐 目的 最近阿里云首页放出了免费试用的活动,本着不用白 ...

  9. 推荐一款.NET开源跨平台的开箱即用的DNS服务器软件

    前言 今天要给大家推荐一款.NET开源跨平台的开箱即用的DNS服务器软件(用于提供 DNS 解析服务):Technitium DNS Server. 项目介绍 Technitium DNS Serve ...

  10. 大数据面试题集锦-Hadoop面试题(四)-YARN

    你准备好面试了吗?这里有一些面试中可能会问到的问题以及相对应的答案.如果你需要更多的面试经验和面试题,关注一下"张飞的猪大数据分享"吧,公众号会不定时的分享相关的知识和资料. 目录 ...