2017-12-19 5 views
0

펜 스케 칭이 없습니다. 필자는 테스트중인 애플리케이션이 꽤 많은 xss 취약점을 가지고 있음을 지적하는 취약점 분석을 실행했습니다.하드 코드 된 메시지 문자열에서 xss를 악용합니다.

여기에서 어떻게 진행하나요?

Report Screenshot

소스 코드 : HTML이 아닌

if(Name !=null) 
     { 

      if(Name.equals(server)) 
      { 
       String appName = request.getParameter("appName"); 
       if(appName !=null && appName.equals(CommonUtil.getProductName())) 
       { 
        message = addProductDetails(request, productName, message); 
       } 

      } 
      else if(Name.equalsIgnoreCase(test)) 
      { 

       ADSMPersUtil.updateSyMParameter("IS_INTEGRATED", "true"); 
       message = "Successfully Integrated";//No I18N 
      } 
      else{message = addProductDetails(request, productName, message);} 
     } 

     PrintWriter out = response.getWriter(); 
     response.setContentType("text/html");//No I18N 
     out.println(message); 
     out.close(); 
    } 
    catch(Exception e){e.printStackTrace();} 
} 

답변

0

message 경우는 HTML이 HTML 스트림에 삽입되기 전에 인코딩 할 필요가있다. <, >, ", ', &과 같은 문자는 해당 HTML 항목으로 변환해야합니다.

JSP의 경우 <c:out> 태그가이 인코딩을 수행하며 다른 템플릿 언어도 이와 비슷한 방법을 사용합니다.

Java에서 직접 OutputStream에 쓸 때 Java 메소드를 사용하여 이스케이프 처리를 수행 할 수 있습니다. 참조 : Recommended method for escaping HTML in Java

message이 이미 HTML 인 경우 HTML을 생성하는 코드도 마찬가지로 그 안에 삽입 된 데이터 값을 이스케이프 처리해야합니다.

이러한 특수 문자를 포함하지 않는 상수 문자열을 HTML 문자열 또는 일반 텍스트 문자열로 처리 할 수 ​​있습니다. 어쨌든 문자열을 출력 할 때이 문자열을 이스케이프하는 것이 더 강력합니다. 문자열이 미래에 변경 될 경우 XSS 문제가 발생하지 않도록 방지합니다. 특히 다른 방법으로 문자열을 만들면 더욱 그렇습니다.

관련 문제