AppScan 보안 문제 해결 실 록 - 크로스 사이트 위조 요청
2603 단어 안전 공격
크로스 오 버 공격 요청 은 쉽게 말 하면 공격 자가 일부 기술 수단 을 통 해 사용 자 를 속 이 는 브 라 우 저 를 통 해 자신 이 인증 한 사 이 트 를 방문 하고 일부 조작 (예 를 들 어 메 일 을 보 내 고 메 시 지 를 보 내 며 심지어 재산 조작, 예 를 들 어 이체 와 상품 구 매) 을 실행 하 는 것 이다.
장면: 1 포럼 에서 제출 한 링크 2 낚시 사이트
예: 만약 에 한 은행 이 이체 작업 을 실행 하 는 URL 주 소 를 다음 과 같이 사용한다 면:http://www.examplebank.com/withdraw?account=AccoutName&amount=1000&for=PayeeName그러면 악의 적 인 공격 자 는 다른 사이트 에 다음 과 같은 코드 를 설치 할 수 있 습 니 다. < imgsrc = "http://www.examplebank.com/withdraw?account=Alice&amount=1000&for=Badman"> Alice 라 는 계 정 사용자 가 악성 사 이 트 를 방문 한 지 얼마 되 지 않 아 로그 인 정보 가 만 료 되 지 않 았 다 면 1000 원 의 자금 을 손실 할 것 입 니 다.
일반적으로 CSRF 공격 을 방어 하 는 세 가지 방법 이 있 습 니 다. token 을 검증 하고 HTTP 요청 을 검증 하 는 Referer, 그리고 XML HttpRequests 의 사용자 정의 header 를 검증 합 니 다.
해결 방안
필터 설정 refer 비 본 사이트 요청 차단
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 org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class CSRFilter implements Filter {
private String[] verifyReferer = null;
private static Log log = LogFactory.getLog(CSRFilter.class);
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String referer = ((HttpServletRequest)request).getHeader("Referer");
boolean b = false;
for(String vReferer : verifyReferer){
if(referer==null || referer.trim().startsWith(vReferer)){
b = true;
chain.doFilter(request, response);
break;
}
}
if(!b){
log.error(" CSRF ,referer:"+referer);
}
}
public void init(FilterConfig filterConfig) throws ServletException {
String referer = filterConfig.getInitParameter("referer");
this.verifyReferer = referer.split(",");
}
}
웹. xml 설정 필터
csrfFilter
com.filter.CSRFilter
referer
localhost
csrfFilter
/*