我将 RavenDb 与 ASP.NET Web Api 一起使用,我注意到,可以使用该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") ,我将返回一个带有 Pet 实体数据的 Person 对象,因为它们共享公共属性。我怎样才能避免这种情况?这可能会将机密数据暴露给攻击者。
即使属性不匹配,也会返回具有空属性的对象,从而暴露具有给定 id 的实体的存在。
我目前的解决方法是:
[HttpGet]
public Person FindById(string id)
{
using (IDocumentSession session = _docStore.OpenSession())
{
return session.Load<Person>("people/" + id.Split('/')[1]);
}
}