如果查看this MSDN文档,可以使用以下代码获取示例:
// Define a change interceptor for the Products entity set.
[ChangeInterceptor("Products")]
public void OnChangeProducts(Product product, UpdateOperations operations)
{
if (operations == UpdateOperations.Add ||
operations == UpdateOperations.Change)
{
// Reject changes to discontinued products.
if (product.Discontinued) //<-- IS THIS BASED ON UNVERIFIED CLIENT DATA???
{
throw new DataServiceException(400,
"A discontinued product cannot be modified");
}
}
else if (operations == UpdateOperations.Delete)
{
// Block the delete and instead set the Discontinued flag.
throw new DataServiceException(400,
"Products cannot be deleted; instead set the Discontinued flag to 'true'");
}
}
查看所有CAPS中的评论。我的问题是:“该行是否依赖于客户提供的数据......如果是这样,我们可以做些什么来进行安全验证?”
答案 0 :(得分:1)
更改拦截器应该在客户端的修改应用于它之后获取实体。所以行为取决于提供者。如果您的提供实现此属性为只读(通常意味着忽略对它的任何更新),那么上述检查没有问题。我同意这个样本在这方面可能会更好。 此外,根据您的提供商,如果此属性不是只读的,则需要向提供商询问未更改/之前的值。这样做的方式取决于提供商。因此,如果它是EF,则更多的是EF问题如何确定修改属性的原始值(将在当前数据源上跟踪实体实例)。