2012-09-06 2 views
0

에 중첩 된 리소스에 리디렉션 나는 최근에 내가 더 안전하게 만들기 위해안전은 레일

:only_path => true 

를 사용해야 내 Gemfile에 동수 보석을 추가하고보고했다. 그러나 중첩 된 리소스를 사용하고 정확히 어떻게 알지는 못합니다. 컨트롤러의 일부분입니다.

if @comment.update_attributes(params[:comment]) 
    redirect_to [@message, @comment], notice: 'Comment was successfully updated.' 

어떻게하면 좋을까요? url_for 도우미로 only_path 속성 만 보았습니다. 도움 주셔서 감사합니다.

+0

이렇게하면 낮은 신뢰도 경고가 생성됩니다. – oreoshake

+0

자유롭게 대화에 참여하십시오. https://github.com/presidentbeef/brakeman/issues/143#issuecomment-8378199 :) – oreoshake

+0

@oreoshake : 예, 낮은 신뢰. 어쨌든 보안 문제에 대해 좀 더 이해하기 위해 문제를 해결하고 싶었습니다. –

답변

2

짧은 대답은 무슨 일이 있어도 brakeman이 불평 할 것이라는 것입니다. 수정 사항은 혼합되어 있습니다 (https://github.com/presidentbeef/brakeman/issues/143).

마찬가지로, 코드는 안전합니다. 첫 번째 인수는 url_for로 전달됩니다.이 경우 url_for는 모델을 기반으로 다형성 경로를 작성합니다. 당신이 "example.com/controller/action"

처럼 대신 정규화 된 URL의 상대적 "/ 컨트롤러/액션"을 얻을 것이다, 그래서 only_path 사실이다 : 기본적으로하는 것이

그러나 질문에 대답하기 위해 첫 번째 인수가 약한 신뢰 경고 임에도 불구하고 문자열로 해석되는 모든 형식에 대해 경고합니다. 이 문제가 해결 될 것입니다.

TANGENT 경고. @ message.some_url에 redirect_to를 보내고 싶다고 가정 해 봅시다. 이렇게하면 다음과 같이 수정할 수있는 높은 신뢰도의 경고가 생성됩니다.

redirect_to URI.parse(url_for(@message.some_url)).path, notice: 'Comment was successfully updated'