通过中信任中的代码Web.config anonymousIdentification cookieName?

时间:2012-12-26 17:24:39

标签: asp.net web-config webconfigurationmanager

在Medium Trust中工作时,是否有一种简单的方法可以从web.config中读取anonymousIdentification部分的cookieName?

我要做的是阻止成千上万的匿名用户,因为:

  1. 人们关闭了Cookie,或
  2. 访客是一个没有cookie功能的蜘蛛/机器人。
  3. 我是如何尝试完成此操作的,方法是检查Application_BeginRequest中是否存在Forms身份验证或匿名身份Cookie。如果没有cookie,我会设置一个标志,以防止将任何内容保存到数据库中。

    但为了做到这一点,我必须知道cookie的名称。为此,我试图这样做:

    AuthCookieName = FormsAuthentication.FormsCookieName;
    var anonSection = (AnonymousIdentificationSection)WebConfigurationManager.GetSection("system.web/anonymousIdentification");
    if (anonSection != null)
        AnonCookieName = anonSection.CookieName;
    

    虽然检索到auth cookie名称没有任何问题,但WebConfigurationManager会抛出安全性异常: System.Security.SecurityException:请求类型为'System.Configuration.ConfigurationPermission,System.Configuration,Version = 4.0的权限.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'失败。

    我知道这是一个信任问题,因为当我给予High或Full Trust时,异常就会消失。但是,重要的是它适用于Medium Trust,我无法修改machine.config。

    有没有办法在我的应用程序的web.config级别为anonymousIdentification部分设置requirePermission="false"

    我是否必须在XML文档中加载web.config并手动解析它?

    其他想法?


    有没有比这更好的东西?我只在Application_Start()上运行一次。

    XmlDocument config = new XmlDocument();
    config.Load(Server.MapPath("~/Web.config"));
    XmlNode anonSection = config.SelectSingleNode("configuration/system.web/anonymousIdentification");
    if (anonSection != null)
    {
        XmlAttribute nameAttr = anonSection.Attributes["cookieName"];
        if (nameAttr != null)
            AnonCookieName = nameAttr.Value;
    }
    if (string.IsNullOrWhiteSpace(AnonCookieName))
        AnonCookieName = ".ASPXANONYMOUS";
    

1 个答案:

答案 0 :(得分:0)

根据微软的说法,Medium Trust已经死了。但如果你必须这样做,这应该有效:

XmlDocument config = new XmlDocument();
config.Load(Server.MapPath("~/Web.config"));
XmlNode anonSection = config.SelectSingleNode("configuration/system.web/anonymousIdentification");
if (anonSection != null)
{
    XmlAttribute nameAttr = anonSection.Attributes["cookieName"];
    if (nameAttr != null)
        AnonCookieName = nameAttr.Value;
}
if (string.IsNullOrWhiteSpace(AnonCookieName))
    AnonCookieName = ".ASPXANONYMOUS";