问题描述
不安全的反射漏洞,是指应用程序使用具有反射功能的外部输入来选择要使用的类或代码,可能被攻击者利用而输入或选择不正确的类或代码。
攻击者可能通过该漏洞,执行未经授权的代码或命令、改变执行逻辑、读取应用程序数据等,严重的还会导致应用程序崩溃、退出或重启。
Bad Code
Class<?> clz = Class.forName(className);
解决方案
Class<?> clz = Class.forName(Normalizer.normalize(className,Normalizer.Form.NFC));
使用normalize方法对外部输入字符串做归一化/标准化,确保具有相同意义的字符串具有统一的二进制描述, 对外部输入字符串进行归一化后再校验可以避免一些潜在的问题。
但normalize方法也存在缺点,输入字符串太长的话转换效率会比较低,所以最好还是结合实际按需使用。
参考资料
CWE – http://cwe.mitre.org/data/definitions/470.html
不安全的反射漏洞 – https://blog.csdn.net/Tianqi_Wukong/article/details/112861781
Codedex Unsafe Reflection – https://blog.csdn.net/VioletHan7/article/details/103300534
Java之Normalizer(归一化):https://oscar.blog.csdn.net/article/details/105326270
关于Normalizer.normalize()方法的用途:https://blog.csdn.net/u010512607/article/details/79921353