CSRF 공격을 막을 수있는 메커니즘이없는 레거시 Java 응용 프로그램 (13 세 이상)에서 작업 중입니다.레거시 애플리케이션에서 URL 재 작성으로 csrf를 개선 한 경우
프론트 엔드에서 여러 기술을 사용하고 있습니다. dwr, jquery 및 요청은 다양한 소스 인 AJAX에서 왔으며 요청을받습니다. CSRF로 보호되어야하는 Get 요청으로 수행되는 안전하지 않은 작업이 있습니다.
백엔드에서 모든 것이 Struts 액션을 통해 전달됩니다.
적절한 자동 기능 테스트가 없으며 응용 프로그램이 너무 많아 아무도 실제로 작동하지 않으므로 변경 사항을 쉽게 도입 할 수 없습니다.
모든 get-link 및 모든 양식 제출에 비밀 토큰을 추가하도록 응용 프로그램을 변경하는 것은 매우 어려울 것입니다. DWR 및 jquery의 경우 모든 요청에 대해 단일 진입 점이 있으므로 간단한 작업이 가능합니다.
응용 프로그램은 브라우저 책갈피로 작업 할 필요가 없으며 내부적으로 책갈피 책갈피를 유지하는 즐겨 찾기 메뉴를 제공합니다. 또한 폼 동작 또는 링크 인 URL은 항상 스트럿 또는 표준 taglib을 통해 렌더링됩니다. 따라서 JSESSIONID를 쿠키 대신 URL 재 작성을 통과하도록 변경하면 응용 프로그램은 사소한 변경으로 인해 작동 할 것입니다 ...
위의 내용을 통해 엄청난 개발 노력 없이도 응용 프로그램에 CSRF 보호 기능을 도입 할 수 있습니다.
* 쿠키 대신 URL 재 작성을 사용하여 JSESSIONID를 전달하십시오. * 헤더에 JSESSIONID를 표시하는 문제를 극복하여 http 세션에 대한 두 번째 비밀 쿠키를 도입합니다. 따라서 세션이 처음 설정되면 임의의 값을 포함하는 HttpOnly 쿠키를 클라이언트에 보내고 HTTP 세션에도 넣습니다. * 모든 struts 작업의 상위 항목에서이 비밀 쿠키의 값을 HTTP 세션의 값으로 확인하고 같지 않은 경우 Exception을 발생시킵니다.
모든 요청에서 토큰을 소개하도록 응용 프로그램을 다시 작성하는 것과 비교하면이 방법이 쉬운 방법 인 것 같습니다. 어쩌면 너무 쉽게 ... 내 아이디어에 매거진이 있습니까?