content.json的结构¶
每个ZeroNet站点都有一个content.json
文件。 (content.json示例文件)
除其他外,此文件将包含您网站上所有文件的列表以及使用您的私钥创建的签名。 这用于确保站点文件的真实性并避免篡改(即:只有您或您信任的人才能更新您站点的内容)。
以下是支持的content.json
键列表:
自动生成¶
创建或克隆站点时会自动添加这些键。
address¶
您的网站地址
示例: 1TaLk3zM7ZRskJvrh3ZNCDVGXvkJusPKQ
address_index¶
The site address's BIP32 sub-key index of your BIP32 seed. Auto-added when you clone a site. It allows recovery of the site's privatekey from your BIP32 seed.
示例: 30926910
cloned_from¶
仅适用于克隆网站。 克隆站点的站点地址。
示例: 1BLogC9LN4oPDcruNz3qo1ysa133E9AGg8
clone_root¶
仅适用于克隆网站。 从中克隆的网站上的子目录。
示例: template-new
files¶
Size and sha512 hashes of automatically downloaded files contained in your site. Automatically added by the command zeronet.py siteSign siteaddress privatekey
.
示例:
"css/all.css": { "sha512": "869b09328f07bac538c313c4702baa5276544346418378199fa5cef644c139e8", "size": 148208 }
files_optional¶
Size and sha512 hashes of optional files contained in your site. Automatically added by the command zeronet.py siteSign siteaddress privatekey
.
示例:
"data/myvideo.mp4": { "sha512": "538c09328aa52765443464135cef644c144346418378199fa5cef61837819538", "size": 832103 }
modified¶
生成content.json的时间。
示例: 1425857522.076
sign (deprecated)¶
ECDSA sign of the content.json file content. (keys sorted, without whitespace and the sign
and signers_sign
nodes). For backward compatibility, will be removed soon.
示例:
"sign": [ 43117356513690007125104018825100786623580298637039067305407092800990252156956, 94139380599940414070721501960181245022427741524702752954181461080408625270000 ],
signers_sign¶
Possible signer addresses for the root content.json signed using the site address private key. Multiple entries are allowed here, allowing for site Multisig functionality.
Format of the signed string: [number_of_signers_required]:[signer address],[signer address]
示例:
signs_required: 1:1PcxwuHYxuJEmM4ydtB1vbiAY6WkNgsz9G,1CK6KHY6MHgYvmRQ4PAafKYDrg1ejbH1cE signers_sign: MEUCIQDuz+CzOVvFkv1P2ra9i5E1p1G0/1cOGecm7GpLpMLhuwIgBIbCL0YHXD1S2+x48QS5VO/rISrkdLiUR+o+x1X0y1A=
上述签名消息使用的签名地址是"1PcxwuHYxuJEmM4ydtB1vbiAY6WkNgsz9G".
signs¶
ECDSA signature for the the content.json file content:
sign
,signs
JSON nodes removed- JSON dumped with keys sorted alphabetically, without whitespace
- Signature generated on the dumped data, using Electrum Bitcoin message signature format:
- Message encoding:
sha256("\x18" || "Bitcoin Signed Message:\n" || num_to_var_int(len(message)) || message)
- Serialization format:
recovery_id || r || s
, where 27 ≤ recovery_id ≤ 30; signature length = 1 + 32 + 32 = 65 bytes. - Double vertical bar
||
denotes byte concatenation.
- Message encoding:
示例:
"signs": { "1TaLk3zM7ZRskJvrh3ZNCDVGXvkJusPKQ": "G6/QXFKvACPQ7LhoZG4fgqmeOSK99vGM2arVWkm9pV/WPCfc2ulv6iuQnuzw4v5z82qWswcRq907VPdBsdb9VRo=" },
zeronet_version¶
ZeroNet版本用于生成content.json文件。
Example: 0.2.5
可选设置¶
如果需要功能,可以添加这些选项。
background-color¶
包装器的背景颜色
示例: #F5F5F5
cloneable¶
如果为true,则允许克隆网站。
为了使您的网站可以正确克隆,您必须有一个单独的数据文件夹,以便干净克隆(例如,没有任何博客文章)。要做到这一点,你必须这样做 将 -default 后缀添加到数据文件和目录上。在克隆过程中,仅复制具有 -default 后缀的目录,后缀将在新站点中被自动删除。
description¶
您的网站描述,显示在ZeroHello的网站标题下。
示例: Decentralized forum demo
domain¶
您网站的Namecoin域名。 如果用户启用了Zeroname插件,ZeroHello将链接到此。
示例: Blog.ZeroNetwork.bit
ignore¶
不要签署与此模式匹配的文件。
示例: ((js|css)/(?!all.(js|css))|data/users/.*)
(ignore all js and css files except all.js and all.css and don't add anything from the data/users/
directory)
注意: 一些限制 应用于正则表达式中.
includes¶
在网站中包含另一个content.json。 这通常用于后续管理用户数据的content.json文件。
示例:
"includes": { "data/users/content.json": { "signers": [ # Possible signers address for the file "1LSxsKfC9S9TVXGGNSM3vPHjyW82jgCX5f" ], "signers_required": 1 # The *number* of Valid signs required to accept the file (Multisig possibility), "files_allowed": "data.json", # Preg pattern for the allowed files in the include file "includes_allowed": false, # Whether nested includes are allowed "max_size": 10000, # Max allowed size of included content.json and files it signs (in bytes) } }
merged_type¶
该网站所属的合并类型。
示例: ZeroMe
optional¶
Preg模式的可选文件。
示例: (data/mp4/.*|updater/.*)
(data/mp4和updater目录下的所有内容都是可选的)
注意: 一些限制 应用于正则表达式中.
signs_required¶
接受该文件所需的有效标志数量。 允许Multisig功能。
示例: 1
title¶
该网站的标题,在浏览器标题和ZeroHello中可见。
示例: ZeroTalk
translate¶
文件需要翻译。 (在languages
目录中使用语言json文件)
示例: ["index.html", "js/all.js"]
favicon¶
该网站的图标。 用站点特定的图标替换默认的ZeroNet徽标。 可以是.ico,.png,.svg等。
示例: favicon.ico
user_contents¶
当前目录中允许的用户内容的规则。
Node | 描述 |
---|---|
archived | 删除早于指定时间戳签名的指定用户内容文件夹(键:文件夹名,值:时间戳) |
archived_before | 删除所有签名早于指定时间戳的用户内容文件夹 |
cert_signers | 接受的域名和有效的签名者地址 |
permission_rules | 基于签名域名或授权方法的允许文件名和总目录大小 |
permissions | 每个用户的权限。(false = 禁止的用户) |
示例:
"user_contents": { "archived": { "1165u6pt5mQNFjyhMVwy6azB7bZuQGLA9b": 1523088096 }, "archived_before": 1523088096, "cert_signers": { "zeroid.bit": [ "1iD5ZQJMNXu43w1qLB8sfdHVKppVMduGz" ] }, "permission_rules": { ".*": { "files_allowed": "data.json", "files_allowed_optional" : "\\.(png|jpeg|jpg|gif|webm|mp4|ogg|mp3|pdf|epub|zip|tar\\.gz)(\\.piecemap\\.msgpack)", "max_size": 10000, "max_size_optional": 10000000 }, "bitid/.*@zeroid.bit": { "max_size": 40000 }, "bitmsg/.*@zeroid.bit": { "max_size": 15000 } }, "permissions": { "bad@zeroid.bit": false, "nofish@zeroid.bit": { "max_size": 100000 } } }
注意: 一些限制 应用于正则表达式中.
viewport¶
视区元标记的内容。 (用于适合移动设备的页面)
示例: width=device-width, initial-scale=1.0
正则表达式限制¶
为避免ReDoS算法复杂性攻击,以下限制适用于每种模式:
- 在
*,+,{
的重复字符之前,.
字符是必需的 - 单个模式允许最多9次重复
- 模式的最大长度为255个字符
示例:¶
((?!json).)*$
not allowed, because of)
before the*
character. Possible fix:.*(?!json)$
(.*.epub|.*.jpg|.*.jpeg|.*.png|data/.*.gif|.*.avi|.*.ogg|.*.webm|.*.mp4|.*.mp3|.*.mkv|.*.eot)
not allowed, because it has 12.*
repetition patterns. Possible fix:.*(epub|jpg|jpeg|png|data/gif|avi|ogg|webm|mp4|mp3|mkv|eot)