Spring Boot 에서 Insecure CORS configuration 크로스 도 메 인 문제 가 발생 했 습 니 다.
질문 설명:
크로스 도 메 인 에서 CORS (Cross - Origin Resource Sharing) 기술 을 사 용 했 기 때문에 Access - Control - Allow - Origin 이 * 로 설정 되 었 을 때 공격 을 받 기 쉽다.
해결 방안:
프로젝트 1:
Access - Control - Allow - Origin 을 고정된 접근 URL 로 설정 합 니 다. springboot 프레임 워 크 에 서 는 @ CrossOrigin 주 해 를 사용 하여 방법 에 이 주 해 를 달 수 있 습 니 다.
예 를 들 어: @ CrossOrigin (origin = {"https://1.202.96.16:444”,”null”})
프로젝트 2:
응답 헤더 정보 설정
예: HttpServletResponserseponse
Response.setHeader(“Access-Control-Allow-Origin”,”https://1.202.96.16:444”);
프로젝트 3:
필 터 를 써 서 응답 헤드 를 설정 하고 가 져 온 Access - Control - Allow - Origin 이라는 헤드 정 보 를 검증 합 니 다. 인증 이 통과 되 지 않 으 면 이 헤드 정 보 를 비어 있 습 니 다.
importlombok.extern.slf4j.Slf4j;
@WebFilter(urlPatterns="/*")
@Slf4j
publicclass CorsFilter implements Filter {
@Override
publicvoid destroy() {}
public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest reqs = (HttpServletRequest) req;
String header = reqs.getHeader("Origin");
if (!PubFunc.isNull(header)) {
String[]split = header.split(":");
if(split.length> 1){
Stringreplace = split[1].replace("//", "");
if("https".equals(split[0]) &&FuncUtil.Isipv4(replace) ) {
response.setHeader("Access-Control-Allow-Origin",header);
response.setHeader("Access-Control-Allow-Credentials","true");
response.setHeader("Access-Control-Allow-Methods","POST, GET, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers","x-requested-with");
}else{
response.setHeader("Access-Control-Allow-Origin","");
}
}else{
response.setHeader("Access-Control-Allow-Origin","");
}
}else{
response.setHeader("Access-Control-Allow-Origin","");
}
chain.doFilter(reqs, response);
}
@Override
publicvoid init(FilterConfig arg0) throws ServletException {}
}
프로젝트 에 필터 (LoginFilter) 가 하나 더 있 기 때문에 이 헤더 정보 에 대한 검증 설정 도 필요 합 니 다.
protectedvoid send(HttpServletRequest request, HttpServletResponseresponse, Object args){
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
Stringheader = request.getHeader("Origin");
if(!PubFunc.isNull(header)) {
String[]split = header.split(":");
if(split.length> 1){
Stringreplace = split[1].replace("//", "");
if("https".equals(split[0]) &&FuncUtil.Isipv4(replace) ) {
response.setHeader("Access-Control-Allow-Origin",header);
response.setHeader("Access-Control-Allow-Credentials","true");
response.setHeader("Access-Control-Allow-Methods","POST, GET, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers","x-requested-with");
}else{
response.setHeader("Access-Control-Allow-Origin",null);
}
}else{
response.setHeader("Access-Control-Allow-Origin",null);
}
}else{
response.setHeader("Access-Control-Allow-Origin",null);
}
//response.setHeader("Access-Control-Allow-Origin","http://127.0.0.1");
response.setHeader("Access-Control-Allow-Credentials","true");
。。。。。。。。。。 。。。。。。。。。。。。。。。。。。
}
주의:
필 터 를 추가 한 후 입구 클래스 에 주석 (@ ServletComponentscan) 을 추가 하면 사용 할 수 있 습 니 다.
Ip 인증 여부
public static boolean Isipv4(String ipv4){
if(PubFunc.isNull(ipv4)){
return true;//
}
String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
// ip
if (ipv4.matches(regex)) {
//
return true;
} else {
//
return false;
}
}
이 문제 의 복 구 는 다른 두 가지 설정 방식 이 있 습 니 다.https://www.cnblogs.com/softidea/p/5751596.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.