똑같은 삽질은 2번 하지 말자

Rails ActionController::InvalidAuthenticityToken 에러 (Rails의 CSRF 대책) 본문

Ruby On Rails

Rails ActionController::InvalidAuthenticityToken 에러 (Rails의 CSRF 대책)

곽빵 2021. 7. 31. 13:52

 

해결방법

application_controller.rb에 protect_from_forgery 추가

class ApplicationController < ActionController::Base
  protect_from_forgery
end

 

 

헤더 태그에 csrf_meta_tags 추가(아마 자동으로 추가 되어있을 경우가 많음)

<%= csrf_meta_tags %>

 

에러 원인 & protect_from_forgery? 뭐하는 친구

원인

CSRF 공격을 막기 위한 토큰값이 일치하지 않으면 rails가 에러를 발생시킨다.

 

CSRF란?  

간단하게 말하면 악의를 가진 사람이 서버에 요청을 위조해서 정상정인 유저가 정상적인 요청을 하는것처럼 보내

타겟사이트가 정상적인 아닌 동작을 유도하게끔 하는 공격방법입니다.

 

rails 에서는 사용자가 POST 요청을 할 때 페이지에 내장된 CSRF 토큰을 생성하고 cookie에 있는 토큰을 동일한 것인지 확인합니다.

rails는 get 이외의 동사(post, put..etc)의 req에 authenticity_token이라고 하는 파라미터를 자동으로 덧붙입니다.

get 이외의 동사의 각 액션에서 params[:authenticity_token]와 session[:csrf_id]를 비교하고, 같은 값이면 OK로 하고 있는 것 같습니다.* 1 같은 값이 아니면 Action Controller :: Invalid Authenticity Token이라는 예외가 있습니다.

protect_from_forgery? 

request 마다 CSRF validation을 트리거 하는 hook을 설정

CSRF 토큰의 생성/암호화/복호화도 담당

'Ruby On Rails' 카테고리의 다른 글

Ruby on Rails CRUD ( + Vue)  (0) 2021.09.12
Comments