비밀번호 변경, 결제 등 사용자 권한 확인이 필요한 중요기능을 수행할 때 웹 서비스 요청에 대한 유효성 검증방법 설계 및 유효하지 않은 값에 대한 처리방법을 설계해야 한다.
(입력데이터 검증 및 표현) 크로스사이트 요청 위조
중국의 해커에 의해 이루어진 것으로 추정되며, 사이트 간 요청 위조(CSRF) 공격 방식을 이용한 것으로
알려졌다. 해커는 OO의 관리자들에게 공격 코드가 포함된 전자 우편을 대량으로 송신하였다. 관리자가 전자 우편을
읽는 순간 거기에 포함된 코드를 실행하게 되었고, 그 결과 해커는 관리자의 인증 정보를 얻었다.
시스템으로 전송되는 모든 요청에 대해 정상적인 사용자의 유효한 요청인지, 아닌지 여부를 판별
(ㄱ) CSRF 토큰 사용
세션별로 CSRF 토큰을 생성하여 세션에 저장
사용자가 작업페이지를 요청할 때마다 hidden값으로 클라이언트에게 토큰을 전달
해당 클라이언트의 데이터처리 요청 시 전달되는 CSRF 토큰값과 세션에 저장된 토큰값을 비교하여 유효성을 검사 설계
CSRF 토큰값에 대한 검사 방법은 MVC프레임워크의 컴포넌트를 이용하여 데이터 처리 요청 수신 시 자동으로 검사될 수 있도록 설계
CSRF를 방어프레임워크와 라이브러리
Java : Spring Security, Apache Struts, Owasp CSRF Guard
Python : Django
Php : CSRF Protector
(ㄴ) 사용자와 상호 처리 기능 적용
CSRF토큰 방식도 XSS 취약점이 있는 사이트를 공격하게 되면 무력화 가능
CAPTCHA와 같은 사용자와 상호 처리 가능한 기법을 적용하여 위조된 요청이 차단 설계
(ㄷ) 재인증 요구
중요기능의 경우 재인증으로 안전하게 실제 요청여부를 확인하도록 설계한다.