fastjson漏洞修复脚本
-
脚本说明
fastjson_update.sh:对指定目录下的fastjson jar包进行备份、升级、还原。 -
使用帮助
-
上传到项目外任意目录下并解压并赋予执行权限(如/opt)
cd /opt tar xf fastjson_update.tar.gz chmod +x fastjson_update/fastjson_update.sh
-
查看脚本帮助信息
cd /opt/fastjson_update ./fastjson_update.sh h 或 ./fastjson_update.sh help fastjson相关依赖包备份、还原、升级脚本使用说明: Usage: fastjson_update.sh <option> option 支持以下参数 backup|b 备份 restore|r 还原备份 update|u 还原备份 help|h 显示帮助信息
-
原有fastjson环境备份
./fastjson_update.sh backup #按照提示输入项目所在路径,如/data/topisa #备份完成后会提示完成信息;并在当前目录下存放备份的文件目录jar_backup和文件原始位置信息backup_info用于后续环境恢复
-
版本升级
./fastjson_update.sh update #按照提示输入项目所在路径,如/data/topisa #升级完成后可手动使用find /data/topisa -name fastjson*.jar 查看升级是否正常 #请手动重启相关服务
-
版本回退
./fastjson_update.sh restore #使用备份的环境信息和原有fastjson依赖包进行环境恢复 #恢复后请手动重启相关服务
-
-
目录结构
- fastjson_update - fastjson_update.sh - fastjson-1.2.83.jar
-
脚本内容如下
#!/bin/bash #fastjson 依赖包备份及还原脚本 base_dir=$(cd `dirname $0`;pwd) base_name=${0##*/} backup_dir=${base_dir}/jar_backup backup_info=${base_dir}/backup_info des_path=/data if [[ ! -d ${backup_dir} ]] ;then mkdir ${backup_dir} fi help_info(){ echo -e "fastjson相关依赖包备份、还原、升级脚本使用说明:" echo -e "Usage: ${base_name} <option>" echo -e "option 支持以下参数" echo -e " backup|b 备份" echo -e " restore|r 还原备份" echo -e " update|u 还原备份" echo -e " help|h 显示帮助信息" } backup(){ echo "开始备份" while [ 1 ]; do echo "请输入项目所在路径:" read des_path if [[ ! -d ${des_path} ]] ;then echo "项目路径不存在,请重新输入;Ctrl+C退出" else break fi done echo "3秒后开始执行fastjson备份;目标路径${des_path};如有异常Ctrl+C结束备份任务" sleep 3 find ${des_path} -name "fastjson*.jar" | grep "${des_path}" > ${backup_info} sed -i "s#^des_path=.*#des_path=${des_path}#" ${base_dir}/${base_name} echo "清空备份目录" rm -rf ${backup_dir}/* echo "==============================================================================================" for i in `cat ${backup_info}` do echo -e "\t开始备份$i" echo y | cp -rf $i ${backup_dir} done echo "==============================================================================================" echo "备份已完成;请勿删除${backup_dir},${backup_info}" } restore(){ if [[ ! -d ${des_path} ]] ;then echo "项目路径不存在,异常退出" exit 2 fi echo "3s开始还原${des_path}路径下fastjson备份;如有异常Ctrl+C结束还原任务" sleep 3 echo "清理新版本fastjson" count=`find ${des_path} -name fastjson-1.2.83.jar |wc -l` if [[ "${count}" != "0" ]];then find ${des_path} -name fastjson-1.2.83.jar | xargs rm fi echo "恢复旧版本fastjson" echo "==============================================================================================" for i in `cat ${backup_info}` do jar_path=${i%/*} jar_name=${i##*/} echo -e "\t还原路径:$jar_path 下的 ${jar_name}" if [[ -d "${jar_path}" ]];then echo y | cp -rf ${backup_dir}/${jar_name} ${jar_path} fi done echo "==============================================================================================" echo "还原结束" } update(){ # fastjson version update to fastjson-1.2.83 while [ 1 ]; do echo "请输入项目所在路径:" read des_path if [[ ! -d ${des_path} ]] ;then echo "项目路径不存在,请重新输入;Ctrl+C退出" else break fi done echo ${backup_info} if [[ ! -s ${backup_info} ]] ;then while : do read -p "项目fastjson未备份是否继续(y/n)" case $REPLY in Y|y) echo "继续进行fastjson版本升级" break ;; n|N) echo "安装将1秒后自动结束;请使用$0 backup备份" sleep 1 exit break ;; *) echo "输入内容错误,请重新输入(输入y继续升级,输入n取消升级)" continue esac done fi echo "开始替换" if [[ ! -d "${des_path}" ]] ;then echo "${des_path} 路径不存在,请重新输入" exit 2 fi cd ${des_path} counts=`find ./ -name fastjson*.jar | grep -v fastjson-1.2.83.jar |wc -l` if [[ ${counts} != 0 ]] ;then find ./ -name fastjson*.jar | xargs dirname |xargs -i cp ${base_dir}/fastjson-1.2.83.jar {} counts=`find ./ -name fastjson*.jar | grep -v fastjson-1.2.83.jar |wc -l` if [[ ${counts} != 0 ]];then find ./ -name fastjson*.jar | grep -v fastjson-1.2.83.jar | xargs rm fi else echo "当前环境不存在可升级的fastjson依赖" fi echo "升级完成;请手动重启相关服务!!" } if [[ $# -eq 1 ]];then option=$1 else help_info exit 1 fi case ${option} in "backup" | "b") backup exit 0 ;; "restore"|"r") restore exit 0 ;; "update"|"u") update exit 0 ;; "h"|"help") help_info exit 0 ;; *) echo "输入错误;使用帮助:$0 <backup b|restore r|help h>" ;; esac