2010-12-13 4 views
2

Struts에서 익숙해졌으며 JSF 2.0을 배우기 시작했습니다. 공격 벡터를 줄이기 위해 Struts에서 사용 된 것을 계속 사용하거나 코딩해야 할 새로운 공격 경로가 있습니까?JSF의 보안 문제는 무엇입니까?

답변

6

기본적으로 JSF/Facelets는 UIOutputUIInput 구성 요소의 출력을 이미 이스케이프 처리합니다. 따라서 사용자가 입력 한 내용을 <h:outputText><h:inputWhatever>으로 다시 표시하는 경우 XSS 부분은 안전합니다.

JSF는 javax.faces.ViewState 숨겨진 입력 필드로 CSRF에 대한 예방 기능을 내장하고 있습니다. JSF 2.1 이전 버전에서는 추측하기가 너무 쉽습니다 (JSF impl issue 812JSF spec issue 869 참조). 최근 (2010 년 10 월 3 일) JSF 2.1에서 수정되었습니다.

SQL injection 공격 방지는 웹 MVC 프레임 워크의 책임이 아닙니다. 데이터 레이어에서 해당 부분을 해결해야합니다. JPA를 올바르게 사용하면 (즉, SQL 문자열에서 사용자가 제어하는 ​​입력을 연결하지 않고 매개 변수가있는 쿼리를 사용하는 경우) 해당 부분도 안전합니다.

+0

@BalusC + 1 귀하의 의견을 기다리고 있습니다. UIOutput 및 UIInput을 다뤘습니다. – bakoyaro

+0

@BalusC 필터는 어떨까요? javax.faces.webapp.FacesServlet은 javax.servlet.Servlet'을 구현하기 때문에 필자가 작성한 Facelet을 통해 제공되는 모든 것에 대해 입력 및 출력 필터를 작성할 수 있어야합니다. – bakoyaro

+0

실제로 JSF는 Servlet API를 기반으로 실행됩니다. 실제로 JSF 웹 애플리케이션에서 서블릿 필터를 사용할 수는 있지만 XSS/CSRF/SQLI와 같은 보안 문제와 관련하여 유용하다는 것을 알지 못합니다. 가장 좋은 방법은 로그인 한 사용자를 기반으로 인증/권한 부여 검사를하는 것입니다. 필터에서 입/출력을 살균하는 것은 나쁜 생각 인 것입니다. 이것이 당신이 생각한 것입니다. 출력 이스케이프 (XSS 방지)는보기면에서만 수행해야합니다. 입력 이스케이프 (SQLI를 방지하기 위해)는 데이터 계층에서만 수행되어야합니다. – BalusC