• spotbug 总结


    Public enum method unconditionally sets its field

    枚举类中set方法私有是一个安全的写法,如果共有可能会被恶意代码篡改

    尽管可变枚举字段可能用于延迟初始化,但将它们暴露于外部世界是一种不好的做法。请考虑删除此方法或将其声明为包私有。

    Potential JDBC Injection

    代码可能被SQL注入

    try (PreparedStatement statMent = conn.prepareStatement(sql)) {
                    ResultSet rs = statMent.executeQuery();
                    if (rs != null) {
                        while (rs.next()) {
                            String createTableDdl = rs.getString(2);
                            int firstIndex = createTableDdl.indexOf("(");
                            int lastIndex = createTableDdl.lastIndexOf(")");
                            String temp = createTableDdl.substring(firstIndex + 1, lastIndex);
                            String[] lines = temp.split("
    ");
                            for (String line : lines) {
                                // if (line.contains("UNIQUE KEY") || line.contains("unique key")) {
                                // 唯一性仅支持unique key来约束,不支持联合主键来约束
                                // primary key也是一种unique key
                                if (line.toUpperCase().contains("UNIQUE KEY")) {
                                    int lineFirstIndex = line.indexOf("(");
                                    int lineLastIndex = line.lastIndexOf(")");
                                    String lineTemp = line.substring(lineFirstIndex + 1, lineLastIndex);
                                    String[] columnSplit = lineTemp.split(",");
                                    // 注意索引顺序,否则执行不成功
                                    List<String> ukGroup = Lists.newArrayList();
                                    for (String columnTemp : columnSplit) {
                                        int columnNameFirstIndex = columnTemp.indexOf("`");
                                        int columnNameLastIndex = columnTemp.lastIndexOf("`");
                                        if (columnNameFirstIndex == -1 || columnNameLastIndex == -1) {
                                            // 判断含有UNIQUE KEY字符串可能会误判,这里再进一步判断一定要包含``
                                            ukGroup.add(columnTemp);
                                            continue;
                                        }
                                        String columnName = columnTemp.substring(columnNameFirstIndex + 1, columnNameLastIndex);
                                        ukGroup.add(columnName);
                                    }
                                    UniqueKey uniqueKey = new UniqueKey();
                                    uniqueKey.setUkColumnNameList(ukGroup);
                                    uksList.add(uniqueKey);
                                }
                            }
                        }
                    }
    
                }
    View Code

    SQL查询中包含的输入值需要安全地传递。预处理语句中的绑定变量可用于轻松降低SQL注入的风险。

    有风险的写法

    Connection conn = [...];
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery("update COFFEES set SALES = "+nbSales+" where COF_NAME = '"+coffeeName+"'");

    解决办法 :

    Connection conn = [...];
    conn.prepareStatement("update COFFEES set SALES = ? where COF_NAME = ?");
    updateSales.setInt(1, nbSales);
    updateSales.setString(2, coffeeName);

    Reliance on default encoding

    依赖系统默认编码

    result = RandomStringUtils.randomAscii(size).getBytes();
    result = RandomStringUtils.randomAscii(size).getBytes("UTF_8");

    Method may fail to clean up stream or resource

    一些stream或resource没有关闭的风险

    解决方法:try-with-resource

  • 相关阅读:
    新建项目
    Pandas常用操作
    Codeforces Round #764 (Div. 3)(CF1624)题解
    求1到n在模mod意义下的逆元
    [IOI2000] 回文字串 / [蓝桥杯 2016 省] 密码脱落(dp)
    持续集成:Jenkins Pipeline共享库定义和使用
    持续集成:Jenkins API使用方法详细介绍
    持续集成:Jenkins Pipeline语法介绍
    持续集成:Jenkins邮件通知配置方法介绍
    使用facebookwda进行iOS APP自动化测试
  • 原文地址:https://www.cnblogs.com/hulian425/p/14739094.html
Copyright © 2020-2023  润新知