Java 기반 Spring 웹 응용 프로그램에서 크로스 사이트 스크립팅 (XSS)을 방지하기 위해 노력하고 있습니다. 이 예제와 비슷한 서블릿 필터를 이미 구현했습니다. http://greatwebguy.com/programming/java/simple-cross-site-scripting-xss-servlet-filter/은 모든 입력을 애플리케이션에 위생 처리합니다. 추가 보안 수단으로 모든 JSP에서 응용 프로그램의 모든 출력을 위생적으로 처리하고 싶습니다. 나는 이것이 어떻게 행해지는지보기 위해 약간의 연구를 해왔고 두 가지 보완적인 선택을 발견했다.XSS를 방지하기 위해 c : out을 사용하는 대신
그 중 하나는 스프링의 defaultHtmlEscape
속성을 사용하는 것입니다. 이것은 구현하기가 매우 쉽습니다 (web.xml의 몇 줄). 출력이 봄 태그 (예 : 메시지 또는 양식 태그) 중 하나를 통과 할 때 훌륭하게 작동합니다. 내가 찾은 다른 옵션은 그러나 때문에 I가 (200 개 + JSP 파일) 작업하고있는 응용 프로그램의 크기로, 직접적으로 ${...}
같은 EL 표현식을 사용하는 대신 두 번째 방법은 완벽하게 작동 <c:out value="${...}" />
을 사용하는 것입니다. EL 표현의 부적절한 사용을 모두 c:out
태그로 대체해야하는 것은 매우 번거로운 작업입니다. 또한 앞으로 모든 개발자가 c:out
태그를 사용하는이 규칙에 충실하도록하는 것은 번거로운 작업이 될 것입니다 (코드가 얼마나 더 읽을 수 있을지는 말할 것도 없습니다).
적은 수의 코드 수정이 필요한 EL 식의 출력을 이스케이프 처리 할 수있는 다른 방법이 있습니까?
HTML을 이스케이프 처리하기 위해'fn : escapeXml'을 사용하지 마십시오.표준 HTML 엔티티가 아닌 '''을 생성합니다. –
@Roland : 아니요, 그렇지 않습니다. '''을 생성하고 HTML과 XML 모두에서 유효합니다 ('c : out'도 마찬가지입니다). – BalusC
아, 훌륭합니다. 그래서 나는 다른'escapeXml' 함수와 혼동을 불러 일으켰을 것이다. 확실하게, JSTL 명세에서이를 찾아 보았다. 명시 적으로 언급했다. –