2009-05-16 2 views
1

주어진 유형의 매개 변수가있는 메소드에 대한 조언을 제공 할 수있는 방법이 있습니까? 나는 이것을 입력 필터링이 필요한 클래스에 사용할 계획이다.AspectJ의 주어진 유형의 매개 변수에 대한 조언 제공

내가 안전, 탈출, 버전의 내용을 대체 할 수 있도록이 클래스의 방법 중 문자열 매개 변수에 적용 조언을, 쓰고 싶은
@Filtered 
class Unsafe { 
    public void doStuff (String input) { ... } 

    public void doMoreStuff (String input, int value, String name) { ... } 
} 

(방지 : 예를 들어

예 : SQL 삽입).

그런 pointcut을 작성할 수 있습니까?

답변

0

둘 이상의 문자열을 가질 수 있기 때문에 다른 위치에서 어떻게 할 수 있는지는 알 수 없지만 두 클래스 모두 데이터베이스에 쓸 동일한 방법을 호출해야합니다. 그 시점에서 주변을 사용하여 문자열을 변경하여 안전하게 만들고 대신 전달할 수 있습니다.

+0

예, 나도 데이터베이스 계층에 그것을 할 수있는 실제 패턴 PATTERN_FOR_METHODS_THAT_TAKES_IN_SQL_STRING 교체,하지만 여전히 :

그리고 당신은 당신의 조언에 메소드의 인수를 확인하실 수 있습니다 cross-side-scripting injection을 막지 않습니다. 그러므로 나는 웹에서 입력을 먼저 받아들이는 정면에서 이것을하고 싶었다. 교활한. –

+0

필터링되지 않은 각 메소드 (@Unfiltered와 같은)별로 어노테이션을 작성한 다음 해당 어노테이션에 대한 애스펙트를 작성할 수는 있지만 대상으로 지정할 매개 변수를 계속 알아야 할 수도 있습니다. –

0

제 견해로, SQL 변환에 사용되는 모든 메소드에 대한 패턴이 있는지 알아야합니다.

Object around() : PATTERN_FOR_METHODS_THAT_TAKES_IN_SQL_STRING { 
    Signature sig = thisJoinPointStaticPart.getSignature(); 
    Object[] args = thisJoinPoint.getArgs(); 
    //Check the type of each object in the args, and re-format String type object 

    return proceed();// Continue with the current joint-point method 
} 

관련 문제