Java项目安全处理方法

一、URL中参数显示问题,解决方案:

1、普通Get请求修改为Post请求

2、参数加密(js加密,Java解密)

二、Mybatis模糊查询中,sql拼接问题,解决方案方案:

1、使用安全的符号和方法,xml中拼接示例:

<if test="stateList != null">
  state in
  <foreach close=")" collection="stateList" index="index" item="sta" open="(" separator=",">
    #{stateList[${index}]}
  </foreach>
</if>
<if test="title != null and title != ''">
    and title like concat('%',#{title},'%')
</if>

2、Java中转义特殊字符,Java中字符处理示例:

param = param.replace("%", "\\%");
param = param.replace("_", "\\_");
param = param.replace(",", "\\,");
param = param.replace("'", "\\'");
param = param.replace("/", "//");
param = param.replace("\\", \\\\);

三、文件上传安全问题

解决方案:判断文件名、请求ContentType和文件头内容。

文件头内容判断:

常见文件类型识别

常用文件的头信息:
JPEG (jpg),文件头:FFD8FFE1
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
TIFF (tif),文件头:49492A00
Windows Bitmap (bmp),文件头:424D
CAD (dwg),文件头:41433130
Adobe Photoshop (psd),文件头:38425053
Rich Text Format (rtf),文件头:7B5C727466
XML (xml),文件头:3C3F786D6C
HTML (html),文件头:68746D6C3E
Email [thorough only] (eml),文件头:44656C69766572792D646174653A
Outlook Express (dbx),文件头:CFAD12FEC5FD746F
Outlook (pst),文件头:2142444E
MS Word/Excel (xls.or.doc),文件头:D0CF11E0
MS Access (mdb),文件头:5374616E64617264204A
WordPerfect (wpd),文件头:FF575043
Postscript (eps.or.ps),文件头:252150532D41646F6265
Adobe Acrobat (pdf),文件头:255044462D312E
Quicken (qdf),文件头:AC9EBD8F
Windows Password (pwl),文件头:E3828596
ZIP Archive (zip),文件头:504B0304
RAR Archive (rar),文件头:52617221
Wave (wav),文件头:57415645
AVI (avi),文件头:41564920
Real Audio (ram),文件头:2E7261FD
Real Media (rm),文件头:2E524D46
MPEG (mpg),文件头:000001BA
MPEG (mpg),文件头:000001B3
Quicktime (mov),文件头:6D6F6F76
Windows Media (asf),文件头:3026B2758E66CF11
MIDI (mid),文件头:4D546864

java附件上传时后台验证上传文件的合法性

public static Map<string, string=""> mFileTypes = new HashMap<string, string="">();static {    // imagesFFD8FFE1    mFileTypes.put("FFD8FFE1", ".jpg");    mFileTypes.put("FFD8FFE0", ".jpg");    mFileTypes.put("89504E47", ".png");    mFileTypes.put("47494638", ".gif");    mFileTypes.put("49492A00", ".tif");    mFileTypes.put("424D", ".bmp");    // 办公文档类    mFileTypes.put("D0CF11E0", ".doc"); // ppt、doc、xls    mFileTypes.put("504B0304", ".docx"); // pptx、docx、xlsx    /** 注意由于文本文档录入内容过多,则读取文件头时较为多变-START **/    mFileTypes.put("0D0A0D0A", ".txt"); // txt    mFileTypes.put("0D0A2D2D", ".txt"); // txt    mFileTypes.put("0D0AB4B4", ".txt"); // txt    mFileTypes.put("B4B4BDA8", ".txt"); // 文件头部为汉字    mFileTypes.put("73646673", ".txt"); // txt,文件头部为英文字母    mFileTypes.put("32323232", ".txt"); // txt,文件头部内容为数字    mFileTypes.put("0D0A09B4", ".txt"); // txt,文件头部内容为数字    mFileTypes.put("3132330D", ".txt"); // txt,文件头部内容为数字    /** 注意由于文本文档录入内容过多,则读取文件头时较为多变-END **/    mFileTypes.put("25504446", ".pdf");    mFileTypes.put("255044462D312E", ".pdf");    // 压缩包    mFileTypes.put("52617221", ".rar");    mFileTypes.put("1F8B08", ".gz");}/**    * 判断上传的文件是否合法    *     * @param file    *            文件    * @param contentType    *            是否指定类型    * @param typeStr    *            文件类型后缀名(.jpg,.png,.gif,.jpeg)    * @return    */public Boolean checkFileIllegal(MultipartFile file, String fileName, String typeStr) {    if (!file.isEmpty()) {        if (StringUtils.isNotBlank(file.getContentType())) {            String type = null;            try {                type = getFileType(file.getInputStream());            } catch (IOException e) {            logger.error("checkFileIllegal->getFileType->error:" + e.getMessage());            return false;        }        if (null != type && -1 != typeStr.indexOf(type)) {            int index = fileName.lastIndexOf(".");            if (StringUtils.isNotBlank(fileName) && -1 != index) {                String fileType = fileName.substring(index).toLowerCase();                if (-1 != typeStr.indexOf(fileType)) {                    return true;                    }                }            }        }    }    return false;}/** * 根据文件的输入流获取文件头信息 * @return 文件头信息 */public static String getFileType(InputStream is) {    byte[] b = new byte[4];    if (is != null) {        try {            is.read(b, 0, b.length);        } catch (IOException e) {            e.printStackTrace();        }    }    return mFileTypes.get(getFileHeader(b));}

总结

以上所说就是本文关于Java项目安全处理方法的全部内容,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • javaWeb项目部署到阿里云服务器步骤详解

    记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以完成打包,如下图: 2.安装Xshell和Xftp两种软件 简单介绍下这两种软件作用(详情请百度相关文档) Xshell:通过网络连接到远程服务器主机. Xftp:能在Linux.Unix和Windows之间互传文件. 3.通过Xshell连接远程主机,如下图    4.创建会话完成,点击连接,显示

  • java实现ATM取款项目

    项目要求: 1.用户需要从控制台输入账号密码,账号或者密码不正确报异常 2.每日取款的金额有限制(100,30000),否则报异常 3.每次取款都要有记录,并在下一次取款时显示出来 思路: 1.先在"银行类"里生成一些用户(跳过了注册环节) 2.可使用List集合存储取款日志 3.可使用Map集合将"用户名"和对应的用户信息建立"键值关系" 4.使用while循环控制流程 项目实现代码: 管理类(含main方法): import java.uti

  • java如何实现项目启动时执行指定方法

    本文实例为大家分享了java项目启动时执行指定方法,供大家参考,具体内容如下 想到的就是监听步骤如下: 1.配置web.xml <listener> <listener-class>com.listener.InitListener</listener-class> </listener> 2.编写InitListener类 package com.listener; import java.io.File; import javax.servlet.Ser

  • Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法

    前言 本文主要介绍的是关于Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法,分享出来供大家参考学习,下面来看看详细的介绍: 实现方法: 数据源在配置文件中的配置 <pre name="code" class="java"><?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.spring

  • Java项目安全处理方法

    一.URL中参数显示问题,解决方案: 1.普通Get请求修改为Post请求 2.参数加密(js加密,Java解密) 二.Mybatis模糊查询中,sql拼接问题,解决方案方案: 1.使用安全的符号和方法,xml中拼接示例: <if test="stateList != null"> state in <foreach close=")" collection="stateList" index="index"

  • IntelliJ IDEA 2022.1.1创建java项目的详细方法步骤

    目录 前言 1.创建一个新项目 2.配置项目参数 3.新建一个模块 4.配置项目结构 5.新建个类 6.开心敲代码 总结 前言 新版idea对许多窗口进行了改变,若老师用的版本不一样的话,作为初学者可能跟不上老师的节奏,我学习的时候看见操作不一样就很迷茫,后来研究了一下,分享一下自己的操作,如有错误,还希望大家多多批评指正. 1.创建一个新项目 首次打开IntelliJ IDEA 2022.1.1后,是这个窗口.先NEW它一个Project! 2.配置项目参数 点击NEW PROJECT之后,就

  • 使用eclipse创建java项目的方法

    本文为大家分享了如何使用eclipse创建java项目,供大家参考,具体内容如下 首先,打开Eclipse,在工具栏依次点击[File]>>>[New]>>>[Other],这个窗口显示的所有我们可以新建的项目类型,上面有个搜索框可以输入你想新建什么样的项目 我们在搜索框里输入[java],然后下面会列出符合要求的列表,我们点击一下[Java Project],然后点击[Next] 这里要输入你JAVA项目的名称了,我测试一下,就输入HelloWorld,你可以输入你想

  • 记一次用IDEA打开java项目后不能运行的解决方法

    有时候想运行别人的项目,但是别人的项目并非IDEA项目(甚至只有源码),当我们打开项目时候,并不能运行,我们却不知道怎么办.经过多次查找和尝试,最终终于能够运行起来了.记一下解决的方法. 这是源码打开的项目 首先,查看sdk是否设置了.可以在 File=>Project Structure=>Project里面查看并设置. 但是,设置后还是不可以运行.如下图: 设置SDK后的 我们可以发现,src跟可以正常运行的项目的src颜色不一样: 正常可运行项目 原来,是IDEA不能自动对源代码识别出来

  • 为Java项目添加Redis缓存的方法

    Redis的安装 Redis一般有Linux和Windows两种安装方式,Windows的最高版本为3.2,Linux的最高版本为5.0,大家可以根据自己的需要添加 Linux 首先在linux下安装docker,在docker环境下安装redis5.0的镜像 docker pull redis:5.0 然后使用Docker命令启动Redis容器 docker run -p 6379:6379 --name redis \ -v /mydata/redis/data:/data \ -d red

  • java项目导出为.exe执行文件的方法步骤

    将java项目导出为.exe执行文件需要借助于第三方软件,本文我们选择jar2exe软件. 第一步:先安装jar2exe软件,安装直接选择默认步骤即可. 第二步:需要将项目导出为jar文件,请参考上一篇文章. 第三步:打开Jar2Exe Wizard 2.5 第四步:选择你要输出的jar文件全路径以及所使用的平台,运行时JRE的版本,建议选此软件支持的最低版本和最高版本即可. 第五步:选择是控制台程序.图形化界面或服务器程序 .本文所操作的项目时GUI的 第六步:选择运行的主类 第七步:对应字节

  • 关于Java 项目封装sqlite连接池操作持久化数据的方法

    Sqlite sqlite是C实现的一个开源SQL引擎,其api提供sql语法支持,通过sql解析后对存储层的磁盘文件进行操作,完整配置的sqlite库小于400kb,多用于移动端应用,小型项目中. 对Sqlite有兴趣的可以了解下其体系结构 之前自研SQL解析器的时候便是借鉴了SQLcompiler的源码,这里不展开介绍 封装Java的Sqlite连接池 首先maven项目引入依赖sqlite-jdbc,其主要是java版的sqliteapi,关于Sqlite api的操作,大家可以看菜鸟教程

  • Java项目实现定时任务的三种方法

    目录 1 使用java.util.Timer 2 使用ScheduledExecutorService 3 使用Spring Task 总结 1 使用java.util.Timer 这种方式的定时任务主要用到两个类,Timer 和 TimerTask,使用起来比较简单.其中 Timer 负责设定 TimerTask 的起始与间隔执行时间. TimerTask是一个抽象类,new的时候实现自己的 run 方法,然后将其丢给 Timer 去执行即可. 代码示例: import java.time.L

  • IntelliJ IDEA Java项目手动添加依赖 jar 包的方法(图解)

    1. 事先下载完成需要的javacsv.jar包.  java项目在没有导入该jar包之前,显示如下图所示 2. 点击 File -> Project Structure(快捷键 Ctrl + Alt + Shift + s),点击Project Structure界面左侧的"Modules"显示下图界面 3. 在 "Dependencies" 标签界面下,点击右边绿色的 "+"号,选择第一个选项"JARs or director

随机推荐