Dict.CN 在线词典, 英语学习, 在线翻译 ------------- MyGitee 朱秋贵内科诊所 My腾云code

AI+若依

AI+若依
https://www.bilibili.com/video/BV1pf421B71v/?spm_id_from=333.337.search-card.all.click&vd_source=b1acc63fa6d7d73e53111f9e1153f990

若依扫盲

  • 通义灵码(AI)

  • CRM客户关系管理系统(后台管理系统)
    选型与搭建:技术选型,环境搭建,框架整合(AI凉凉)
    设计:基于原型设计库表,接口等(AI辅助)
    编码:映射设计为实际功能(AI辅助)
    部署:测试与生产(AI辅助)

  • 若依:选型与搭建一把梭
    RuoYi,javaEE,快速搭建与开发各种管理系统工具,非完整体系,需二次开发业务与逻辑
    gitee:若依/RuoYi-Vue
    专为后台管理系统设计的快速开发平台

  • 前置
    MySQL,Redis,后端(SpringBoot,MyBatis),前端(Vue3,Axios,Element-Plus),工具(IDEA,VSCode,Git)

若依搭建

混乱的框架版本:
RuoYi (SpringBoot+Bootstrap) 多模块版本(前后端同一项目,淘汰)
RuoYi-Vue (SpringBoot+Vue) 前后端分离(中大型项目不行:性能瓶颈,扩展性等,就要选择微服务版本)
RuoYi-cloud(Springcloud+Vue) 微服务
RuoYi-App(Uniapp+Vue) 移动端(未提供后端代码,可适配RuoYi-Vue和RuoYi-cloud)
RuoYi-other(Vue3+ElementPlus+Vite) 其他(第三方开发生态)

  • RuoYi-Vue版本,前后端分离,单体架构
    环境:JDK 11、MySQL 8、Redis 5、Maven 3.6、Node16(Vue3)
    技术选型: Spring Boot、Spring Security、MyBatis、Jwt、Vue3、Element-Plus
    官方地址: https://gitee.com/y_project/RuoYi-Vue
    扩展地址: https://gitee.com/ys-gitee/RuoYi-Vue3

  • 搭建后端项目
    IntelliJ IDEA:git克隆一把梭(源码与java包依赖下载,项目文件目录高亮与加粗就OK了)
    image

git克隆一把梭出问题时:Maven -- clean清理 -- package打包(重新第三方依赖下载)-- 刷新
image

MySQL导入与配置:项目目录sql(若依提供的通用sql脚本,需导入数据库里)
image

打开数据库的客户端工具:
image

右键 -- 新建 -- schema(数据库):ry-vue

右键 -- 执行 sql 脚本
image

启动项目需要连接数据库(连接数据库的配置文件):mybatis -- application-druid.yml
image

启动redis服务
image

配置文件对齐redis密码
image

运行后端项目(找到项目的启动类):ruoyi-admin子模块中,运行RuoYiApplication
image

debug启动类方法
image

  • 搭建前端项目
    git克隆并VScode初始化项目
    image

安装依赖:npm install(未配置全局第三方国内镜像源,速度非常慢)
第三方国内镜像源:npm install --registr=https://registry.npmirror.com
image

运行前端项目:npm run dev

运行成功后浏览器自动打开后台管理系统的登录页面(前端:后开登录页面)
image

入门案例

  • 前端
    vue中:api放的前端请求的js文件(贵司的api安全),views放的视图组件
    image

  • 后端
    image

  • 准备SQL并导入数据库

  • 配置代码生成信息

代码生成模块:数据库脚本中的字段,对应攻防中的参数fuzz字典思维
image

  • 下载代码并导入项目
    main:包含java的三层代码(Controller表现层(请求与响应),Service业务层(请求之后进行业务逻辑处理),Mapper DAO持久层(业务逻辑处理之后要不要增删改查等))以及domain(比如数据库在项目中的实体类)
    理解一把梭:视图,请求,数据交换(已SQL注入为例的理解,寻找表现层中的登录框,在username注入payload,请求传入到业务层代码,最终汇聚到持久层的数据库拼接语句,传入数据库中执行SQL,导致SQL注入漏洞)
    image

image

功能 - 权限控制

若依内置权控系统,为企业级提供通用的解决方案
超级管理员(看所有),市场专员(看自己的呗),销售专员(看自己的呗)
SDLC,等保,渗透,代审前期调研一把梭:不同权限账号各一个,方便进行横纵向基线对比。

权限控制前置思维:RBAC,基于角色访控(用户,角色,权限)
比如N个员工中的M个账号(用户) --> 市场专员(角色) -->访问市场功能菜单(权限):知道越权的poc怎么越了吧
image

图上的设计都是数据:用户表,角色表,功能菜单表
数据之间都是存在多对多的权限关联的:中间表维护权限关系(用户表--角色表);中间表维护权限关系(角色表--功能菜单表)【越权的初始点参数和值,懂了吧】

RBAC:红色的五张表(其他绿色表,细颗粒访控)
image

功能 - 数据字典

若依内置数据字典:用于维护系统常见的静态数据(性别、状态等的增删改查)
数据字典存入数据库中,复用性:多功能菜单引用同一个静态数据(多个功能点下的,状态使用同一个静态数据(启用,停用))

image

功能 - 监控相关

在线用户 - 登录信息查redis缓存(登录token,配置信息等敏感数据)(贵司的webshell流量特征session固定值)
image

缓存监控:客户端连接数(连接数Dos),使用内存,CPU(利用率Dos),网络出入口kps(带宽Dos),贵司所谓的验证码(Dos:内存,网络出入口)

数据监控:若依集成了德鲁伊(druid)的web监控工具

功能 - 定时任务

硬编码定时任务 VS 动态管理任务
image

这里至少你能看见登录后的方法参数控制:
image

功能 - 系统接口

使用的Swagger工具生成API在线文档,提供web界面进行接口调用和测试
image

Swagger配置文件
image

项目结构

  • 后端结构
    RuoYiApplication:Springboot+内置tomcat直接运行
    RuoYiServletlnitializer:将Springboot打成war包,用外置的Servlet容器来执行

image

通用工具
image

框架核心
image

系统模块
service业务层,mapper持久层,domain实体类
image

  • 配置文件
    image

文件上传时的保存路径:本地或存储桶OSS
image

服务器性能相关
image

jwt认证设置
image

mybatis的映射配置文件和全局配置文件
image

xss过滤器配置
image

  • 模块依赖关系
    ruoyi-admin模块跑起来,后面的模块就都跑起来了
    image

pom.xml文件看看依赖关系
image

image

  • 前端结构
    image

package.json:第三方依赖的版本信息
image

  • 表结构
    image

源码阅读 - 前端

  • 前置知识:SpringBoot3+Vue3全栈

api接口,vue前端组件
image

简而言之,api接口的js文件里引入了请求类,里面封装了请求响应拦截器工具类等
image

源码阅读 - 后端

  • 不严谨但很实用,简单一把梭:控制着请求(get或post等url API),进行处理服务(后端代码),接着存取可选(数据库),最后可选的返回响应
    Controller控制层-->service 业务服务层-->Mapper 数据持久层:接收前段请求,调用service处理业务逻辑(看看是否需要进行数据存取)并返回结果。

注解,接收前端请求
@get/post/put/deleteMapping
查询功能:123456页面(get,代码逻辑,数据库里的表)
导出功能:比如导出xlsx文件(post,代码逻辑,数据库里的表)
获取资源功能:获取详细信息等(get id值等,代码逻辑,数据库里的表)
增加功能:新建(post,代码逻辑,数据库里的表)
修改功能:修改(put,代码逻辑,数据库里的表)
删除功能:删除(delete,代码逻辑,数据库里的表)

service方法定义:ICourseService.java

service的实现类:CourseServicelmpl.java
重写了所有的实现方法,调用Mapper完成数据库的相关操作:以下courseMapper就表示从数据库里直接查询id并返回。
image

具体实现:CourseMapper.java中实现的,与service的实现类(CourseServicelmpl.java)一一对应
image

具体每个方法对应的SQL语句,在CourseMapper.xml中实现的
image
image

实体类继承基类:Course.java
与数据库一一对应,完成xml的自动映射封装
image

@PreAuthorize:Spring sec框架提供的权限校验

继承类的属性方法(什么getUserId,这些属性方法对应渗透测试的字典fuzz)
image

image

分页拦截器 PageHelper:自动对SQL分页进行拦截,实现分页的拦截逻辑
image

分页拦截器 第一步开启分页 startPage()去拦截第二步(//2.查询课程列表)的SQL语句:

startPage()拦截 --> select * from 课程表 where xxx(拆成总记录数查询(截取* 改成 count(*)得到总记录数),和拆成list集合查询(拼接limit ?,? 得到分页的查询 ))

image

第三步的分页结果返回
image

源码阅读 - 权限注解

Spring Security框架中的权限注解:@PreAuthorize

  • 不管是什么花里胡哨的语言(漏洞原理的底层思维不会变,比如SQL注入的漏洞原理就是拼接,这放到什么具体语言中还是拼接),学技术(SQL注入如何拼接),而不是学技巧(java SQL注入怎么代审?怎么发现?)。未授权访问,同理。
  • 一把梭,匹配权限标识
    image

干掉权限字符(未匹配到权限标识,权限不足)
image

image

获取左边图里的用户登录信息(比如权限集合,权限注解匹配是否在权限集合中存在,存在则放行。不存在则拦截,权限不足)
image

源码阅读 - 前后端交互

image

image

  • vue.js Axios工具(请求响应拦截器,增强请求响应)
    image

image

image

项目工程里配置文件拼接前缀:dev-api 开发,生产,测试等
image

前后端分离:请求,代理转发,实现跨域访问
image

拦截 /dev-api 前缀进行跨域访问(target);重写(rewrite),匹配 /dev-api,替换为空
image

  • 基于跨域的蜜罐或溯源(还有基于客户端漏洞比如浏览器,基于VPS的基础设施比如反渗透VPS或域名找回等手机号数据关联,基于本地文件读取的配置硬编码比如某个生活应用下的ID号等中间关联数据,基于反向钓鱼比如需要先"安装"什么才能访问资产等)
    image

二开 - 新建业务模块

https://www.bilibili.com/video/BV1pf421B71v?p=17&vd_source=b1acc63fa6d7d73e53111f9e1153f990

  • 存储桶存于本机的环境变量中(因为阿里云OSS官网文档有这个,所以信息收集带上)
    image
posted @ 2024-11-26 20:51  cn2024  阅读(18)  评论(0编辑  收藏  举报