Sur*_*air 4 c# linq action-filter asp.net-web-api
的背景:
我正在尝试修复潜在的安全问题,以删除作为字符串参数注入到我的 WebAPI 方法中的单引号(这需要在整个应用程序中完成)。
我尝试通过创建一个动作过滤器来完成此任务,该过滤器执行必要的操作
public class ValidateActionParametersAttribute : ActionFilterAttribute, IActionFilter
{
public override void OnActionExecuting(HttpActionContext actionExecutedContext)
{
var parameters = actionExecutedContext.ActionArguments;
var parameterList = parameters.Values.ToList();
parameterList.Where(x => x.GetType() == typeof(string)).ToList().ForEach(y => y = y.ToString().Replace("\'", ""));
base.OnActionExecuting(actionExecutedContext);
}
}
Run Code Online (Sandbox Code Playgroud)
并在我的 WebApiConfig 中全局注册它
config.Filters.Add(new ValidateActionParametersAttribute());
Run Code Online (Sandbox Code Playgroud)
但是,当我在代码中放置断点后检查时,ActionFilter 中完成的参数更改似乎没有反映出来。有人可以指导我做错了什么吗?
您不会更新参数字典中的值,而只是替换传递给 ForEach 的 lambda 函数的 y 参数。
由于 ActionArguments 是字典,您可以执行以下操作:
var stringArgs = context.ActionArguments.Where(pair => pair.Value is string).ToList();
foreach (var keyValue in stringArgs)
{
var safeValue = ((string)keyValue.Value).Replace("\'", "");
context.ActionArguments[keyValue.Key] = safeValue;
}
Run Code Online (Sandbox Code Playgroud)
这将获取所有字符串参数并将其替换为安全版本。
| 归档时间: |
|
| 查看次数: |
3405 次 |
| 最近记录: |