搜索
首页运维安全xPath注入的基础语法有哪些

xPath注入的基础语法有哪些

May 26, 2023 pm 12:01 PM
xpath

首先什么是xPath:xPath是一种在xml查找信息的语言

xPath中包含七种类型的节点: 元素、属性、文本、命名空间、处理指令、注释及文档根节点。xml文档是按照文档树的结构进行解析的,文档树的根被称为文档节点或根节点。

xPath注入的基础语法有哪些

这是一份基本的xml文档的源码,从这份xml源码中可以看出,bookstore为文档节点(根节点),book、title、author、year、price是元素节点。其中book节点拥有四个子元素节点:title、author、year、price,title节点有三个同胞:author、year、price。title这个元素节点拥有一个属性和文本节点,属性节点是lang,值为en,文本节点的值是HarryPotter。

下面还有一些xml节点关系的描述(类似于数据结构中的树):

父:book节点的父为bookstore,book节点是title、author、year、price节点的父。(每个节点只能有一个父)。

子:book是bookstore的子,book节点的子是title、author、year、price的子。

(元素节点可以有零个、一个或者多个子)。

标题的同级元素包括作者、年份和价格,这些元素具有相同的父节点,类似于树形结构中的兄弟节点。(节点可以有零个、一个或者多个同胞)。

先辈:节点的父、父的父、父的父的父(无限循环),title元素节点的先辈就是book、bookstore。

后代:节点的子、子的子、子的子的子(无线循环),bookstore文档节点的后代就是book、title、author、year、price、lang。

知道了xml的节点关系还不够,还需要知道它是如何进行查询的,xPath通过路径表达式来选取文档中的节点或者节点集。节点是沿着路径或者步来选取的。

xPath注入的基础语法有哪些

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:

nodename:选取此节点的所有接待你

/:从根节点选取

//:从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置

.:选取当前节点

..:选取当前节点的父节点

@:选取属性

下面直接来通过js使用xpath查询语法来进行查询

首先写一份关于xpath调用的html(调用的代码写到js中)文件模板,然后准备好一份xml文件用来查询。

js模板的源代码如下:

https://www.runoob.com/try/try.php?filename=try_xpath_select_cdnodes

挨个看一下这份html文件中的js代码(因为只有js代码)

xPath注入的基础语法有哪些

这是js的一个异步调用函数,重要的代码在第15行和第17行,第15行由函数传入的dname函数是xml的路径,第17行返回得到的xml文件。

xPath注入的基础语法有哪些

请参照第20行,变量xml获取了执行loadXMLDOC函数后得到的XML文件。21行path变量为xpath的查询语法。第一个if语句,判断是否是IE6及以下浏览器,如果是IE6或以下浏览器,获得对应的查询的到的节点数组之后,将数组中的值遍历输出到页面中。

xPath注入的基础语法有哪些

第二个if语句对于非IE6及以下浏览器,执行的过程一样,只是语法稍有不同,非IE6及以下浏览器通过evaluate函数进行查询,格式基本固定,实践一下刚才的几个语法。

查询语法的替换只需要修改path的值就行。

xPath注入的基础语法有哪些

先列出需要查询的语法:

注:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!

bookstore:选取 bookstore 元素的所有子节点。

/bookstore:选取根元素 bookstore。

bookstore/book:选取属于 bookstore 的子元素的所有 book 元素。

//book:选取所有 book 子元素,而不管它们在文档中的位置。

bookstore//book:选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore:之下的什么位置。

//@lang:选取名为 lang 的所有属性。

只使用这些单一查询可能无法得到预期结果,需要将它们与其他查询语句进行组合。以下是需要配合的一些语法:

谓语(用方括号,为了得到更精确的查询结果):

选取 bookstore 元素的第一个子元素 book 的路径为 /bookstore/book[1]。

/bookstore/book[last()]:选取属于 bookstore 子元素的最后一个 book 元素。

/bookstore/book[last()-1]:选取属于 bookstore 子元素的倒数第二个 book 元素。

/bookstore/book[position()<3]:选取最前面的两个属于 bookstore 元素的子元素的 book 元素。

//title[@lang]:选取所有拥有名为 lang 的属性的 title 元素。

//title[@lang='eng']:选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。

/bookstore/book[price>35.00]:选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。

/bookstore/book[price>35.00]/title:选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

选取未知节点:

*:匹配任何元素节点。

@*:匹配任何属性节点。

node():匹配任何类型的节点。

例如:

/bookstore/*:选取 bookstore 元素的所有子元素。

//*:选取文档中的所有元素。

//title[@*]:选取所有带有属性的 title 元素。

选取若干路径:

//book/title | //book/price:选取 book 元素的所有 title 和price 元素。

//title | //price:选取文档中的所有 title 和 price 元素。

/bookstore/book/title | //price:选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素

看几个查询的例子:

查询第二个book的title值:/bookstore/book[1]/title

xPath注入的基础语法有哪些

查询所有book的title的值:/bookstore/book//title

xPath注入的基础语法有哪些

查询所有带lang属性的title的值:/bookstore/book//title[@lang]

 xPath注入的基础语法有哪些

以上是xPath注入的基础语法有哪些的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:亿速云。如有侵权,请联系admin@php.cn删除

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!