2016-11-24 4 views
1

Brakeman 's Tool로 코드를 스캔 할 때 경고 메시지가 나타납니다. 여기 Brakeman의 "Unscoped call to"경고는 무엇입니까?

@applicant = Applicant.find(params[:id]) 

는 실제 오류 메시지입니다 :

+------------+----------------------+---------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------+ 
| Confidence | Class    | Method | Warning Type | Message                                 | 
+------------+----------------------+---------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------+ 
| Weak  | ApplicantsController | show | Unscoped Find | Unscoped call to Applicant#find near line 25: Applicant.find(+params[:id]+)                |              | 
+------------+----------------------+---------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------+ 

하지만 다음 하나 위의 쿼리를 교체 할 때 다음 괜찮아요 그것은에 범위가 지정되지 않은 호출이 다음과 같은 쿼리가 있다고 주장한다 :

@applicant = Applicant.where("id = ?", params[:id]).first 

첫 번째 쿼리의 문제점을 이해하지 못합니다.

+0

실제 오류 메시지를 게시 할 수 있습니까? – mysmallidea

+0

@mysmallidea 질문을 업데이트하십시오. –

답변

6

Brakeman은 귀하가 Applicant 테이블 전체를 쿼리하고 있으며 current_tenant.applicants.find...과 같은 다른 모델에서 범위를 지정하지 않는다는 경고 만 표시합니다. Brakeman's docs :

범위가 지정되지 않은 찾기 (및 관련 메서드)는 직접 개체 참조 형식입니다. 일반적으로 다른 모델에 속하는 모델은 범위가 지정된 쿼리를 통해 액세스해야합니다. 계정은 사용자에 속하는 경우

예를 들어, 다음이 안전하지 않은 범위가 지정되지 않은 발견 할 수있다 :

Account.find(params[:id]) 

작업에 따라,이 공격자들이 원하는 계정에 액세스 할 수 있도록 허용 할 수 있습니다.

대신, 현재 로그인 한 사용자로 범위해야합니다이 원하는 행동 인 경우

current_user = User.find(session[:user_id]) 
current_user.accounts.find(params[:id]) 

, 당신은 위양성으로이 경고를 무시 동수를 구성 할 수 있습니다. 이를 수행하려면 -I 플래그 (또는 --interactive-ignore)와 함께 brakeman을 실행하십시오. Ignoring False Positives의 지침에 따라 모든 경고를 단계별로 실행하고이 특정 파일을 무시 파일에 추가하십시오. 간단히 말해서

는 :

$ brakeman -I 
Input file: |config/brakeman.ignore| 
# press Enter to accept the default ignore file 
No such file. Continue with empty config? 
# press Enter to create the file 
> 
1. Inspect all warnings 
2. Hide previously ignored warnings 
3. Skip - use current ignore configuration 
# press 2 to step through all warnings, skipping previously ignored 
# Brakeman will now step through each warning, prompting you to for each one. 
# Press i to add this warning to the ignore list. 
# When finished, Brakeman will ask you what to do. 
# Press 1 to save changes to the ignore file. 

당신이 동수를 실행할 때이 경고가 나타나지 않아야합니다.

+0

이 정보에 대해 감사드립니다. 제 두 번째 쿼리에서 사용하려고하는 방법이 맞습니까? –

+0

첫 번째 쿼리를 사용합니다 ('@applicant = Applicant.find (params [: id])') - 두 번째 방법 ('where..first')으로 레코드를 찾지 못하면 404 오류가 발생하지 않습니다 . 첫 번째 방법은 ActiveRecord :: RecordNotFound 예외를 발생시키는 것입니다. – mysmallidea

+0

다음은 비슷한 대답입니다. http://stackoverflow.com/questions/32102172/ruby-on-rails-what-do-these-brakeman-warnings-mean – mysmallidea