kkFileView二次开发记录
kkFileView二次开发记录
项目基本介绍
- IndexController 是首页,但是上线前是不能放开的,因为存在安全问题
- application.properties 项目配置文件,目前二次开发主要是 设置
trust.host、ssrf.trusted_domainsIP白名单设置 -- 注意上线去掉127.0.0.1,test.local.com调试ip
1. 域名下多级路径无法正常预览
指定
baseUrl来解决域名下多级路径无法正常访问问题通过优化
server/src/main/java/cn/keking/web/filter/BaseUrlFilter.java实现的
http://127.0.0.1:8012/onlinePreview?url=aHR0cDovL3Nnd3BkbS5haC5zZ2NjLmNvbS&baseUrl=http://127.0.0.1:8012
场景描述:
我的本机 设置一个域名
test.local.com【【通过在 hosts 配置从而实现这个域名解析】- 在hosts文件中
C:\Windows\System32\drivers\etc\hosts - 添加
127.0.0.1 test.local.com
- 在hosts文件中
其中文件 地址
http://localhost:8012/demo/测试001.xlsx---->http://test.local.com/kkfview/onlineView/demo/测试001.xlsx本地nginx 配置 【因为需要模拟二级域名】
因为需要模拟二级域名,所以由我的nginx转发到测试库的nginx,然后转发回来
监听80端口,转发到测试库的nginx
server { listen 80; server_name test.local.com; location /kkfview/ { root html; index index.html index.htm; proxy_pass http://192.168.2.231:8500/; #转发到测试库,再由测试库转发回来 } }测试服务的nginx配置
server { listen 8500; server_name localhost; location /onlineView/ { proxy_pass http://192.168.2.33:8012/; } }访问地址
这时访问,如果不指定baseUrl ,则会导致无法正常加载,目前这个版本提示跨域【之前是加载的url地址不对,一直加载中】
http://test.local.com/kkfview/onlineView/onlinePreview?url=aHR0cDovL3Rlc3QubG9jYWwuY29tL2trZnZpZXcvb25saW5lVmlldy9kZW1vLyVFNiVCNSU4QiVFOCVBRiU5NTAwMS54bHN4&baseUrl=http://test.local.com/kkfview/onlineView
2. AXSS、SSRF漏洞解决
IndexController.java中注释掉全部限制文件上传格式
#禁止上传类型 prohibit = ${KK_PROHIBIT:html,htm,js,css,php,asp,aspx,jsp,jspx,py,rb,pl,cgi,exe,dll,com,bat,sh,cmd,msi,jar,vbs,wsf,wsh,ps1,class,pyc,pyo,xsl,xslt,svg,swf,chm,hta,mht,mhtml,properties,yml,yaml,ini,env,conf,config,json,db,sqlite,sql}限制文件地址白名单【 设置的是信任的文件位置,也即是文件url地址】
trust.host = 101.138.55.107,101.138.55.116,192.168.2.231设置 请求白名单
# 请求白名单 ssrf.trusted_domains= 101.138.55.107,101.138.55.116,192.168.2.231生成环境最好关闭对外端口
3. 部署到docker
目前构建镜像需要用到
ycsrc/kkfileview-base:4.4.0网上经常无法下载资源, 最好离线部署 kkfileview-base-4.4.0.tar
注: 打包前如果修改了源码,需要 对项目先进行编译,clean、install 重新生成新的jar包
3.1 离线部署
通过idea 构建好镜像,然后从docker中打包为zip到服务器上执行
先打开
Docker Desktop执行根目录下的Dockerfile 文件

在
Docker Desktop中就能看到这个镜像指定一个文件夹,打包tar 压缩文件【通过下面的命令将,镜像打包到当前文件夹】-- 可以理解为下载镜像离线文件
docker save -o kkfileview-4.4.0.tar kkfileview-4.4.0:latest然后通过离线部署镜像/容器 【进入到目标服务器指定一个文件夹,将镜像文件放入,然后执行下面的命令,将镜像tar部署到docker容器中】
# load镜像tar包到服务器 docker load -i kkfileview-4.4.0.tar # 部署到docker容器 docker run -m 2048m --restart always -d -p 8012:8012 kkfileview-4.4.0
3.2 通过Dockerfile直接部署
mavn 中
clean、install拿到server/target/kkFileView-4.4.0.tar.gz拷贝根目录下的 Dockerfile 文件
服务器上创建 文件夹
mkdir /home/kkFileView将上面的2个文件放到kkFileView 文件夹中,执行Dockerfile 文件
docker build -t kkfileview-4.4.0 .通过 docker images 查询是否镜像部署成功
部署到容器
docker run -m 2048m --restart always -d -p 8012:8012 kkfileview-4.4.0这里可能会失败,因为前面删除过 残留网络配置
这时候最好删除掉刚刚创建的 kkfileview 容器,重新执行
[root@k8s-master kkFileView]# systemctl stop docker [root@k8s-master kkFileView]# systemctl start docker [root@k8s-master kkFileView]# docker run -m 2048m --restart always -d -p 8012:8012 kkfileview-4.4.0
3.3 如果是再次安装需要先移除容器,才能重新安装
# 查看当前运行的kkfileview容器(获取容器ID或名称)
docker ps | grep kkfileview
# 停止容器(替换<容器ID/名称>为实际值,如kkfileview_container)
docker stop <容器ID/名称>
# 删除容器(彻底清理旧实例)
docker rm <容器ID/名称>
# 查看所有kkfileview镜像
docker images | grep kkfileview
# 删除镜像
docker rmi <旧镜像ID/标签>
如果是再自己电脑中操作Dockerfile 来打包离线镜像,则 最好也删除本机 Docker Desktop 中的这个镜像【若新镜像与旧镜像标签相同】,防止不能正常覆盖
4. 其他
4.1 离线安装
- 安装
kkfileview-base镜像-这个是为了安装kkfileview 需要的基础镜像
# 1. 下载
docker pull ycsrc/kkfileview-base:4.4.0
# 2. 将docker中的kkfileview-base:4.4.0 打离线包、得到 kkfileview-base-4.4.0.tar 【离线tar】
docker save -o kkfileview-base-4.4.0.tar ycsrc/kkfileview-base:4.4.0
# 3. 将kkfileview-base-4.4.0.tar 上传都指定服务器的位置【部署镜像】
docker load -i kkfileview-base-4.4.0.tar
- kkfileview-4.4.0 部署
# 1. 将镜像打包
docker save -o kkfileview-4.4.0.tar kkfileview-4.4.0:latest
# 2. 部署镜像
docker load -i kkfileview-4.4.0.tar
# 3. 部署到docker容器
docker run -m 2048m --restart always -d -p 8012:8012 kkfileview-4.4.0
4.2 docker 镜像端口不受防火墙控制
Docker 容器未在防火墙 (firewalld) 中显式放行端口却仍可访问,原因是Docker 默认绕过防火墙规则。
解决方案:
- 检查是否存在
/etc/docker/daemon.json如果没有创建 - 在
daemon.json中添加"iptables": false - 重启docker
systemctl restart docker
# 如果需要放开8012端口
firewall-cmd --zone=public --add-port=8012/tcp --permanent
systemctl restart firewalld.service
# 删除8012
firewall-cmd --zone=public --remove-port=8012/tcp --permanent
systemctl restart firewalld.service
4.3 开发注意
目前控制了ip白名单,如果个人需要调试,请修改 配置文件
server/src/main/config/application.properties下面的2个属性,添加自己的ip即可trust.host限制文件的url的白名单ssrf.trusted_domains限制url的白名单的
调试完成后,请检查下面2个人地方