2017-12-14 16 views
1

私はRails 5でアプリケーションを書いています。私は書こうとしている単純な機能のセキュリティ問題に興味があります。ユーザーは、特定の時間まで互いに秘密のPicksを作成します。私が合格した場合:コントローラとビューにシンプルなレールのセキュリティに関する質問

everyonesのピックが含まれてい
@picks = Pick.all 

、 し、ユーザーがビュー上で誰であるかに応じて、表示されているものフィルタ、ユーザーはその@picks変数にアクセスすることができるだろう悪意のある方法を使用して?最初は私ははいと思っていましたが、今ではユーザーが@picks変数で送信された生のビューを取得すると考えています。ユーザーが自分のhtmlビューを卑劣なことができない限り?

とにかく、コントローラでフィルタリングを行うことをお勧めしますが、変数を公開できるかどうかは、ビュー全体に渡してフィルタリングすることができます。

+2

彼らはあなたの変数にアクセスすることはできませんが、 '@picks = current_user.picks'のようなもので運が良いかもしれません... –

+1

はい、クライアントはビュー側の変数にアクセスできません。 HTMLをビルドしてユーザーに送信し、ユーザーは送信したhtmlだけを表示できます。 @BradWerthオプションは、必要なデータだけを残すことができます – user3309314

答えて

1

いいえ、haml/erbファイルで使用するインスタンス変数を取得できません。彼らは生のHTMLを取得します。

Ruby on railsはサーバレンダリングを行うため、すべてのインスタンス変数を使用してサーバ側でビューを準備します。

とにかく、フィルタリングはベストプラクティスとしてコントローラ側で行う必要があります。

3

短い答え:

ありませんが、クライアントが直接@picks変数にアクセスすることはできません。あなたのビューは、ブラウザがそれを受け取るために、ビューに@picksの値を表示する必要があります。

ロング回答:

しかし、ビューに到達する前に@picksに割り当てられたデータを制限することをお勧めだろう。あなたのコードベースが成長し、年齢とともに、おそらく他の開発者がそれを維持し始めると、@picks変数にはビューに表示すべきではないデータが含まれていることを覚えていないかもしれません。

クライアントが新しい機能強化に基づいてビューを更新したい場合、6ヶ月後に、@picksに機密データが含まれていることを知るためにビューを変更している開発者に頼ることは望ましくありません。

@picksのコンテンツをユーザーがその時点で閲覧できるように制限することで、将来の開発者(あなたを含む)の生活を楽にしてください。与えられた時間にユーザに利用可能であるピックを決定するためのビジネスロジックが含まれているモデルにメソッドを追加し、より良いまだ

@picks = current_user.picks 

または::コメントで提案されているコードを使用することは良いアイデアです

class User < ApplicationRecord 
... 
    def authorized_picks 
    # code that returns the picks this user is allowed to see right now 
    end 
... 
end 

とは、あなたのコントローラのコードは次のとおりです。

@picks = current_user.authorized_picks 

そのように、あなたのビジネスロジックのすべてが、それは時間の90%を属するモデルです。これにより、コードDRYを認可ロジックを1か所にまとめることができます。

コードをシンプルでドライにしておいてください。

関連する問題