1

ASP.NET Web Api で RavenDb を使用していますが、Load<Type>メソッドを使用して他のドキュメントをクエリできることに気付きました。

例えば:

public class Person
{
    public string Id { get; set; }
    public string FullName { get; set; }
    /* Other properties */
}

public class Pet
{
    public string Id { get; set; }
    public string FullName { get; set; }
}

[HttpGet]
public Person FindById(string id)
{
    using (IDocumentSession session = _docStore.OpenSession())
    {
        return session.Load<Person>(id);
    }
}

Web API メソッドで ajax を介して FindById("pets/13") を呼び出すと、共通のプロパティを共有するため、ペットのエンティティ データを含む Person オブジェクトが返されます。どうすればそれを回避できますか? これにより、機密データが攻撃者に公開される可能性があります。

プロパティが一致しない場合でも、null プロパティを持つオブジェクトが返され、指定された ID を持つエンティティの存在が公開されます。

これに対する私の現在の回避策は次のとおりです。

[HttpGet]
public Person FindById(string id)
{
    using (IDocumentSession session = _docStore.OpenSession())
    {
        return session.Load<Person>("people/" + id.Split('/')[1]);
    }
}
4

2 に答える 2

1

http://ravendb.net/kb/3/using-ravendb-in-an-asp-net-mvc-websiteセクション「ルート」から:

これを回避する最も簡単な方法は、整数を受け入れるバージョンの session.Load<>() をコントローラーで使用することです。この関数は、整数値を完全修飾ドキュメント ID に自動的に変換し、それを使用してロード操作を実行します。

public ActionResult Read(int id)
{
    var obj = RavenSession.Load<MyClass>(id);
    return View(obj);
}
于 2013-05-10T18:40:45.903 に答える