gpt4 book ai didi

xml - 他们在我的站点测试中发现了什么”和 1=0] |//* |/* ["0")

转载 作者:行者123 更新时间:2023-12-03 16:10:00 25 4
gpt4 key购买 nike

我发现有人在我的网站上执行了 ' test"and 1=0] |//* |/*["0") ',这看起来像 XPATH,因为我在我的网站上使用 XML,但它实际上是什么意思?

最佳答案

这是 XPath injection attack它试图以递归方式获取文档中的所有节点(//* 部分)。要了解发生了什么,最好通过一个例子。

假设您动态构造一个 XPath 表达式来搜索 subnode用户输入的文本值。您使用的 XML 文档:

<root>
<node>
<subnode>value1</subnode>
<subnode>value2</subnode>
</node>
</root>

而且,你有这个表达式: //node[. = "%s"]在哪里 %s是用户输入的值的占位符。用户可能会输入 value1这将产生 //node[. = "value1"]完全安全的表达式,将返回 <subnode>value1</subnode> , 好的。

但是现在,想象一下如果用户输入 test" and 1=0] | //* | /*["0查询,你会得到 //node[. = " test" and 1=0] | //* | /*["0"]这在语法上也是正确的,但在这种情况下,用户将获得所有节点,包括 root , nodesubnodes访问用户不应该访问的内容。

让我们分解 //node[. = " test" and 1=0] | //* | /*["0"]表达。攻击者使用了 test" and 1=0]部分摆脱现有条件并使其不匹配添加 1=0健康)状况。 |在 XPath 中表示“或”。 //*将递归地匹配文档中的每个节点——这就是攻击者的目的。 /*["0需要 part 来保持表达式在语法上正确并平衡引号。

有几种方法可以防止它发生,总结 here :
  • 清理/验证用户输入。至少你能做的是转义引号
  • 使用预编译的 XPath 表达式:

  • Precompiled XPaths are already preset before the program executes, rather than created on the fly after the user's input has been added to the string. This is a better route because you don't have to worry about missing a character that should have been escaped


  • 使用参数化 XPath 表达式:

  • Parameterization causes the input to be restricted to certain domains, such as strings or integers, and any input outside such domains is considered invalid and the query fails.



    也可以看看:
  • How to prevent XPath/XML injection in .NET
  • Cleaning/sanitizing xpath attributes
  • 关于xml - 他们在我的站点测试中发现了什么”和 1=0] |//* |/* ["0"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36898353/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com