代码安全丨第七期:代码中不安全的反射漏洞缺陷
1、 什么是不安全的反射漏洞?
反射这一概念最早由编程开发人员Smith在1982年提出,主要指应用程序访问、检测、修改自身状态与行为的能力。这一概念的提出立刻吸引了编程界的极大关注,各种研究工作随之展开,随之而来引发编程革命,出现了多种支持反射机制的面向对象编程语言。
在Java编程语言中,Java反射机制主要提供了以下功能:
·在运行时判断任意一个对象所属的类;
·在运行时构造任意一个类的对象;
·在运行时判断任意一个类所具有的成员变量和方法;
·在运行时调用任意一个对象的方法;
·生成动态代理。
不安全的反射是指应用程序使用具有反射功能的外部输入来选择要使用的类或代码,可能被攻击者利用而输入或选择不正确的类或代码。如果发生这种情况,那么攻击者可能会创建开发人员不想要的逻辑路径。这些路径可能会绕过身份验证或访问控制检查,或者导致应用程序异常运行。执行未经授权的代码或命令、改变执行逻辑、崩溃、退出或重启,读取应用程序数据等。
2、不安全的反射漏洞的构成条件有哪些?
①不可靠的外部输入进入程序;
②程序使用外部输入进行实例化类并运行。
3、不安全的反射漏洞会造成哪些后果?
①攻击者可能能够执行攻击者无法直接访问的代码;
②攻击者可以在错误的位置或错误的时间调用其它代码,这可能会更改关键的系统状态。
③攻击者能够使用反射来调用错误的代码,使用违反API的意外参数,这可能导致应用程序退出或挂起。通过导致调用错误的代码,攻击者可能能够触发运行时错误,从而泄露错误消息中的敏感信息。
4、如何防范修补不安全的反射漏洞?
①重构代码以避免使用反射;
②尽量避免使用用户控制的输入来选择和加载类或代码。
5、不安全的反射漏洞样例: