java web安全小习惯

作者: littlebin404 | 来源:发表于2019-07-10 00:05 被阅读0次

    在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安全小习惯

        本文链接:https://www.haomeiwen.com/subject/ykjqkctx.html