2013-03-13 1 views
0

현재 내 프로젝트에서 사용자의 ID가 "1"인지 확인하는 방법으로 특정 작업에 대한 액세스가 허용됩니다. 나는 인증을 위해 무기를 사용했다.필터 보안 우려 이전

여기에 내 코드 참조

before_filter :find_xxx, :only => [:edit, :update, :destroy, :create, :new] 

이며, 여기에 내가 공식 레일의 문서 보았다 코드

protected  
def find_xxx 
    if user_signed_in? && current_user.id != 1 
     redirect_to "/", :notice => "Not today" 
    end 
end 

이며, 그들은 비슷한 방식으로 접근했다. 나는 이것이 내 행동을 보호하는 안전한 방법인지 궁금해했다. 아무도 행동을 수행하기 위해 어느 한 행동에/html로/html에 양식을 추가 할 수 없습니까?

내 방법을 보호하는 가장 좋은 방법은 무엇입니까?

시간 내 주셔서 감사드립니다. 사전에 도움을 주셔서 감사합니다.

답변

2

current_user이 제대로 작동하는 Devise 인증을 사용한다고 가정하면 제출하기 전에 양식을 조작하여 과거 인증을 누설 할 수 없습니다.

당신은 사용자가 리디렉션을 우회 할 수 있기 때문에 사용자가 리디렉션을 우회 할 수 있기 때문에 (단지 user_signed_in?false이 될 것이기 때문에) 사용자가 리디렉션을 우회 할 수 있기 때문에 필터의 논리를 뒤집을 수 있습니다. 컨트롤러의 모든 작업에 액세스하기 전에 로그인하라는 다른 필터 또는 인증 요구 사항이 있으면 충분할 수 있습니다. 그것은 일반적으로 같은 특정 데이터베이스 ID에 의존하는 좋은 생각이 아니라고

unless user_signed_in? && current_user.id == 1 

참고 :

그냥 난에 조건을 변경할 것, 안전합니다. creating an admin role을 사용하는 것이 더 낫고보다 명시적인 보안을 만들기 위해 CanCan과 같은 보석을 사용하는 것이 좋습니다.

보안을 위해 항상 이와 같은 테스트를 작성해야합니다.

+0

고맙습니다. –