在我工作的公司进行安全审核期间,Web.API出现了一个问题,如果用户要为示例更改提供的值,则会返回太多信息。
合法通话的示例:https://mysite/controller/myData?$ orderby = realcolumn
恶意电话示例:https://mysite/controller/myData?$ orderby = fakecolumn
在第二种情况下,api正在返回:
{
"$id": "1",
"$type": "System.Web.Http.HttpError, System.Web.Http",
"Message": "The query specified in the URI is not valid. Could not find a property named 'fakecolumn' on type 'MyObject.Models.MyData."
}
虽然我不认为这是一个大的安全问题,并且作为开发人员有这种类型的响应是有帮助的...我被要求使其更通用 - 基本上提供尽可能少的信息。
在将响应发送回用户之前,我不知道如何捕获它。如果我遍历代码并在返回结果之前停止,那么数据就在那里。在这种情况下,直到控制器中发生返回之后,才会计算订单。有没有办法在服务器上执行评估,捕获这样的错误并返回更通用的响应?
以下代码段,我感谢您提供的任何帮助。
来自控制器
RepositoryMyData _repo;
[HttpGet]
public IQueryable<myData> myData()
{
return _repo.myData();
}
从Repository类 - 使用Entity Framework ...
public DbQuery<myData> myData()
{
return (DbQuery<myData>)_contextProvider.Context.myData
}
答案 0 :(得分:0)
这可能会有所帮助吗? -
选项1:
//customer exception class
public class QueryError : Exception{
}
[HttpGet]
public IQueryable<myData> myData()
{
try{
return _repo.myData();
}catch(Exception e){
throw new QueryError("An error occurred.");
// not a good practice though, too much exceptions to handle for the system.
}
}
选项2:。
public class CustomHandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
context.ExceptionHandled = true;
context.HttpContext.Response.Clear();
context.Result = //build the result with needed information
}
}
[CustomHandleError]
public lass <Controller>.......