사용하기 쉬운 CSRF 크로스 스테이션 요청 위조 도구 클래스
18930 단어 SpringBoot 프레임안전 보호SQL 주입
package com.faw.***.common.xss;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CSRFFilter implements Filter {
private FilterConfig filterConfig = null;
@Override
public void destroy() {
this.filterConfig = null;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("== CSRF ===");
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
// http Referer
String referer = req.getHeader("Referer");
// referer
String myReferer = filterConfig.getInitParameter("referer");
int count = 0;
if (myReferer !=null){
if (myReferer.trim().length() > 0) {
String[] myReferers = myReferer.split(",");
for (int i = 0; i < myReferers.length; i++) {
if (referer != null && !referer.trim().startsWith(myReferers[i])) {
count++;
} else {
chain.doFilter(request, response);
break;
}
}
if (count == myReferers.length) {
System.out.println(" 1:" + HttpServletResponse.SC_BAD_REQUEST);
resp.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
}
}
System.out.println("== CSRF ===");
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
}
도구 클래스가 완료되었습니다. 다음은 Filter 필터 구성 파일에 도구 클래스를 등록하여 사용하는 것입니다.
package com.faw.***.common.config;
import com.faw.***.common.xss.CSRFFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.DelegatingFilterProxy;
import com.google.common.collect.Maps;
import java.util.List;
import java.util.Map;
import javax.servlet.DispatcherType;
/**
* Filter
*/
@Configuration
public class FilterConfig {
@Value("#{'${referer-domains}'}") // 1
private String domains;
@Bean
public FilterRegistrationBean csrfFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setDispatcherTypes(DispatcherType.REQUEST);
registration.setFilter(new CSRFFilter());
registration.addUrlPatterns("/*");
registration.setName("csrfFilter");
registration.setEnabled(true);
Map<String, String> initParameters = Maps.newHashMap();
initParameters.put("referer", domains);
registration.setInitParameters(initParameters);
registration.setOrder(Integer.MAX_VALUE-2);
return registration;
}
}
메모 1: 매개변수 domains는 메서드 initParameters입니다.put("referer",domains)는 사이트에 합법적으로 접근하는 도메인 이름을 제공합니다. @Value("#"${referer-domains}"}")는 응용 프로그램 프로필에서 설정 파라미터 값을 꺼내는 데 사용됩니다.본 프로젝트의 쓰기 방법은 다음과 같습니다.
referer-domains: http://localhost,http://119.*.**.***
본 컴퓨터의 IP도 사용할 수 있고 테스트 서버의 IP도 합법적인 도메인 이름으로 사용할 수 있음을 나타냅니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 보안 WebViewUXSS 취약점0X01 머리말 XSS는 우리가 비교적 익숙한 공격 방식으로 저장형 XSS, 반사형 XSS,DOM XSS 등을 포함하지만 UXSS(유니버설 XSS)의 또 다른 빈틈 유형은 주로 빈틈의 캐리어와 영향 범위에 나타난다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.