1

私のスタッフには、他の変数を「保護」するための一種のインターフェース変数を持つモデルを作成している新しい開発者がいます。コードは次のようになります。

public class stuff
{
   public int id { get; set; }
   public string name { get; set; }
   public int thingType { get; set; }
}
public class people
{
   public int id { get; set; }
   public sting name { get; set; }
   private IEnumerable<stuff> ourThings;
   public IEnumerable<stuff> things { get {return ourThings; } }
}

誰かがモデルを変更する危険を冒したくない場合は、それらの変数の set メソッドを非公開にするだろうと思いました。また、これが私のサイトへの攻撃にどのように影響/防止するかについても知りません。これを見たり聞いたりしたことのある人はいますか?もしそうなら、本当の目的は何なのか、何を守ろうとしているのか説明していただけますか?

再度、感謝します!

4

2 に答える 2

3

この全体の全体的な問題は次のとおりです。

private IEnumerable<stuff> ourThings;
public IEnumerable<stuff> things { get {return ourThings; } }

コレクションはまだ変更できるということです。setコレクションは参照型であるため、コレクションを変更する必要はありません。ただし、設計上不変にしたい場合は、次のようにします。

private IEnumerable<stuff> ourThings;
public IEnumerable<stuff> things { get {return ourThings.ToList(); } }

元のコレクションのコピーが作成されるためです。とにかくそれはそれを行う1つの方法であり、かなり成功していることが証明されています.

于 2013-08-05T20:07:49.320 に答える
0

パブリック、内部、およびプライベート アクセス修飾子は、アプリケーション アーキテクチャに制約を適用するために使用されます。攻撃に対する防御を意図したものではありません。

Web アプリケーションを保護する方法についてのガイダンスを探すことをお勧めします。このトピックに関する資料はたくさんあります。

于 2013-08-05T20:16:01.763 に答える