この質問の続きです。
私のアプリケーションには、Task モデルがあります。複数のページが 1 つのタスクの「編集」URL にリンクできます。たとえば、 fromと(ユーザーが別のモデルである) に/tasks/1/edit
リンクされています。/tasks/1
user/1/
私のコントローラーでは、「編集」が「更新」アクションを介して送信された後、参照ページのいずれかにリダイレクトできるようにしたいと考えています。たとえば、/tasks/1/edit
fromに移動した場合user/1/
、「更新」アクションの後、 にリダイレクトしuser/1/
ます。/tasks/1/edit
からに行っても同じ/tasks/1
です。
私のGET「編集」アクションでは、次のことを行っています。
@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
対応する PUT の「更新」アクションで、次のことを行います。
@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
session[:return_to]
これは機能しますが、クライアントが「更新」でなりすまし/偽造して、必要なページにリダイレクトできるようになるのではないかと心配しています。
それは問題ですか?これは正当な懸念事項ですか?session[:return_to]
「更新」で検証する必要がありますか?