`

ROP扫描服务方法因桥方法产生的BUG的解决

阅读更多
ROP的服务类通过@ServiceMethodBean进行注解,服务方法通过@ServiceMethod标注,ROP在启动时自动扫描Spring容器中的Bean,将服务方法写到服务注册表中.

最近发现了一个问题,是由于Java泛型的桥方法和合成方法引起的,下面举例说明:
package com.rop.session;

/**
 * 其中T是登录请求的类,而R是注销请求的类
 * @author : chenxh
 * @date: 13-10-16
 */

import com.rop.RopRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.UUID;

public abstract class AuthenticationService<T extends RopRequest,R extends RopRequest> {
    ...
    public abstract  Object logon(T logonRequest);


    /**
     * 该方法在子类在实现,并打上@ServiceMethod注解,作为注销的服务方法
     * @param loginRequest
     * @return
     */
    public abstract Object logout(R logoutRequest);

}


AuthenticationService定义了两个抽象方法,需要子类实现,以便实现登录认证.

子类实现如下:
@ServiceMethodBean
public class AppAuthenticationService extends AuthenticationService<LogonRequest,LogoutRequest> {

    public static final String USER_LOGON = "user.logon";
    public static final String USER_LOGOUT = "user.logout";

    ...

    @ServiceMethod(method = USER_LOGON, version = "1.0",
                  needInSession = NeedInSessionType.NO,ignoreSign = IgnoreSignType.YES)
    @Override
    public Object logon(LogonRequest logonRequest) {
         ...
    }

    @ServiceMethod(method = USER_LOGOUT, version = "1.0")
    @Override
    public Object logout(LogoutRequest logoutRequest) {
        ...
    }
}


AppAuthenticationService类中覆盖了抽象父类中的方法,并且对泛型进行了具化.

但是当ROP扫描服务方法时,服务方法的入参识别发生了错误,错将入参识别为RopRequest,而非
LogonRequest,LogoutRequest.

断点跟踪到注册服务方法时,发现AuthenticationService类居然有2个logon和2个logout方法:



1.logon(LogonRequest r)
2.logout(LogoutRequest r)

3.logon(RopRequest r)
4.logout(RopRequest r)

其中前两个方法是AuthenticationService中定义的方法,而后两个方法是为了实现泛型具化JAVA自动生产的方法,称为桥方法,可参见这篇文章的说明:
http://jiangshuiy.iteye.com/blog/1339105

后两个方法也有和前两个方法一样的@ServiceMethod注解,因此在ROP扫描时,就可以扫描到桥方法,而把真正的方法覆盖了.

JAVA的Method反射类中拥有判断是否是桥方法的方法:
Method#isBridge()


前两个方法返回的是false,而后两个方法返回的是true.

另外,桥方法也是合成方法(Synthetic),Method反射类中拥有判断是否是桥方法的方法:
Method#isSynthetic()


关于合成方法,亦请参考http://jiangshuiy.iteye.com/blog/1339105

为了避免ROP扫描到这些杂攻杂八的方法,因此ROP扫描程序做了以下的调整:
    private void registerFromContext(final ApplicationContext context) throws BeansException {
        if (logger.isDebugEnabled()) {
            logger.debug("对Spring上下文中的Bean进行扫描,查找ROP服务方法: " + context);
        }
        String[] beanNames = context.getBeanNamesForType(Object.class);
        for (final String beanName : beanNames) {
            Class<?> handlerType = context.getType(beanName);
           
          //1只对标注 ServiceMethodBean的Bean进行扫描
            if(AnnotationUtils.findAnnotation(handlerType,ServiceMethodBean.class) != null){
                ReflectionUtils.doWithMethods(handlerType, new ReflectionUtils.MethodCallback() {
                            public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException {
                                ReflectionUtils.makeAccessible(method);
...                            }
                        },
                        new ReflectionUtils.MethodFilter() {
                            public boolean matches(Method method) {
                            
                                //2不是合成方法,且标注了ServiceMethod的方法!!
                                return !method.isSynthetic() && AnnotationUtils.findAnnotation(method, ServiceMethod.class) != null;
                            }
                        }
                );
            }
        }
...
    }

  • 大小: 298.8 KB
分享到:
评论
6 楼 312350968 2014-11-10  
为什么rop的schema标签不识别呢。。
5 楼 stamen 2014-05-05  
我自己一直在用ROP 在生产环境下使用 使用情况良好哦。
4 楼 fisherhe 2014-04-29  
我看了一下你的ROP的开放平台,比较感兴趣,现在我们项目也需要一个服务性框架来做开放API,供各个商家或者系统进行调用,问一下,现在ROP在生产环境下运行的效果如何?
3 楼 筱龙缘 2013-12-21  
stamen 写道
年底吧 我现在项目一直在用,有不断更新,想等项目使用成熟后再更新。如果你需要最新的代码,短信给我 我在线发给你,谢谢。

支持 在你的书上看到介绍过来的  哈哈  更新吧
2 楼 stamen 2013-11-02  
年底吧 我现在项目一直在用,有不断更新,想等项目使用成熟后再更新。如果你需要最新的代码,短信给我 我在线发给你,谢谢。
1 楼 coolbeer 2013-10-28  
ROPhttps://github.com/itstamen/rop项目还更新么

相关推荐

    Rop开发手册

    Rop的设计灵感来源于大型网站服务开放平台的成功实践,为开发者提供了一套成熟的解决方案,使得他们能够快速构建类似淘宝服务开放平台的高效服务平台。 #### 二、Rop功能架构剖析 Rop的功能架构不仅包含核心的...

    Rop framework

    与传统的 WebService 框架(例如 CXF 和 Jersey)不同,Rop 不仅提供了 WebService 的核心功能,还针对服务开放平台中的应用层问题提供了多种解决方案。 **特点**: 1. **易于上手**:Rop 的设计使得开发者能够...

    rop demo完整用例

    本文档旨在提供一个学习和研究ROP的平台,通过实际操作理解ROP的工作原理和实施方法。如果你在学习过程中发现任何错误或有疑问,可以通过留言的方式提出,共同探讨和改进。 **相关知识点:** 1. **返回导向编程...

    rop轻松谈.pdf

    ret2libc和ret2text是ROP技術中使用的兩種攻擊方法。ret2libc攻擊方法是通過覆蓋函數返回地址,控制程式的執行流程,執行惡意代碼。ret2text攻擊方法是通過覆蓋函數返回地址,控制程式的執行流程,執行惡意代碼,並...

    rop开放平台

    随着技术的发展,许多现代操作系统和应用程序都采用了防止ROP的措施,如DEP(数据执行保护)和PIE(位置独立执行),但攻击者依然能够找到绕过这些防护的方法,因此ROP的研究仍然活跃。 在压缩包文件名称“rop-...

    ROP(Rest Open Platform)用户开发手册

    它不同于传统的SOAP Web Service和Rest Web Service这些Web Service 技术型框架,Rop是一个应用型的Web Service平台框架,它不但可以方便快捷地开发一个个Web Service服务,还提供了服务平台领域问题的整体解决方案...

    pwn学习资料整理——ROP技术(pwn_rop1)

    pwn学习资料整理——ROP技术(pwn_rop1)

    植物小G蛋白ROP的研究进展

    植物小G蛋白ROP的研究进展涉及了植物细胞信号传导系统中的关键调节因子ROP(Rho of Plants)蛋白,...未来ROP蛋白的研究将有助于在分子水平上理解植物生命活动,为植物的遗传改良和作物产量的提高提供新的思路和方法。

    rop-master.rar

    RopRop 开发类似于淘宝 开发类似于淘宝 开发类似于淘宝 开发类似于淘宝 服务开放平台 服务开放平台 服务开放平台 这样的服务平台 这样的服务平台 这样的服务平台 这样的服务平台 。RopRopRop充分借鉴了当前大型网站...

    基于淘宝开放平台开源的rop

    3. **ServiceMethodAdapter**:用于适配不同的服务方法调用,通过反射机制调用具体的服务方法。 4. **RopMarshaller**:将服务处理后的结果对象转换为特定格式的响应报文(如XML或JSON)。 5. **SecurityManager**:...

    rop编程入门

    ROP编程,全称Return-Oriented Programming,是一种高级的计算机安全攻击技术。它的核心思想在于利用程序中已存在的指令片段(称为gadgets)来实现攻击者的目的。这些gadgets以ret指令结束,通过巧妙地控制程序的...

    ROP(Rest Open Platform)开发指南

    综上所述,ROP(Rest Open Platform)开发指南提供了一套全面的REST服务开发框架,不仅解决了REST服务中的常见问题,还引入了一些创新性的解决方案,如统一的URL结构和细致的错误处理机制。这对于构建高效、稳定的...

    pwn学习资料整理——ROP技术(pwn_rop2)

    pwn学习资料整理——ROP技术(pwn_rop2)

    rop-sample.rar_.comrop_rop_rop源码下载_taobao netty

    在“rop-sample”中,我们可以看到如何将ROP技术与Netty结合,以创建安全的网络通信服务。具体来说,开发者可能通过以下步骤实现: 1. **识别和收集gadgets**:在目标程序中查找合适的返回导向片段,这些片段通常由...

    Nguyen:OptiROP——ROP gadgets搜寻神器

    9月25日,SyScan360 2013国际前瞻信息安全会议在北京国家会议中心举行。安全专家Nguyen Anh Quynh同与会者共同探讨《OptiROP:ROP gadgets搜寻神器》这一议题,并现场传授使用OptiROP的方法。

    rOpbaby-CTFPWN ROP练习题

    DefConCTF 2015 Quals CTFPWN ROP练习题 可用于练习基础的ROP

    hackme.inndy.tw的rop2题目

    这是https://hackme.inndy.tw/scoreboard/的rop2题目如果网站被墙或者关闭请从这里下载

    《一步一步学ROP之Android ARM 32位篇》 源码修改版之增加gadgets

    《一步一步学ROP之Android ARM 32位篇》是针对Android平台上的Return-Oriented Programming (ROP)技术的一本教程,旨在帮助读者深入理解并掌握如何在ARM 32位架构下利用ROP进行安全研究和逆向工程。在这个源码修改版...

    hackme.inndy.tw的rop题目

    hackme.inndy.tw的rop题目,如果那个网站被墙或者关闭的话可以从这里下载

Global site tag (gtag.js) - Google Analytics