2012-06-22 2 views
0

내가 API의 부정적인 시나리오를 테스트 할 필요가 ESAPI.validator(). isValidFileContent()를테스트 부정적인 시나리오. isValidFileContent()

내가 .EXE 및 .INI 파일의 바이트를 전달하는 시도 owasps 테스트가 통과 할 때 반환 유형은 true이며 유효한 파일 내용을 의미합니다.

무엇이 잘못된 파일로 간주됩니까?

ESAPI.properties에 구성이 필요합니까?

답변

0

일부 부정적인 테스트 시나리오를 찾으려면 api 메소드 정의와 모든 것을 검토해야한다고 생각합니다. 귀하는 REQUIREMENT에 따라 http://code.google.com/p/owasp-esapi-java/source/browse/trunk/src/org/owasp/esapi/reference/DefaultValidator.java?r=364&spec=svn364 링크가 더 도움이 될 수 있습니다. 귀하의 경험과 결과를 말해주십시오 ... 부정 시험 시나리오 - null이 허용되면 null은 허용되지 않습니다. 파일 크기가 등록 정보 파일에 미리 정의 된 값보다 많거나 동일한 메소드 (전달 된 세 번째 매개 변수)에서 전달 된 바이트 수보다 크면 예외가 발생합니다. 컨텍스트가 잘못 정의되거나 다른 컨텍스트가 파일을 업로드하는 데 사용되면 예외가 발생합니다. 그 외의 경우에는 유효한 파일 즉 true를 반환합니다.

IMPLEMENTATION BELOW: 
/** 
     * Returns true if input is valid file content. 
     */ 
     public boolean isValidFileContent(String context, byte[] input, int maxBytes, boolean allowNull) throws IntrusionException { 
       try { 
         getValidFileContent(context, input, maxBytes, allowNull); 
         return true; 
       } catch(Exception e) { 
         return false; 
       } 
     } 

/** 
     * Returns validated file content as a byte array. Invalid input 
     * will generate a descriptive ValidationException, and input that is clearly an attack 
     * will generate a descriptive IntrusionException. 
     */ 
     public byte[] getValidFileContent(String context, byte[] input, int maxBytes, boolean allowNull) throws ValidationException, IntrusionException { 
       if (isEmpty(input)) { 
         if (allowNull) return null; 
         throw new ValidationException(context + ": Input required", "Input required: context=" + context + ", input=" + input, context); 
       } 

       long esapiMaxBytes = ESAPI.securityConfiguration().getAllowedFileUploadSize(); 
       if (input.length > esapiMaxBytes) throw new ValidationException(context + ": Invalid file content can not exceed " + esapiMaxBytes + " bytes", "Exceeded ESAPI max length", context); 
       if (input.length > maxBytes) throw new ValidationException(context + ": Invalid file content can not exceed " + maxBytes + " bytes", "Exceeded maxBytes (" + input.length + ")", context); 

       return input; 
     } 

/** 
     * Helper function to check if a byte array is empty 
     * 
     * @param input string input value 
     * @return boolean response if input is empty or not 
     */ 
     private final boolean isEmpty(byte[] input) { 
       return (input==null || input.length == 0); 
     } 

지금 나는 당신이 당신의 "요건"에 따라 최적의 부정과 긍정적 인 테스트 시나리오의 일부를 개발할 수 있다고 생각합니다. 예 업로드 파일 크기를 등록 정보 파일에 정의해야합니다. n INVALID 파일은 위의 매개 변수에만 테스트를 통과시키지 만 ESAPI의이 방법에 따라 다른 사용자 정의 매개 변수에는 테스트를 통과하지 못합니다.

+0

입력 해 주셔서 감사합니다. 유감스럽게 생각합니다. 죄송합니다. 파일 내용에 대한 유효성 검사가 없다는 것을 알았습니다. 로직은 크기를 확인하기 위해서입니다. 입력이 명확하게 공격 인 경우, 메소드의 javadoc에 따라 'IntrusionException'을 발생시키는 것으로 가정합니다. 여기서 'IntrusionException'을 throw하는 코드가 없으므로 누구나이 부분을 밝힐 수 있습니다. –

+0

왜 받아 들여지지 않습니까? –

+0

@RKR - 이전 코멘트에서 말했듯이, 코드에서 어떤 일이 일어나고 있는지에 대한 명확성은 없습니다. 단지 문제를 해결하지 못해 아무도 대답 할 수 없다는 것을 의미했습니다. –