후속의 종류 this question.모든 컨트롤러 작업에서 세션 변수의 유효성을 검사해야합니까? (레일)
내 응용 프로그램에는 Task 모델이 있습니다. 여러 페이지가 하나의 작업의 "편집"URL에 연결할 수 있습니다. 예를 들어, /tasks/1/edit
은 /tasks/1
및 user/1/
(사용자가 다른 모델 임)에 연결됩니다.
내 컨트롤러에서 "편집"이 "업데이트"작업을 통해 제출 된 후 참조 페이지 중 하나를 다시 리디렉션 할 수 있기를 원합니다. 예를 들어 에서 user/1/
으로 이동 한 후 "업데이트"작업을 수행 한 후 user/1/
으로 다시 리디렉션하려고합니다. 내가 /tasks/1/edit
에 가면 같은 거래가 /tasks/1
에서 나온다. 내 GET "편집"동작에서
내가 뭐하는 거지 :
이@task = Task.find(params[:id])
respond_to do |format|
if @task.update_attributes(params[:task])
format.html { redirect_to session.has_key?(:return_to) ? session[:return_to] : @task #return to task if no return_to specified
else
...
end
end
이 작동하지만 클라이언트가 걱정 : 해당 PUT에서
@task = Task.find(params[:id])
if request.referer and (request.referer == task_url(@task) or request.referer == user_url(@task.user))
session[:return_to] = request.referer
else
session.delete(:return_to)
end
"갱신"조치 내가 할 "업데이트"에서 session[:return_to]
을 스푸핑/위조하여 원하는 페이지로 리디렉션 할 수 있습니다.
중요합니까? 이것이 유효한 관심사입니까? "업데이트"에서 session[:return_to]
의 유효성을 검사해야합니까? 네, 한마디로
예제를 제공해 주시겠습니까? 나는 당신이 무엇을 의미하는지 그리고 내가 필터를하기로되어 있는지를 잘 모릅니다. –