문제

Java의 MVC 웹 응용 프로그램에 대한 매우 기본적인 질문이 있습니다.

Seam과 같은 현재 기술까지 원시 JSP의 옛날 이후, 매우 기본적인 패턴은 항상 컨트롤러의 내부 디스패치였습니다. 처음에는 클라이언트로 전송 될 출력을 생성하는 뷰 레이어에 대한 요청을 수락했습니다.

이 내부 디스패치는 일반적으로 Servlet 컨테이너에 URL을 사용하여 새 리소스를 요청하여 메커니즘이 추가 구성 계층을 통해 숨겨져있을 수 있지만) 수행됩니다. 이 URL의 매핑은 "실제"URL을 외부에 정의하는 동일한 web.xml에 의해 수행됩니다.

특별한 조치를 취하지 않으면 뷰 레이어에 직접 직접 액세스 할 수 있습니다. "register.seam"을 우회하고 "registered.xhtml"로 직접 이동할 수있는 이음새 "등록"데모를 목격하십시오. 이것은 잠재적 인 보안 문제입니다. 최소한 템플릿 소스 코드가 누출됩니다.

나는 이것이 기본 샘플 응용 프로그램 일 뿐이라는 것을 알고 있지만, 이러한 내부 자원을 외부에 보이지 않는 것을 선언하려면 추가 조치를 취해야한다는 것도 이상합니다.

URL 진입 지점을 제한하는 가장 쉬운 방법은 무엇입니까?

내부 요청으로 만 액세스 할 수있는 Magic URL 경로 구성 요소 인 "Web-INF"디렉토리와 같은 것이 있습니까?

도움이 되었습니까?

해결책 4

나는 이제 내부 JSP를 넣는 몇 가지 응용 프로그램을 보았습니다. WEB-INF/jsp. 그것은 적어도 JSP와 속도를 위해 트릭을 수행하는 것 같습니다. 그것 JSF에서는 작동하지 않는 것 같습니다, 그렇지만.

다른 팁

사용하여 내부 리소스에 대한 액세스를 방지 할 수 있습니다. security-constraint 당신의 web.xml 배치 설명 자.

예를 들어 JSPS에 직접 액세스를 방지하기 위해 다음 구성을 사용합니다.

<!-- Prevent direct access to JSPs. -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>JSP templates</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint/> <!-- i.e. nobody -->
</security-constraint>

인터넷 요청이 AppServer에 직접 액세스 할 수 있도록 허용하지 않는 것이 좋습니다. 나는 웹 서버를 앞에 던지고, 그 안에, 특정 종류의 URL의 요청을 허용합니다. 사람들이 foo.com/jsps에 가기를 원하지 않습니까? 한 번에 모든 것을 제한하십시오.

주제에 대한 대화가 있습니다. 웹 -INF 뒤에 페이지가 숨겨져 있습니까?

이를 처리하는 한 가지 방법은 모든 요청의 요청 경로를 검사하고 각 요청을 그에 따라 처리하는 서블릿 필터를 구성하는 것입니다. 다음은 시작하는 데 도움이되는 링크입니다. Javaserver Pages (JSP) 및 JSTL- JSP를 사용한 액세스 컨트롤

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top