flq*_*flq 11 .net c# asp.net-mvc url-routing ihttphandler
通常,当我查看ASP.Net MVC应用程序时,Route表会在启动时配置,并且不会在之后触及.
我有几个问题,但它们彼此密切相关:
背景:评论垃圾邮件发送者通常会从网站上获取发布网址,然后再也无需通过网站来进行自动垃圾邮件发送.如果我经常将我的帖子URL修改为一些随机的URL,垃圾邮件发送者必须返回该站点并找到正确的帖子URL以尝试发送垃圾邮件.如果该URL不断变化,我认为这可能会使垃圾邮件发送者的工作更加繁琐,这通常意味着他们放弃了受影响的URL.
Tom*_*uλa 11
我会考虑实现自己的IRouteHandler,并在我的自定义ControllerActionInvoker中添加一些自定义逻辑.怎么样?路由表不会动态更改,但您可以在自定义ControllerActionInvoker中检查路径路径中的随机参数,并调用或不调用相应的操作.
我的路线:
routes.Add
(
new Route
(
"blog/comment/{*data}",
new RouteValueDictionary(new {controller = "blog", action = "comment", data = ""}),
new MyRouteHandler()
)
);
Run Code Online (Sandbox Code Playgroud)
我的路线处理程序:
class MyRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new MyHttpHandler(requestContext);
}
}`
Run Code Online (Sandbox Code Playgroud)
我的经纪人:
class MyHttpHandler : MvcHandler
{
public MyHttpHandler(RequestContext requestContext) : base(requestContext)
{
}
protected override void ProcessRequest(HttpContextBase httpContext)
{
IController controller = new BlogController();
(controller as Controller).ActionInvoker = new MyActionInvoker();
controller.Execute(RequestContext);
} }`
Run Code Online (Sandbox Code Playgroud)
和我的行动ivoker,其中应该编写或不处理动作的自定义逻辑:
class MyActionInvoker : ControllerActionInvoker
{
protected override ActionResult InvokeActionMethod(MethodInfo methodInfo, IDictionary<string, object> parameters)
{
var data = ControllerContext.RouteData.GetRequiredString("data");
// put my custom logic to check whetever I'll handle the action or not. The data could be a parameter in the database for that purpose.
return base.InvokeActionMethod(methodInfo, parameters);
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道它是最好的解决方案,但现在它是我想到的那个.
考虑到实际问题背景,通常的做法是包含动态创建的交易号。它应该存储在隐藏的表单字段以及服务器端会话字典中,并且仅对一个请求有效。
我认为现在很多框架都提供了这样的安全机制;而这种攻击类型称为跨站点请求伪造 (csrf)。
| 归档时间: |
|
| 查看次数: |
9384 次 |
| 最近记录: |