【问题标题】:C# - Validating xml file against local .xsd security issuesC# - 针对本地 .xsd 安全问题验证 xml 文件
【发布时间】:2018-07-16 19:59:04
【问题描述】:

这不是安全问题吗?即使 xml 已针对架构进行了验证,攻击者仍然可以修改本地 .xsd 文件并将其更改为允许他们想要的任何内容。 .xsd 文件应该放在哪里?如果将此类文件存储在安全位置,您将如何安全地访问它,以便您可以将其用于 .NET 中的 xml 验证

【问题讨论】:

    标签: c# .net xml security xsd-validation


    【解决方案1】:

    你的方案是:

    • 恶意攻击者想通过向您传递错误的 XML 来攻击您的系统,这会导致一些不好的事情发生
    • 为防止这种情况发生,您需要根据 XSD 中的架构验证 XML
    • 为了避开您的努力,不良行为者更改了执行验证的盒子上的 XSD 文件

    此应用安装在哪里?是在服务器上吗?如果是这样,那么如果坏人可以更改您服务器上的任意文件,那么这是您最不关心的问题。

    如果它在客户端 PC 上,则将其与您的应用程序一起安装。非管理员用户无法更改“程序文件”下的内容。如果此人是您安装的机器上的管理员,那么您无能为力。

    如果它是手机上的应用程序,那么我相信我的 PC cmets 仍然存在。

    【讨论】:

    • 这正是我的场景,它在客户端 PC 上,该人是管理员。是否可以将 .xsd 不在本地存储在盒子上,而将其存储在安全位置的其他地方?然后从这个位置访问 .xsd 并用 xml 文件进行验证?
    • 您无法阻止本地管理员在其计算机上执行任何操作。如果你想这样做,你可以从互联网上下载 XSD,但是,如果攻击者真的下定决心,他无论如何都可以伪造出来。在 Raymond Chen 的博客 (blogs.msdn.microsoft.com/oldnewthing) 中搜索“密闭舱口的另一面”,以查找以“我想阻止管理员执行...”开头的“安全问题”的其他示例
    • 而且,您想出的任何解决方案都涉及“将 .xsd 存储在盒子上,而不是在其他地方的安全位置”,很容易被具有管理员权限的聪明坏演员规避。
    • 啊,太糟糕了。感谢您的帮助。
    【解决方案2】:

    您无法阻止在完成验证的机器上具有管理员权限的人伪造架构验证,但您可以而且应该采取的一个步骤是防止 XML 文件的创建者伪造它。

    如果您因为不相信文件有效而进行验证,则不要使用xsi:schemaLocation 机制来定位架构。使用从接收应用程序提供架构位置的验证 API,而不是从实例文档中获取它。

    如果您要非常小心,请确保通过将文档发送到安全服务器进行验证来完成验证,并让您的安全服务器返回一份带有数字签名确认其有效性的文档副本。

    【讨论】:

    • 知道了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多