Yaml 语法规则

1 篇文章 0 订阅

Yaml (YAML Ain’t Markup Language)
    “ YAML是一种数据序列化语言,旨在对人类友好的使用性与现代编程语言很好地配合在程序中使用。
    开放,可易于操作且理解的语法极大地提高了程序的处理能力。YAML从一开始就被设计为易于数据使用人员使用。它使用Unicode可打印字符中一些提供结构信息,包含数据本身。YAML通过最小化结构特征的特性并允许数据以其自然而有意义的方式来显示自身,从而实现了独特的清晰度。例如,压痕可用于结构, 冒号分开键:值对和破折号用于创建“项目符号”清单。
    有各种各样的独特的数据结构,但它们都可以用三个基本数据类型表示: 映射(哈希/词典), 序列(数组/列表)和 标量(字符串/数字)。YAML利用了这些类型,并添加了一个简单的输入系统和别名机制形成完整的语言序列化数据结构。尽管大多数编程语言都可以使用YAML进行数据序列化,但是YAML擅长使用这些围绕三个基本类型构建的语言。这些包括新的敏捷语言,例如Perl,Python,PHP,Ruby和Javascript。
    有数百种用于编程的不同语言,但是只有少数几种用于存储和传输数据的语言。尽管其潜力实际上是无限的,但YAML现在还是专门为在常见的用例(如配置文件,日志文件,进程间消息传递,跨语言数据共享,对象持久性以及复杂数据结构的调试)下正常工作而创建的数据文件。当数据易于查看和理解时,编程将变得更加简单。

YAML的设计目标

  1. YAML易于人类阅读。
  2. YAML数据可在编程语言之间移植。
  3. 与 敏捷语言的本机数据结构。
  4. YAML具有一致的模型来支持通用工具。
  5. YAML支持一遍处理。
  6. YAML具有表现力和可扩展性。
  7. YAML易于实现和使用。

基本语法
大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层级的元素左对齐即可’#'表示注释

YAML 文档分割符
YAML 文件可以由一或多个文档组成(也即相对独立的组织结构组成),文档间使用“—”(三个横线)在每文档开始作为分隔符。同时,文档也可以使用“…”(三个点号)作为结束符(可选), 开头的标识符可以包含yaml解析器的指令,如版本号

#分别表示2块内容
---%YAML: 1.0
#doc1
- foo: 1
  bar: 2
---
#doc2
more: stuff
...

数据类型
序列(Array, List)按次序排列的值,可以嵌套使用,不同的子序列可以有不同的长度大小和类型

app:
  list:
    - l1
    - l2
    -
      - sub1
      - sub2
    - l4

对象(Map, Object,Dictionary):键值对的集合,又称为映射,字典, 对象可以用复杂key来表示,

map:
  key1: val1
  key2: val2
  key3:
    -
      skey1: sval1
      skey2: sval2
  key4:
    -
      - val1
      - val2
   
  #较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:
  ?  
    - complexkey1
    - complexkey2
  :
    - complexvalue1
    - complexvalue2
  #意思即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]

纯量(scalars)单个的不可以再分的值,纯量分为字符串,布尔值,整数,浮点数,Null, 时间,日期

boolean: 
    - TRUE  #true,True都可以
    - FALSE  #false,False都可以
float:
    - 3.14
    - 6.8523015e+5  #可以使用科学计数法
int:
    - 1231313
    - 0b1011_0011_0100_1011_1100    #二进制表示
null:
    nodeName: 'node'
    parent: ~  #使用~表示null
string:
    - 哈哈
    - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
    - line1
      line2    #字符串可以拆成多行,每一行会被转化成一个空格
date:
    - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: 
    -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

字符串(String)

  1. 可以使用!str 强制转换其他类型为字符串,如数组和日期
dateStr:!str 2001-08-01 
intStr:!str 192 
  1. 可以将字符串用单引号引起来,从而可以自由使用斜杠,冒号和其他指示符。在单引号内,可以通过使用两个彼此相邻的单引号来表示字符串中的单引号。
specialStr: '#:!/%.)' 
quoteStr: 'it''s very hard to explain' #it's very hard to explain
  1. 用双引号引起来的字符串使您可以使用转义符来表示ASCII和Unicode字符。
linebreak:\“一个在这里\ n,另一个在这里\ n\” 
  1. 单引号和双引号的字符串都可以带到YAML文档中的新行中。必须将它们缩进一步,将缩进解释为单个空格
multi-line: "so i'm going to
 let it go on and on to other lines
 until i end it with a quote."
multi-lineUnquoted : so i'm going to
 let it go on and on to other lines
 until i end it with a quote.

空值(Null)
可以使用~代表空值

nullKey: ~

|’保留换行符
#{ ‘this’ => “Foo\nBar\n” }
this: |
Foo
Bar

“ +”指示符表示将换行符保留到文本块的末尾。

#{preserving: "extra new lines are kept\n\n\n",dummy: "value"}, 
preserving: |+
  extra new lines are kept


dummy: value

为了使您能够更好地控制文本块中保留空间的方式,YAML具有’+‘和’-'指示符。‘+’指示器将保留所有结尾的换行符,而‘-’指示器将去除所有结尾的换行符。

Yaml
#保留末尾一个换行符
clipped: |
    This has one newline.

same as "clipped" above: "This has one newline.\n"

#‘-’不保留末尾的换行符
stripped: |-
    This has no newline.



#没有换行符
same as "stripped" above: "This has no newline."

#保留4个换行符直到same as
kept: |+
    This has four newlines.



same as "kept" above: "This has four newlines.\n\n\n\n"  

Yaml输出如下:
{  
  'clipped' => "This has one newline.\n", 
  'same as "clipped" above' => "This has one newline.\n", 
  'stripped' => 'This has no newline.', 
  'same as "stripped" above' => 'This has no newline.', 
  'kept' => "This has four newlines.\n\n\n\n", 
  'same as "kept" above' => "This has four newlines.\n\n\n\n" 
} 

‘>’字符,后跟缩进的文本块被视为折叠块即一块内容,其中由单个换行符分隔的文本行被连接为单个行。

Yaml
quote: > Mark McGwire's
    year was crippled
    by a knee injury.
source: espn

#显示如下
{‘quote’ : "Mark McGwire's year was crippled by a knee injury.\n", 
    'source' : 'espn' 
} 

&别名和*锚点,即变量和引用变量方式,yaml用 ‘&’来定义一个变量,用 ‘*’来引用这个变量

- &val; Steve 
- Clark 
- Brian 
- Oren 
- *val 
#显示内容
[ 'Steve ', 'Clark', 'Brian', 'Oren', 'Steve' ] 

对象引用和别名

defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: test
  <<: *defaults
  #<<将追加default内容到test节点相当于:
  database: test
  adapter:  postgres
  host:     localhost

指标字符

序号性格与功能
1_ 它表示块序列条目
2? 它表示映射键
3: 它表示映射值
4, 它表示流量收集条目
5[ 它启动流程序列
6] 它结束了流程序列
7{ 它启动流程映射
8} 它结束了流程映射
9# 它表示评论
10& 它表示节点的锚属性
11* 它表示别名节点
12! 它表示节点的标签
13| 它表示一个字面块标量
14> 它表示折叠块标量
15` 单引号围绕引用的流标量
16“ 双引号包围双引号流量标量
17% 它表示使用的指令
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 基于 YAML 语法模板的漏洞扫描是指使用 Python 编程语言编写的程序,利用 YAML 语法模板对系统进行漏洞扫描的一种方式。 YAML(Yet Another Markup Language)是一种用于表示数据序列化的标记语言,常用于配置文件和数据交换。基于这种语法模板,可以定义漏洞的规则和特征,以便程序针对目标系统进行扫描和检测。 首先,使用 Python 解析 YAML 配置文件,将其中定义的漏洞规则和特征加载到程序中。这些规则和特征可以包括已知的漏洞样本、恶意代码的特征、系统安全设置的检查等内容。 接下来,程序会根据这些规则和特征,对目标系统进行扫描。扫描过程中,程序会根据配置文件中的规则,探测系统是否存在已知的漏洞或潜在的安全风险。可以使用 Python 的网络模块或第三方库,与目标系统进行通信,发送请求并接收响应。在扫描的过程中,程序会检测系统中的漏洞、弱密码、未授权访问、敏感信息泄露等可能存在的安全问题。 漏洞扫描程序还可以对扫描结果进行分析和报告。通过 Python 编写的程序可以对扫描结果进行分类和整理,生成详细的报告,包括漏洞的名称、级别、影响范围、修复建议等信息。这些报告可以帮助系统管理员或开发人员快速定位和解决系统中的漏洞问题。 总而言之,Python 基于 YAML 语法模板的漏洞扫描是一种使用 Python 编程语言和 YAML 配置文件来定义漏洞规则和特征,并通过扫描目标系统进行检测和报告的方式。这种方式可以帮助我们提高对系统漏洞的发现能力,提高系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值