웹 응용 프로그램에서 작업 중이며 릴리스 전에 VAPT
을 실행해야합니다. 다음과 같이 request.getHeader ("Origin")가 교차 사이트 요청 위조 공격을 방지하는 방법은 무엇입니까?
. CORS는 서버가 교차 사이트 요청에 대한 리소스 액세스를 특정 신뢰할 수있는 도메인 으로 제한 할 수있는 메커니즘을 제공합니다. 해당 서버는 "Access-Control-Allow-Origin"응답 헤더의 값을 와일드 카드 값으로 설정하여 모든 출처에서 리소스 을 허용했습니다. 모든 사이트가 출처에 관계없이 액세스 리소스에 요청을 보낼 수 있으므로 보안 위험이 있습니다.그런 다음 나는 다음과 같이 대답 제안 그것을 해결하기 위해 해결책을 찾기 시작 this 포스트를 가로 질러 와서
filter
을 구현 :
이제
@Component
public class CORSFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods",
"POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(request, response);
}
public void destroy() {
}
}
, 다시 내가 웹 애플리케이션에 대해 베가를 스캔 할 때, 그것은 동일한 문제를 다시 열거하지 않았다. 나는 CSRF
공격에 대한 나의 webapp을 저장했다고 생각한다. 내가 요청 헤더 자체에서 "Access-Control-Allow-Origin"
을 따기입니다으로 지금
, this 게시물을 읽은 후, 나는 request.getHeader("Origin")
원점 중 하나 https://webapp.com 또는 https://evil.com 무엇이든 같이 Cross Site Request Forgery attacks
에서 방지하는 방법을 통해 생각하고, 요청은 항상 응용 프로그램에 대한 유효합니다.
누구나 request.getHeader("Origin")
을 어떻게 설정하면 CSRF attacks
에서 절약 할 수있는 개념을 이해할 수 있습니까?
감사합니다.
이해 한 후 읽기 @rism 응답 패트릭 Grimard post : 클라이언트 응용 프로그램이 AJAX 요청을하면 브라우저가 처음 클라이언트가 수행 할 수 있는지 결정하기 위해 서버에 프리 플라이트 OPTIONS
요청을 전송
, GET
이외의 요청인데 응답 헤더의 일부로 Access-Control-Allow-Origin
을 원점 또는 특정 도메인으로 설정해야하는 이유입니다. 클라이언트가 요청을 보낼 때 POST
의 예를 촬영
, 브라우저는 먼저 서버와 OPTIONS
요청에 대한 서버 응답에 프리 플라이트 OPTIONS
요청이 모든 origin
요청이 허용되는 브라우저를 지시 헤더를 포함한다. response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
사이트를 추가하는 것 외에도 여전히 취약한 사이트이므로 whitelist
은 here으로 완료되거나 (here) Tomcat에서 IP가 Apache (클러스터에 배포 된 응용 프로그램 용)에서 명시 적으로 필요합니다.
아직도 나는 우리가 서버 수준 자체에서 IP 주소를 제한하는 경우, 하나의 의심이보다 더 우리가 정말 응답 헤더의 한 부분으로
"Access-Control-Allow-Origin"
을 설정해야합니까?
최신 스프링 보안 버전을 사용하는 경우에는 cors 지원이 내장되어 있으므로 필터를 쓸 필요가 없습니다. – xenoterracide
예 IP 제한으로 인해 ACAO 헤더를 보낼 필요가 있지만 그래도 ACAO 헤더를 보내야합니다. 바인딩 된 IP 범위의 경우 요청은 여전히 교차 원점이 될 수 있습니다.따라서 IP 제한이 허용 목록으로 작동 할 수는 있지만 ACAO 헤더없이 CORS를 수행 할 수는 없습니다. a.example.com에서 b.example.com으로의 요청조차도 교차 원점이며 AJAX를 사용하는 경우 CORS 헤더가 필요합니다. – rism
CORS는 실제로 HTML5 사양의 클라이언트 측 기술 부분입니다. 클라이언트 측 브라우저에서 AJAX 요청에 대해 이야기하고 있다고 가정합니다. 그렇지 않으면 실제로 서버 대 서버 호출에 대해 이야기하는 경우 CORS는 서버가 아닌 동일한 출처 정책을 적용하는 브라우저이므로 모든 관련이 없습니다. – rism