代码之家  ›  专栏  ›  技术社区  ›  Jason Evans

如何识别不安全的web部件/控件

  •  2
  • Jason Evans  · 技术社区  · 15 年前

    尝试编辑SharePoint网站中的页面时出错。使用windbg,我发现实际的错误是:

    microsoft.sharepoint.applicationruntime.safecontrols+不受影响的异常

    在我看来,该页上有一个控件未包含在web.config的<safecontrols>部分中。我已经查看了页面的aspx文件,但是在那里看不到任何在web.config中没有引用的控件。

    挖得更深一点 Sosex.dll )我从调用堆栈中获取了导致错误的以下数据:

    0:013> !mframe 03
    0:013> !mdv
    Frame 0x3: (Microsoft.SharePoint.ApplicationRuntime.SafeControls.GetTypeFromGuid(System.Guid)):
    [A0]:this:0xc00c03e8 (Microsoft.SharePoint.ApplicationRuntime.SafeControls)
    [A1]:guid:{ef2d8253-a451-56da-be1d-5f32d5227173} VALTYPE (MT=0000064278430ea8, ADDR=000000000308caa0) (System.Guid)
    [L0]:null (System.Type)
    [L1]:0x633c50 (System.String) STRVAL=The type could not be found or it is not registered as safe.
    [L2]:null (System.Type)
    

    所以看起来我找到了导致问题的控件的guid([a1])。但是,我不知道如何找到这个guid引用的控件。SQL Server中一定有存储此信息的表吗?我已经尝试过dbo.webparts,选择了带有guid的tp\u id,但它什么也没有找到。我想我遗漏了什么?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Ryan    15 年前

    哇!慢慢地离开SQL Server;)

    首先要看的是 difference between a closed web part and a deleted web part .

    Closed是在不处于“编辑页面模式”时获得的菜单操作,它只是将Web部件隐藏在视图中—SharePoint仍试图加载其程序集,如果没有相应的安全控件条目,则会出现错误。

    如果这是问题所在,那么删除它的简单方法是 ?内容=1 在url的末尾,页面将以维护模式打开。

    希望这一切顺利!

        2
  •  0
  •   Janis Veinbergs    15 年前

    要以编程方式操作web部件,可以使用 SPLimitedWebPartManager

    this article 了解如何从页面中删除或定位Web部件。

    使用Debugger,列出所有这些Web部件并查看特定ID的CoreSponding显示标题应该相当容易。

        3
  •  0
  •   jkg0    14 年前

    使用reflector,我发现这是它们为每个控件生成guid的方式:

    internal static Guid GetTypeId(MD5HashProvider md5Provider, Type type, string assemblyName)
    {
        byte[] bytes = new UnicodeEncoding().GetBytes(assemblyName + "|" + type.FullName);
        return new Guid(md5Provider.GetHash(bytes));
    }
    

    因此,如果您真的想找到它,请运行每个程序集并键入并匹配guid。 祝你好运。我也有同样的问题。我计划一次移除一个控件,直到确定是哪一个。

    推荐文章