2016-06-14 3 views
0

csrf에 대해 내 응용 프로그램을 보호하려고합니다. 문제가 무엇인지, 솔루션이 어떻게 작동하는지 이해할 수는 없지만, 일부 연구를 거친 후에 Angular가 사용하는 솔루션을 생각해 냈습니다. 지금까지 내가 가지고 같이, 내 솔루션은 다음과 같은 단계가 필요합니다요청 당 csrf 토큰이 작동하는 방식

- 내 스파

에 대한> 클라이언트 요청 -> 내가 CSRF 토큰을 전송 (하지 Http 만이 그것을 읽을 수 있습니다 JS 있도록). 또한이 csrf 토큰을 서버의 사용자 세션에 저장합니다.

-> 모든 게시물 요청에 대해 클라이언트가 csrf 토큰을 읽고이 토큰에 X-XSRF-TOKEN 헤더를 설정해야합니다.

-> 요청 헤더와 사용자 세션 csrf 토큰을 확인하여 모든 요청을 확인합니다. 일치하는 경우, 나는 또한 인증을 위해 jwt를 확인합니다.

-> csrf 토큰의 유효성을 확인한 후 데이터베이스를 변경합니다. 또한 csrf 토큰을 다시 변경하고 새 토큰을 사용자에게 보내고 세션의 토큰을 변경합니다.

하지만 어떻게 도움이되는지 잘 모르겠다. xss 취약점이있는 경우 주입 된 자바 스크립트 코드도 동일한 작업을 수행 할 수 있습니다. 문제를 이해하고 그러한 솔루션이 어떻게 도움이되는지 알고 싶습니다. 감사.

참고하시기 바랍니다. 또한 익스프레스 서버에서 세션 관리를 위해 redis를 사용하여 JWT 기반 인증을 구현하고 있습니다.

답변

2

다음 링크는 도움이 될 수 있지만 여기에서 요약 해 보겠습니다.

https://nirajrules.wordpress.com/2010/01/16/cross-site-scripting-xss-vs-cross-site-request-forgery/

CSRF는 크로스 사이트 요청에 대한 더 많은 것이다. 누군가 당신의 폼 액션을 찾아서 직접 게시하는 것입니다. 그것이 CSRF 토큰이 예방하는 데 도움이됩니다. 피싱 사이트 인 가짜 웹 사이트를 만드는 사람들이 실제로 폼을 호출하여 끝점을 제출한다고 상상해보십시오.

XSS는 매우 다르며 페이지 내에서 실행할 수있는 악의적 인 자바 스크립트는 토큰에 액세스하여 그걸 잡을 수 있다고합니다. 그러나 이것들은 다른 것들이며 CSRF 토큰의 가치를 감소시키지 않습니다.

행운을 빈다.

+0

나는 내가 읽은 당신의 요점과 이전의 것들을 얻었다. 토큰이있는 헤더가 필요하고 사이트 간 요청이 클라이언트에서하는 것처럼 그렇게 할 수 없기 때문에 구현이 유효합니다. – FurkanO

+0

귀하의 사이트에 삽입되지 않은 교차 ​​사이트는 쉽게 쿠키를 얻을 수 없습니다. 따라서 모든 인증을 포함하여 더 안전하게 유지할 수 있습니다. CSRF 토큰은 단명해야하며 단일 요청에 대해서만 적합해야합니다. –