私は Rails を使い始めたばかりなので、Brakemanを使用して初心者向けコードの潜在的な脆弱性について学習しています。show.js.erb
ファイル内の次のコードについて、信頼性の高い「動的レンダリング パス」警告が表示されます。
$('#media-fragment').html('<%= escape_javascript(render(params[:partial])) %>');
私は実際にこれが問題だと思っていたので、驚くことではありません。そこで、次のように変更しました。
# controller:
def show
if legal_partial?
@allowed_partial = params[:partial]
else
raise StandardError, "unexpected partial request: #{params[:partial]}"
end
end
private
def legal_partial?
%w(screenshots video updates).include? params[:partial]
end
# ...
# show.js.erb
$('#media-fragment').html('<%= escape_javascript(render(@allowed_partial)) %>');
私はコードが安全になったと信じていますが、Brakeman はまだこれに不満を持っています. ユーザー入力に基づいてパーシャルのレンダリングを制御するより慣用的な方法はありますか?