k4n5ha0

Results 42 issues of k4n5ha0

1、问题描述 java 代码安全规范的【1.4条】1.4 XML读写 需补充 2、解决建议 应补充下列编码规范: ```java // XStream安全编码示例 XStream xStream = newXStream(); // 开启安全模式,安全模式采用白名单限制输入的数据类型 XStream.setupDefaultSecurity(xStream); // 在白名单内添加一些基本数据类型 xstream.addPermission(NullPermission.NULL); xstream.addPermission(PrimitiveTypePermission.PRIMITIVES); xstream.allowTypeHierarchy(Collection.class); // 在白名单内添加一个包下所有的子类 xstream.allowTypesByWildcard(new String[] { Blog.class.getPackage().getName()+".*" }); ```

1、问题描述 java 代码安全规范的【1.8.1 条】 对称加密 需修改 2、解决建议 应修改下列编码建议: 建议使用AES,秘钥长度256位以上 (多个行业都要求aes最低为256位)

如果应用程序未正确校验用户输入的数据,则恶意用户可能会破坏应用程序的逻辑以执行针对客户端或服务器端的攻击。 脆弱代码1: ``` // 攻击者可以提交 lang 的内容为: // en&user_id=1# // 这将使攻击者可以随意篡改 user_id 的值 String lang = request.getParameter("lang"); GetMethod get = new GetMethod("http://www.host.com"); // 攻击者提交 lang=en&user_id=1#&user_id=123 可覆盖原始 user_id 的值 get.setQueryString("lang=" +...

``` jep290安全策略:全进程反序列化原则上使用白名单优先的设计模式,只有允许的类才能被反序列化,其它一律被阻止。 // 能被反序列化的流的限制 maxdepth=value // 单次反序列化堆栈最大深度 maxrefs=value // 单次反序列化类的内部引用的最大数目 maxbytes=value // 单次反序列化输入流的字节数上限 maxarray=value // 单次反序列化输入流中数组数上限 ``` ``` // 以下示例介绍了限制反序列化的类名称的配置方法 // 允许唯一类 org.example.Teacher ,输入字节数最大为100,并阻止其它一切的类 jdk.serialFilter=maxbytes=100;org.example.Teacher;!* // 允许 org.example. 下的所有类,输入字节数最大为100,并阻止其它一切的类 jdk.serialFilter=maxbytes=100;org.example.*;!*...

正则表达式(Regex)经常遭受拒绝服务(DOS)攻击(称为ReDOS),根据特定的正则表达式定义,当分析某些字符串时,正则表达式引擎可能会花费大量时间甚至导致宕机。 脆弱代码: ``` 符号 | 符号 [] 符号 + 三者联合使用可能受到 ReDOS 攻击: 表达式: (\d+|[1A])+z 需求: 会匹配任意数字或任意(1或A)字符串加上字符z 匹配字符串: 111111111 (10 chars) 计算步骤数: 46342 如果两个重复运算符过近,那么有可能收到攻击。请看以下例子: 例子1: 表达式: .*\d+\.jpg 需求: 会匹配任意字符加上数字加上.jpg 匹配字符串: 1111111111111111111111111...

将包含哈希签名的字节数组转换为人类可读的字符串时,如果逐字节读取该数组,则可能会发生转换错误。 所有对于数据格式化的操作应优先使用规范的数据格式化处理机制。 脆弱代码: ``` MessageDigest md = MessageDigest.getInstance("SHA-256"); byte[] resultBytes = md.digest(password.getBytes("UTF-8")); StringBuilder stringBuilder = new StringBuilder(); for(byte b :resultBytes) { stringBuilder.append( Integer.toHexString( b & 0xFF ) ); } return...

当在某些安全关键的上下文中使用可预测的随机值时,可能会导致漏洞。 例如,当该值用作: + CSRF令牌:可预测的令牌可能导致CSRF攻击,因为攻击者将知道令牌的值 + 密码重置令牌(通过电子邮件发送):可预测的密码令牌可能会导致帐户被接管,因为攻击者会猜测“更改密码”表单的URL + 任何其他敏感值 脆弱代码: ``` String generateSecretToken() { Random r = new Random(); return Long.toHexString(r.nextLong()); } ``` 解决方案: 替换 java.util.Random 使用强度更高的 java.security.SecureRandom ``` import org.apache.commons.codec.binary.Hex;...

攻击者可以构造恶意js注入到js引擎执行恶意代码,所以在java中使用js引擎应使用安全的沙盒模式执行js代码。 脆弱代码: ``` public void runCustomTrigger(String script) { ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"); // 不执行安全校验,直接eval执行可能造成恶意的js代码执行 engine.eval(script); } ``` 解决方案: java 8 或者 8 以上版本使用 delight-nashorn-sandbox 组件...

XPath注入风险类似于SQL注入,如果XPath查询包含不受信任的用户输入,则可能会暴露完整的数据源。这可能使攻击者可以访问未经授权的数据或恶意修改目标XML。 下面以登录验证中的模块为例,说明 XPath注入攻击的实现原理。 > 在应用程序的登录验证程序中,一般有用户名(username)和密码(password) 两个参数,程序会通过用户所提交输入的用户名和密码来执行授权操作。 > 若验证数据存放在XML文件中,其原理是通过查找user表中的用户名 (username)和密码(password)的结果进行授权访问。 例存在user.xml文件如下: ``` Ben Elmore abc test123 Shlomy Gantz xyz 123test ``` 则在XPath中其典型的查询语句如下: ``` //users/user[loginID/text()='xyz'and password/text()='123test'] ``` 正常用户传入 login 和 password,例如 loginID...

+ fastjson 版本应不低于1.2.76 + 如果不需要快速存储数据则应开启 fastjson 的 safeMode 模式 + 如需使用 fastjson 快速存储数据到redis中应使用 autotype 白名单进行数据存储 ``` // 开启safeMode模式,完全禁用autoType。 1. 在代码中配置 ParserConfig.getGlobalInstance().setSafeMode(true); 如果使用new ParserConfig的方式,需要注意单例处理,否则会导致低性能full gc 2. 加上JVM启动参数 -Dfastjson.parser.safeMode=true 3. 通过fastjson.properties文件配置。 通过类路径的fastjson.properties文件配置,配置方式如下:...