jsp
  • struts2
  • xss
  • fortify
  • esapi
  • 2017-03-20 20 views 0 likes 
    0

    HP Fortify에서 내 애플리케이션을 스캔하고 문제가 발생했습니다. 교차 사이트 스크립팅 : 유효성 검사 불량. ESAPI 라이브러리를 사용하고 있습니다. Struts 애플리케이션에서이 결과를 얻고 있습니다. 크로스 사이트 스크립팅을받는 중입니다. 빈 클래스에 대한 struts 호출에 대한 유효성 검증이 올바르지 않습니다.

    <%@ taglib prefix="s" uri="/struts-tags" %> 
    <form method='post' name='<s:property value='tableBean.formName'/>' action='Notification.action'> 
    
    public String printApplications() throws IOException, ServletException { 
        request.setAttribute(TableDisplayBean.TABLE_BEAN, tableBean); 
    } 
    

    은 무엇 tableBean.formName를 인코딩하는 ESAPI를 사용하기에 적합한 구문 것입니까?

    +0

    왜 동적 '이름'을 양식에 설정합니까? –

    +0

    원래 구현을 코딩하지 않았습니다. 이것은 상속 된 레거시 코드입니다. 내 임무는 전체 구현을 변경하지 않고 Fortify 결과를 수정하는 것입니다. –

    +0

    질문 : "formName"은 사용자가 제어 할 수 있습니까? 그것이 아니라면, 내가 추천 한 esapi 버전조차도 논점이되며 거짓 긍정으로 표시 될 수 있습니다. – avgvstvs

    답변

    1

    하기 전에, 귀하의 경우에는

    <%@ taglib uri="/WEB-INF/tld/esapi.tld" prefix="esapi" %> 
    <html lang="<esapi:encodeForHTMLAttribute>${myvar}</esapi:encodeForHTMLAttribute>"> 
    

    를 동적 받고있어 값이 삽입되어 있기 때문에 "이름"으로 HTMLAttribute를 사용

    <html lang="${myVar}"> 
    

    적절한 구문은 다음과 같을 것이다 태그의 속성. 그것이 p- 태그에서 말하는 경우라면 esapi:encodeForHTML을 사용합니다. 또한

    <p> 
    <esapi:encodeForHTML>${myVal}</esapi:encodeForHTML> 
    </p> 
    

    값은 esapi:encodeForJavaScript 렌더링에 자바 스크립트 기능에 의해 수신 될 경우.

    인코딩에는 항상 적절한 컨텍스트가 있으며 컨텍스트에는 "이 데이터를 처음받는 통역자는 무엇입니까?"라는 질문에 응답됩니다.

    ===============================

    충분히 명확하지 않았습니다. 필자가 제공 한 예제는 원시 HTML로 저장되는 것처럼 들릴 때 HTML 속성에서만 이스케이프 처리됩니다. 위의 일반적인 예가 수정되었습니다.

    <form method='post' name='<s:property value=<esapi:encodeForHTMLAttribute>'tableBean.formName'<esapi:encodeForHTMLAttribute>/>' action='Notification.action'> 
    

    내가 JSTL 구문에 사용 해요, 그래서 100 % 확신 여기 변수를 포장하는 가장 좋은 방법이 아니에요 :

    당신의 예제를 사용하려고합니다. 당신은 그걸 가지고 놀아야 할 것입니다. 당신은 더 나은 그것을 사용하는 방법을 이해하는 property tag reference을 읽어야

    public class TableBean{ 
        String formName; 
        public String htmlAttributeEscapedFormName(){ 
         return ESAPI.encoder().escapeForHTMLAttribute(formName); 
        } 
    } 
    
    +0

    이 접근법을 시도해 보니 Fortify는 "Medium XSS Scripting Poor Validation"대신 "Critical XSS Scripting Reflected"로 플래그를 붙였습니다. 원래 예제가 불완전하기 때문에 –

    +0

    @RichardSandoz입니다. 그러나 문제가 여전히 있다면, 두 번째 제안을 시도하고 빈 레벨에서 탈출을 처리 할 것입니다. struts를 알지 못하는 것에 대한 사과는 구문을 더 잘 볼 수 있습니다! – avgvstvs

    0

    : 양자 택일로, 당신은 같이 것이다 tableBean.attributeEscapedFormName 같은 tableBean에 메서드를 추가 할 수 있습니다.

    값의 속성을 가져 오는 데 사용되며 기본값이 지정되지 않은 경우 스택 의 맨 위에 표시됩니다.허용 된 매개 변수

    동적 속성 : 값 속성은 컬럼에 대한 값을 탈출하는 CSV (유용 탈출 여부

    • escapeCsv 거짓 거짓 거짓 부울 null의 경우

      기본 false 값은 사용되는)

    • escapeHtml false true true false 부울 여부 HTML을 이스케이프할지 여부
    • escapeJavaScript false false false 부울 esc 여부 원숭이 자바 스크립트
    • escapeXml 거짓 거짓 거짓 부울

    예 표시 할 XML을

  • value 거짓 거짓 개체 값을 탈출할지 여부 :

    <s:push value="myBean"> 
    
    <!-- Example 1: --> 
    <s:property value="myBeanProperty" /> 
    
    <!-- Example 2: -->TextUtils 
    <s:property value="myBeanProperty" default="a default value" /> 
    </s:push> 
    

    예 1 인쇄에서 myBean의 getMyBeanProperty의 결과를() 방법. 예제 2는 myBean의 getMyBeanProperty() 메소드의 결과를 인쇄하고, null 인 경우 '기본값'을 대신 인쇄합니다.

  • +0

    원래 구현을 코딩하지 않았습니다. 이 패턴은 실제로 레거시 코드베이스 전체에서 수 백 곳에서 발생합니다. 그것은 실제로 일하고 있습니다. 내 일은 요새를 전하는 ' $ {tableBean.formName}'와 같은 것으로 ''항목을 대체하는 것입니다. . 이 예에서는 문제가 해결되지 않았지만 실제로는 중급에서 중급으로 이동하므로 사용할 수 없습니다. –

    +0

    그리고 네, 스트럿츠 taglib의 여러 가지 탈출 특성을 실험했고 Fortify 결과를 수정하는 주요 문제를 해결할 수 없었습니다. 심지어는 nutshellsoftware.org에서 struts의 부분을 커스터마이징하는 방법까지 찾아 냈습니다. 스트럿츠를 업그레이드 지원 등으로 써드 파티 라이브러리에서 할 수 없었습니다. –

    +0

    @RichardSandoz 예, 업그레이드에는 지원이 필요하지만 struts 팀에서는 생산하지 않았습니다. 재 작성해야하는 많이 사용되지 않는 자료. 보통 업그레이드 후 응용 프로그램이 작동을 멈추고 아무도 문제의 원인을 풀지 않으면 문서와 소스 코드를 파야합니다. 일부 타사 도구는 프레임 워크 기능에 대한 지식이 부족하거나 잘못된 결과와 관련된 다른 소프트웨어로 인해 잘못된 결과가 발생할 수 있습니다. Struts가 최대한의 안전성을 가지고 어떻게 컨텐트를 벗어나는 지 확인하려면 모든 속성을 사용하는 것이 좋습니다. –

     관련 문제

    • 관련 문제 없음^_^