java web安全小习惯

在java web编程中,要注意一些安全问题,sql注入、任意文件上传、文件下载漏洞、数据库密码泄露等,可以多参考owasp top 10的常见漏洞,结合fortify白盒测试工具中漏扫结果,养成一个良好的编程习惯!下面分享一下开发的一些小习惯:

防范sql注入:

在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。一定要做到:

1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;

2.使用参数化(PreparedStatement);

小习惯:1.StringEscapeUtils.escapeSql(request.getParameter("id"))//StringEscapeUtil是common-lang包中的一个类,其中escapseSql方法可以起到对参数的sql注入有效过滤;

2.在进行sql语句执行时,要对sql语句进行示例话,避免进行sql拼接:

PreparedStatement pstmt = null;// 定义数据库操作对象

ResultSet rs = null;

sql = "select * from user where id=?";

pstmt = conn.prepareStatement(sql);// 实例化操作

pstmt.setString(1, id);

rs=pstmt.executeQuery();// 取得结果

因为sql注入只对sql语句的准备(编译)过程有破坏作用,而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理;而不再对sql语句进行解析,准备,因此也就避免了sql注入!

防范文件上传漏洞:

文件下载链接是程序员经常遇到的情景,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:

--验证文件类型、大小;

--对文件进行一定复杂的重命名;

--不要暴露文件上传后的路径;

小习惯:

String[] strArray = fileName.split("\\.");

intsuffixIndex = strArray.length -1;

strArray[suffixIndex];获取到文件名后缀进行白名单判断;

upload.setFileSizeMax(30*1024*1024);//单文件30M

upload.setSizeMax(50*1024*1024);//设置总文件大小50M,

String uuid = UUID.randomUUID().toString();//将文件进行复杂重命名,使用uuid可以避免文件覆盖.

String savePath = this.getServletContext().getRealPath("/WEB-INF/upload/" + uuid);//放到/WEB-INF/upload/安全目录下。

防范文件下载漏洞:

例如,先向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后会开始执行下载方法,最后将该文件名对应的文件response给浏览器完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞,如localhost:8080/XX/filedown?filename=../../web.xml,../这些特殊字符就可能造成文件信息泄露!

小习惯:

// 过滤特殊字符

public static String StringFilter(String str) throws PatternSyntaxException {

// 只允许字母和数字 // String regEx ="[^a-zA-Z0-9]";

// 清除掉所有特殊字符

String regEx = "[`~!@#$%^&*()+=|{}':;',\\[\\]<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";

Pattern p = Pattern.compile(regEx);

Matcher m = p.matcher(str);

return m.replaceAll("").trim();

}

数据库密码泄露:

很多程序员喜欢把数据库密码写在代码中,存在反编译被攻击者窃取的风险,我们可以将代码写在配置文件中!


java web安全小习惯_第1张图片
java web安全小习惯_第2张图片

好了,今天的编程小习惯就分享到这里,让我们做一名具有安全编程思想的快乐码农呗!!!

你可能感兴趣的:(java web安全小习惯)