zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    在做5道习题,个别习题有难度,需要很多天,加油把自己,有看到这个随笔的小伙伴评论可以留言讨论或发出你的答案~
    python中的open、close、read、write、len、exists
    python中的type
    python中strip、startswith、endswith
    python3_learn 实现文件夹内批量对图片重命名
    [转载]利用分块传输绕过WAF进行SQL注入
    bypass安全狗测试学习
    [转+自]SSH工作原理
    NCTF2019 小部分题解
    XML外部实体注入[转载]
  • 原文地址:https://www.cnblogs.com/hulian425/p/14739094.html
Copyright © 2011-2022 走看看