代码改变世界

防范CSRF(三)

2017-01-17 21:50  sunice  阅读(331)  评论(0编辑  收藏  举报

除了可以更改微软默认的cookie的名字外,还可以更改默认的加密方法。继承IAntiForgeryAdditionalDataProvider接口,实现里面的方法即可。

采用的加密方法有加盐和使用时间戳的方式。

以使用时间戳方式举例:

public class AntiForgeryExtension : IAntiForgeryAdditionalDataProvider
{
    public string GetAdditionalData(HttpContextBase context)
    {
        return DateTime.UtcNow.Ticks.ToString();
    }

    public bool ValidateAdditionalData(HttpContextBase context, string additionalData)
    {
        if (string.IsNullOrWhiteSpace(additionalData))
        {
            return false;
        }
        var requestTime = Convert.ToInt64(additionalData);
        var now = DateTime.UtcNow.Ticks;
        var difference = new TimeSpan(now - requestTime);
        return (difference.TotalMinutes > -1 && difference.TotalMinutes < 10);
    }
}

 

 Golbal.asax需要注册:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    AntiForgeryConfig.CookieName = "CSRF_Cookie";
    AntiForgeryConfig.AdditionalDataProvider = new AntiForgeryExtension();
}

提醒:

  这种方法+权限验证机制才是比较安全的做法。