Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Vanessa 2022-06-27 09:38:46 +08:00
commit eaa1e5834f
12 changed files with 2414 additions and 21 deletions

View file

@ -522,6 +522,8 @@
"appearance11": "shrink to the tray after clicking the close button",
"appearance14": "Doc icon uses the system native Emoji",
"appearance15": "The desktop uses Twitter Emoji by default, and the native Emoji font in the system will be used after it is turned on",
"appearance16": "Hide bottom status bar",
"appearance17": "Hide the status bar at the bottom of the desktop when enabled",
"min": "Min",
"restore": "Restore",
"max": "Max",
@ -896,6 +898,9 @@
"143": "Creating data snapshot...",
"144": "Resetting data repository...",
"145": "Data repository reset completed",
"146": "Failed to reset data repository: %s"
"146": "Failed to reset data repository: %s",
"147": "Created a new data snapshot, took %.2fs",
"148": "Checked the data snapshot and found no changes",
"149": "Data snapshot has been synchronized, took %.2fs"
}
}

View file

@ -522,6 +522,8 @@
"appearance11": "shrink to the tray after clicking the close button",
"appearance14": "L'icône Doc utilise l'Emoji natif du système",
"appearance15": "Le bureau utilise Twitter Emoji par défaut, et la police Emoji native du système sera utilisée après son activation",
"appearance16": "Masquer la barre d'état inférieure",
"appearance17": "Masquer la barre d'état en bas du bureau lorsqu'elle est activée",
"min": "Min",
"restore": "Restaurer",
"max": "Max",
@ -896,6 +898,9 @@
"143": "Création d'un instantané de données...",
"144": "Réinitialisation du référentiel de données...",
"145": "Réinitialisation du référentiel de données terminée",
"146": "Échec de la réinitialisation du référentiel de données : %s"
"146": "Échec de la réinitialisation du référentiel de données : %s",
"147": "Créé un nouvel instantané de données, a pris %.2fs",
"148": "Vérifié l'instantané des données et n'a trouvé aucun changement",
"149": "L'instantané des données a été synchronisé, a pris %.2fs"
}
}

View file

@ -522,6 +522,8 @@
"appearance11": "點擊關閉按鈕後縮小到託盤中",
"appearance14": "文檔圖示使用系統原生 Emoji",
"appearance15": "桌面端預設使用 Twitter Emoji開啟後將使用系統原生的 Emoji",
"appearance16": "隱藏底部狀態欄",
"appearance17": "開啟後將隱藏桌面端底部狀態欄",
"min": "最小化",
"restore": "向下還原",
"max": "最大化",
@ -895,6 +897,9 @@
"143": "正在創建數據快照...",
"144": "正在重置數據倉庫...",
"145": "數據倉庫重置完畢",
"146": "重置數據倉庫失敗:%s"
"146": "重置數據倉庫失敗:%s",
"147": "創建了一個新的數據快照,耗時 %.2fs",
"148": "檢查數據快照,沒有發現任何變化",
"149": "已經同步數據快照,耗時 %.2fs"
}
}

View file

@ -523,6 +523,8 @@
"appearance11": "点击关闭按钮后缩小到托盘中",
"appearance14": "文档图标使用系统原生 Emoji",
"appearance15": "桌面端默认使用 Twitter Emoji开启后将使用系统原生的 Emoji",
"appearance16": "隐藏底部状态栏",
"appearance17": "开启后将隐藏桌面端底部状态栏",
"min": "最小化",
"restore": "向下还原",
"max": "最大化",
@ -897,6 +899,9 @@
"143": "正在创建数据快照...",
"144": "正在重置数据仓库...",
"145": "数据仓库重置完毕",
"146": "重置数据仓库失败:%s"
"146": "重置数据仓库失败:%s",
"147": "创建了一个新的数据快照,耗时 %.2fs",
"148": "检查数据快照,没有发现任何变化",
"149": "已经同步数据快照,耗时 %.2fs"
}
}

View file

@ -6,7 +6,7 @@
"id": "20210117215840-jcl17fx",
"title": "Data Security",
"type": "doc",
"updated": "20220111133319"
"updated": "20220626214710"
},
"Children": [
{
@ -346,6 +346,788 @@
]
}
]
},
{
"ID": "20220626214041-sz90qpf",
"Type": "NodeHeading",
"HeadingLevel": 2,
"Properties": {
"id": "20220626214041-sz90qpf",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Threat Model"
}
]
},
{
"ID": "20220626214041-68ld138",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-68ld138",
"updated": "20220626214048"
},
"Children": [
{
"Type": "NodeText",
"Data": "It mainly evaluates local data security and SiYuan cloud storage security."
}
]
},
{
"ID": "20220626214041-mu28gc4",
"Type": "NodeHeading",
"HeadingLevel": 3,
"Properties": {
"id": "20220626214041-mu28gc4",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Premise"
}
]
},
{
"ID": "20220626214041-susd3su",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214041-susd3su",
"updated": "20220626214653"
},
"Children": [
{
"ID": "20220626214041-r7wqevv",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-r7wqevv",
"updated": "20220626214653"
},
"Children": [
{
"ID": "20220626214041-0ji5vg8",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-0ji5vg8",
"updated": "20220626214131"
},
"Children": [
{
"Type": "NodeText",
"Data": "The local host operating system is a fully trusted environment. This is the most basic premise of data security, and it can only be guaranteed based on this premise."
}
]
},
{
"ID": "20220626214041-0m7kunu",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214041-0m7kunu",
"updated": "20220626214653"
},
"Children": [
{
"ID": "20220626214041-v8p0as0",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-v8p0as0",
"updated": "20220626214653"
},
"Children": [
{
"ID": "20220626214041-asg2zwy",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-asg2zwy",
"updated": "20220626214653"
},
"Children": [
{
"Type": "NodeText",
"Data": "Availability of original data"
}
]
}
]
},
{
"ID": "20220626214041-4a0wgmi",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-4a0wgmi",
"updated": "20220626214649"
},
"Children": [
{
"ID": "20220626214041-xd159p7",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-xd159p7",
"updated": "20220626214649"
},
"Children": [
{
"Type": "NodeText",
"Data": "Rriginal data is not leaked"
}
]
}
]
},
{
"ID": "20220626214041-7x7h5tv",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-7x7h5tv",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-trypmwy",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-trypmwy",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Key security"
}
]
}
]
}
]
}
]
},
{
"ID": "20220626214041-walongz",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-walongz",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-qmyo4ov",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-qmyo4ov",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Users do not leak keys to attackers"
}
]
}
]
},
{
"ID": "20220626214041-r0gnkdl",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-r0gnkdl",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-rtbhm04",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-rtbhm04",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Data in cloud storage will not be deleted"
}
]
}
]
},
{
"ID": "20220626214041-w7h0sju",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-w7h0sju",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-2s2zb0n",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-2s2zb0n",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "AES-GCM encryption algorithm is not broken"
}
]
}
]
},
{
"ID": "20220626214041-ttywl0b",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-ttywl0b",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-3eek7k1",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-3eek7k1",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "The attacker cannot provide the computing power required for brute force cracking"
}
]
}
]
}
]
},
{
"ID": "20220626214041-ku1495e",
"Type": "NodeHeading",
"HeadingLevel": 3,
"Properties": {
"id": "20220626214041-ku1495e",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Cloud storage can guarantee"
}
]
},
{
"ID": "20220626214041-pmwe9u7",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214041-pmwe9u7",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-dcrtsao",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-dcrtsao",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-1ozs7g3",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-1ozs7g3",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Data can only be decrypted with the correct key"
}
]
}
]
},
{
"ID": "20220626214041-n2epubs",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-n2epubs",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-ofy8fcf",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-ofy8fcf",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Data cannot be decrypted after being tampered with"
}
]
}
]
}
]
},
{
"ID": "20220626214041-2i5mpyi",
"Type": "NodeHeading",
"HeadingLevel": 3,
"Properties": {
"id": "20220626214041-2i5mpyi",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Normal example"
}
]
},
{
"ID": "20220626214041-hxlxq6f",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-hxlxq6f",
"updated": "20220626214555"
},
"Children": [
{
"Type": "NodeText",
"Data": "Based on the above premises and guarantees, the following are examples of what an attacker can achieve."
}
]
},
{
"ID": "20220626214041-zhwz3ln",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-zhwz3ln",
"updated": "20220626214434"
},
"Children": [
{
"Type": "NodeText",
"Data": "If an attacker has read-only access to cloud storage, he can:"
}
]
},
{
"ID": "20220626214041-7fc1xei",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214041-7fc1xei",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-3w8hwp2",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-3w8hwp2",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-f2315iq",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-f2315iq",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Get the encrypted data and try brute force cracking"
}
]
}
]
},
{
"ID": "20220626214041-zx44bbo",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-zx44bbo",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-9424m7p",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-9424m7p",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Infer data size from index information"
}
]
}
]
}
]
},
{
"ID": "20220626214041-m3wwddi",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-m3wwddi",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "If an attacker is able to hijack the network, then he can:"
}
]
},
{
"ID": "20220626214041-mz2bu3y",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214041-mz2bu3y",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-3eofuvg",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-3eofuvg",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-ml4720h",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-ml4720h",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Tampering with data makes data unavailable"
}
]
}
]
},
{
"ID": "20220626214041-v1d69l9",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-v1d69l9",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-66rla1o",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-66rla1o",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Get user ID information"
}
]
}
]
},
{
"ID": "20220626214041-4sk5r3x",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-4sk5r3x",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-495954g",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-495954g",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Infer data size from traffic"
}
]
}
]
}
]
},
{
"ID": "20220626214041-eikbmi8",
"Type": "NodeHeading",
"HeadingLevel": 2,
"Properties": {
"id": "20220626214041-eikbmi8",
"updated": "20220626214222"
},
"Children": [
{
"Type": "NodeText",
"Data": "Exception example"
}
]
},
{
"ID": "20220626214041-844aaoz",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-844aaoz",
"updated": "20220626214558"
},
"Children": [
{
"Type": "NodeText",
"Data": "If the above premises or guarantees are violated, the following are examples of what an attacker can achieve."
}
]
},
{
"ID": "20220626214041-tqyy2wg",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-tqyy2wg",
"updated": "20220626214626"
},
"Children": [
{
"Type": "NodeText",
"Data": "If an attacker is able to compromise the local host operating system, then he can:"
}
]
},
{
"ID": "20220626214041-t2pukqz",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214041-t2pukqz",
"updated": "20220626214644"
},
"Children": [
{
"ID": "20220626214041-vqdjcfd",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-vqdjcfd",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-55vp65s",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-55vp65s",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Modify or delete the original data, making the original data unavailable"
}
]
}
]
},
{
"ID": "20220626214041-081qsim",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-081qsim",
"updated": "20220626214642"
},
"Children": [
{
"ID": "20220626214041-csmhiio",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-csmhiio",
"updated": "20220626214642"
},
"Children": [
{
"Type": "NodeText",
"Data": "Get original data"
}
]
}
]
},
{
"ID": "20220626214041-77tr01l",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-77tr01l",
"updated": "20220626214644"
},
"Children": [
{
"ID": "20220626214041-wo4tkf4",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-wo4tkf4",
"updated": "20220626214644"
},
"Children": [
{
"Type": "NodeText",
"Data": "Get the key"
}
]
}
]
}
]
},
{
"ID": "20220626214041-9sz5qad",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-9sz5qad",
"updated": "20220626214710"
},
"Children": [
{
"Type": "NodeText",
"Data": "If an attacker has write access to cloud storage, he can:"
}
]
},
{
"ID": "20220626214041-bfgt82v",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214041-bfgt82v",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-qjop563",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214041-qjop563",
"updated": "20220626214041"
},
"Children": [
{
"ID": "20220626214041-pu5jrjr",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214041-pu5jrjr",
"updated": "20220626214041"
},
"Children": [
{
"Type": "NodeText",
"Data": "Modify or delete cloud storage, causing cloud storage data to be unavailable"
}
]
}
]
}
]
}
]
}

View file

@ -6,7 +6,7 @@
"id": "20210117211155-56n4odu",
"title": "数据安全",
"type": "doc",
"updated": "20220111133217"
"updated": "20220626213935"
},
"Children": [
{
@ -400,6 +400,780 @@
]
}
]
},
{
"ID": "20220626205507-zakjqo5",
"Type": "NodeHeading",
"HeadingLevel": 2,
"Properties": {
"id": "20220626205507-zakjqo5",
"updated": "20220626205745"
},
"Children": [
{
"Type": "NodeText",
"Data": "威胁模型"
}
]
},
{
"ID": "20220626210804-d1iir4r",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626210804-d1iir4r",
"updated": "20220626213925"
},
"Children": [
{
"Type": "NodeText",
"Data": "主要针对本地数据安全和思源云端存储安全进行评估。"
}
]
},
{
"ID": "20220626210024-c045aps",
"Type": "NodeHeading",
"HeadingLevel": 3,
"Properties": {
"id": "20220626210024-c045aps",
"updated": "20220626213021"
},
"Children": [
{
"Type": "NodeText",
"Data": "前提假设"
}
]
},
{
"ID": "20220626210038-joi74n0",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626210038-joi74n0",
"updated": "20220626211139"
},
"Children": [
{
"ID": "20220626210038-412dnfz",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626210038-412dnfz",
"updated": "20220626210038"
},
"Children": [
{
"ID": "20220626210038-us3tpf5",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626210038-us3tpf5",
"updated": "20220626210326"
},
"Children": [
{
"Type": "NodeText",
"Data": "本地操作系统是完全受信任的环境。这是数据安全最基础的前提,基于该前提才能保证"
}
]
},
{
"ID": "20220626210254-707f04m",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626210254-707f04m"
},
"Children": [
{
"ID": "20220626210254-fr4kbsa",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626210254-fr4kbsa"
},
"Children": [
{
"ID": "20220626210254-ldlvsgr",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626210254-ldlvsgr",
"updated": "20220626210532"
},
"Children": [
{
"Type": "NodeText",
"Data": "原始数据的可用性"
}
]
}
]
},
{
"ID": "20220626210411-15gniy2",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626210411-15gniy2"
},
"Children": [
{
"ID": "20220626210411-abr4ep7",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626210411-abr4ep7",
"updated": "20220626210723"
},
"Children": [
{
"Type": "NodeText",
"Data": "原始数据不被泄漏"
}
]
}
]
},
{
"ID": "20220626210401-9o0os4g",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626210401-9o0os4g"
},
"Children": [
{
"ID": "20220626210401-64ngms3",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626210401-64ngms3",
"updated": "20220626210417"
},
"Children": [
{
"Type": "NodeText",
"Data": "密钥的安全性"
}
]
}
]
}
]
}
]
},
{
"ID": "20220626210629-dleyp1j",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626210629-dleyp1j"
},
"Children": [
{
"ID": "20220626210629-7yee6s7",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626210629-7yee6s7",
"updated": "20220626210707"
},
"Children": [
{
"Type": "NodeText",
"Data": "用户不泄漏密钥给攻击者"
}
]
}
]
},
{
"ID": "20220626210739-9bgfjnr",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626210739-9bgfjnr"
},
"Children": [
{
"ID": "20220626210739-2zabs74",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626210739-2zabs74",
"updated": "20220626210932"
},
"Children": [
{
"Type": "NodeText",
"Data": "云端存储中的数据不被删除"
}
]
}
]
},
{
"ID": "20220626211010-vq0mwwm",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626211010-vq0mwwm",
"updated": "20220626211025"
},
"Children": [
{
"ID": "20220626211010-6k8ivhp",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626211010-6k8ivhp",
"updated": "20220626211025"
},
"Children": [
{
"Type": "NodeText",
"Data": "AES-GCM 加密算法未被攻破"
}
]
}
]
},
{
"ID": "20220626211022-6h7y6bs",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626211022-6h7y6bs",
"updated": "20220626211139"
},
"Children": [
{
"ID": "20220626211022-3n1z0hp",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626211022-3n1z0hp",
"updated": "20220626211139"
},
"Children": [
{
"Type": "NodeText",
"Data": "攻击者无法提供暴力破解所需算力"
}
]
}
]
}
]
},
{
"ID": "20220626210027-hhtc2a6",
"Type": "NodeHeading",
"HeadingLevel": 3,
"Properties": {
"id": "20220626210027-hhtc2a6",
"updated": "20220626213850"
},
"Children": [
{
"Type": "NodeText",
"Data": "云端存储能够保证"
}
]
},
{
"ID": "20220626211230-el1oox9",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626211230-el1oox9",
"updated": "20220626211249"
},
"Children": [
{
"ID": "20220626211249-wrkarxp",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626211249-wrkarxp",
"updated": "20220626211249"
},
"Children": [
{
"ID": "20220626211249-2ovxrgo",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626211249-2ovxrgo",
"updated": "20220626211503"
},
"Children": [
{
"Type": "NodeText",
"Data": "只有通过正确的密钥才能解密数据"
}
]
}
]
},
{
"ID": "20220626211459-k8c0zvf",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626211459-k8c0zvf"
},
"Children": [
{
"ID": "20220626211459-w4e8ch7",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626211459-w4e8ch7",
"updated": "20220626211539"
},
"Children": [
{
"Type": "NodeText",
"Data": "数据被篡改后无法解密"
}
]
}
]
}
]
},
{
"ID": "20220626213039-vc4f1ts",
"Type": "NodeHeading",
"HeadingLevel": 3,
"Properties": {
"id": "20220626213039-vc4f1ts",
"updated": "20220626213102"
},
"Children": [
{
"Type": "NodeText",
"Data": "正常示例"
}
]
},
{
"ID": "20220626211621-yw8d4zb",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626211621-yw8d4zb",
"updated": "20220626211919"
},
"Children": [
{
"Type": "NodeText",
"Data": "基于上述假设和保证,下面是攻击者能够达成的目标示例。"
}
]
},
{
"ID": "20220626211754-ftwoqz4",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626211754-ftwoqz4",
"updated": "20220626212025"
},
"Children": [
{
"Type": "NodeText",
"Data": "如果攻击者对云端存储具有只读权限,那么他能够:"
}
]
},
{
"ID": "20220626212000-iri4fhz",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626212000-iri4fhz",
"updated": "20220626212909"
},
"Children": [
{
"ID": "20220626212007-152nmb6",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626212007-152nmb6",
"updated": "20220626212007"
},
"Children": [
{
"ID": "20220626212007-sj2d1y0",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626212007-sj2d1y0",
"updated": "20220626212245"
},
"Children": [
{
"Type": "NodeText",
"Data": "获取到已经加密的数据,尝试暴力破解"
}
]
}
]
},
{
"ID": "20220626212247-3ldjbn9",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626212247-3ldjbn9",
"updated": "20220626212909"
},
"Children": [
{
"ID": "20220626212247-bdfgh5c",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626212247-bdfgh5c",
"updated": "20220626212909"
},
"Children": [
{
"Type": "NodeText",
"Data": "通过索引信息推断出数据大小"
}
]
}
]
}
]
},
{
"ID": "20220626212515-ap79woa",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626212515-ap79woa",
"updated": "20220626212650"
},
"Children": [
{
"Type": "NodeText",
"Data": "如果攻击者能够劫持网络,那么他能够:"
}
]
},
{
"ID": "20220626212651-jmsl9e0",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626212651-jmsl9e0",
"updated": "20220626212914"
},
"Children": [
{
"ID": "20220626212658-td3mom4",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626212658-td3mom4",
"updated": "20220626212658"
},
"Children": [
{
"ID": "20220626212658-cil0rtv",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626212658-cil0rtv",
"updated": "20220626212759"
},
"Children": [
{
"Type": "NodeText",
"Data": "篡改数据造成数据不可用"
}
]
}
]
},
{
"ID": "20220626212804-op12pak",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626212804-op12pak"
},
"Children": [
{
"ID": "20220626212804-2kb2439",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626212804-2kb2439",
"updated": "20220626212836"
},
"Children": [
{
"Type": "NodeText",
"Data": "获得用户 ID 信息"
}
]
}
]
},
{
"ID": "20220626212854-jn95j1j",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626212854-jn95j1j",
"updated": "20220626212914"
},
"Children": [
{
"ID": "20220626212854-4vfflua",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626212854-4vfflua",
"updated": "20220626212914"
},
"Children": [
{
"Type": "NodeText",
"Data": "通过流量推断出数据大小"
}
]
}
]
}
]
},
{
"ID": "20220626211209-ok2rvht",
"Type": "NodeHeading",
"HeadingLevel": 2,
"Properties": {
"id": "20220626211209-ok2rvht",
"updated": "20220626213125"
},
"Children": [
{
"Type": "NodeText",
"Data": "异常示例"
}
]
},
{
"ID": "20220626213125-y4dolh0",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626213125-y4dolh0",
"updated": "20220626213144"
},
"Children": [
{
"Type": "NodeText",
"Data": "如果违反了上述假设或保证,下面是攻击者能够达成的目标和示例。"
}
]
},
{
"ID": "20220626213144-2t86jkw",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626213144-2t86jkw",
"updated": "20220626213227"
},
"Children": [
{
"Type": "NodeText",
"Data": "如果攻击者能够入侵本地操作系统,那么他能够:"
}
]
},
{
"ID": "20220626213227-y3lsr2u",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626213227-y3lsr2u",
"updated": "20220626213836"
},
"Children": [
{
"ID": "20220626213228-5y4ooc5",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626213228-5y4ooc5",
"updated": "20220626213653"
},
"Children": [
{
"ID": "20220626213228-mcfm0xy",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626213228-mcfm0xy",
"updated": "20220626213653"
},
"Children": [
{
"Type": "NodeText",
"Data": "修改或删除原始数据,造成原始数据不可用"
}
]
}
]
},
{
"ID": "20220626213330-4qecgfd",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626213330-4qecgfd",
"updated": "20220626213831"
},
"Children": [
{
"ID": "20220626213330-ycd3hae",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626213330-ycd3hae",
"updated": "20220626213831"
},
"Children": [
{
"Type": "NodeText",
"Data": "获得原始数据"
}
]
}
]
},
{
"ID": "20220626213347-bm66fsj",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626213347-bm66fsj",
"updated": "20220626213836"
},
"Children": [
{
"ID": "20220626213347-6a376wm",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626213347-6a376wm",
"updated": "20220626213836"
},
"Children": [
{
"Type": "NodeText",
"Data": "获得密钥"
}
]
}
]
}
]
},
{
"ID": "20220626213353-klg8vw5",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626213353-klg8vw5",
"updated": "20220626213537"
},
"Children": [
{
"Type": "NodeText",
"Data": "如果攻击者对云端存储具有写入权限,那么他能够:"
}
]
},
{
"ID": "20220626213507-6er6cfn",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626213507-6er6cfn",
"updated": "20220626213935"
},
"Children": [
{
"ID": "20220626213541-93non0e",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626213541-93non0e",
"updated": "20220626213935"
},
"Children": [
{
"ID": "20220626213541-t09iiuw",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626213541-t09iiuw",
"updated": "20220626213935"
},
"Children": [
{
"Type": "NodeText",
"Data": "修改或删除云端存储,造成云端存储数据不可用"
}
]
}
]
}
]
}
]
}

View file

@ -5,7 +5,7 @@
"icon": "1f50f",
"id": "20211226115043-afhev0g",
"title": "資料安全",
"updated": "20220111133353"
"updated": "20220626214021"
},
"Children": [
{
@ -357,6 +357,788 @@
]
}
]
},
{
"ID": "20220626214021-in5zyhv",
"Type": "NodeHeading",
"HeadingLevel": 2,
"Properties": {
"id": "20220626214021-in5zyhv",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "威脅模型"
}
]
},
{
"ID": "20220626214021-6tofzu0",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-6tofzu0",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "主要針對本地數據安全和思源雲端存儲安全進行評估。"
}
]
},
{
"ID": "20220626214021-viqft4z",
"Type": "NodeHeading",
"HeadingLevel": 3,
"Properties": {
"id": "20220626214021-viqft4z",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "前提假設"
}
]
},
{
"ID": "20220626214021-x8i173y",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214021-x8i173y",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-7gox8eu",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-7gox8eu",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-2wsjz7h",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-2wsjz7h",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "本地操作系統是完全受信任的環境。這是數據安全最基礎的前提,基於該前提才能保證"
}
]
},
{
"ID": "20220626214021-vlffl2a",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214021-vlffl2a",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-dsnclyw",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-dsnclyw",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-1n601ag",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-1n601ag",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "原始數據的可用性"
}
]
}
]
},
{
"ID": "20220626214021-w7t53bu",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-w7t53bu",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-ahy7fhq",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-ahy7fhq",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "原始數據不被洩漏"
}
]
}
]
},
{
"ID": "20220626214021-y8k9lz5",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-y8k9lz5",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-h2gyyuo",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-h2gyyuo",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "密鑰的安全性"
}
]
}
]
}
]
}
]
},
{
"ID": "20220626214021-ergkh2g",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-ergkh2g",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-hao852y",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-hao852y",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "用戶不洩漏密鑰給攻擊者"
}
]
}
]
},
{
"ID": "20220626214021-g0xbo70",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-g0xbo70",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-tblyjo1",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-tblyjo1",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "雲端存儲中的數據不被刪除"
}
]
}
]
},
{
"ID": "20220626214021-xdngup7",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-xdngup7",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-lebj0c9",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-lebj0c9",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "AES-GCM 加密算法未被攻破"
}
]
}
]
},
{
"ID": "20220626214021-axp1ikp",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-axp1ikp",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-jdn7lut",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-jdn7lut",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "攻擊者無法提供暴力破解所需算力"
}
]
}
]
}
]
},
{
"ID": "20220626214021-75a1qb0",
"Type": "NodeHeading",
"HeadingLevel": 3,
"Properties": {
"id": "20220626214021-75a1qb0",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "雲端存儲能夠保證"
}
]
},
{
"ID": "20220626214021-gz8p50i",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214021-gz8p50i",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-6mh42fa",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-6mh42fa",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-3268c0b",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-3268c0b",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "只有通過正確的密鑰才能解密數據"
}
]
}
]
},
{
"ID": "20220626214021-6qmxb8n",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-6qmxb8n",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-b8dnd5h",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-b8dnd5h",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "數據被篡改後無法解密"
}
]
}
]
}
]
},
{
"ID": "20220626214021-k0l9w1q",
"Type": "NodeHeading",
"HeadingLevel": 3,
"Properties": {
"id": "20220626214021-k0l9w1q",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "正常示例"
}
]
},
{
"ID": "20220626214021-h6pm7s8",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-h6pm7s8",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "基於上述假設和保證,下面是攻擊者能夠達成的目標示例。"
}
]
},
{
"ID": "20220626214021-n88bvde",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-n88bvde",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "如果攻擊者對雲端存儲具有隻讀權限,那麼他能夠:"
}
]
},
{
"ID": "20220626214021-bu1nuv1",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214021-bu1nuv1",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-3i7p5ux",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-3i7p5ux",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-u08ygc7",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-u08ygc7",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "獲取到已經加密的數據,嘗試暴力破解"
}
]
}
]
},
{
"ID": "20220626214021-udnvdb5",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-udnvdb5",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-v3l2lpa",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-v3l2lpa",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "通過索引信息推斷出數據大小"
}
]
}
]
}
]
},
{
"ID": "20220626214021-v7wq31z",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-v7wq31z",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "如果攻擊者能夠劫持網絡,那麼他能夠:"
}
]
},
{
"ID": "20220626214021-o83u6yc",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214021-o83u6yc",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-ly7r5qb",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-ly7r5qb",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-3utkkjt",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-3utkkjt",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "篡改數據造成數據不可用"
}
]
}
]
},
{
"ID": "20220626214021-lr58bwm",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-lr58bwm",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-qmq9vxb",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-qmq9vxb",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "獲得用戶 ID 信息"
}
]
}
]
},
{
"ID": "20220626214021-i53soj1",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-i53soj1",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-8nqmuhl",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-8nqmuhl",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "通過流量推斷出數據大小"
}
]
}
]
}
]
},
{
"ID": "20220626214021-v89v1l5",
"Type": "NodeHeading",
"HeadingLevel": 2,
"Properties": {
"id": "20220626214021-v89v1l5",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "異常示例"
}
]
},
{
"ID": "20220626214021-07gbtjr",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-07gbtjr",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "如果違反了上述假設或保證,下面是攻擊者能夠達成的目標和示例。"
}
]
},
{
"ID": "20220626214021-5mz1301",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-5mz1301",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "如果攻擊者能夠入侵本地操作系統,那麼他能夠:"
}
]
},
{
"ID": "20220626214021-57coq7j",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214021-57coq7j",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-m7n7mzh",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-m7n7mzh",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-j7hqbfp",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-j7hqbfp",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "修改或刪除原始數據,造成原始數據不可用"
}
]
}
]
},
{
"ID": "20220626214021-2b6ovit",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-2b6ovit",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-giszicf",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-giszicf",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "獲得原始數據"
}
]
}
]
},
{
"ID": "20220626214021-54puka1",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-54puka1",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-mcxeo69",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-mcxeo69",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "獲得密鑰"
}
]
}
]
}
]
},
{
"ID": "20220626214021-oxtgu33",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-oxtgu33",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "如果攻擊者對雲端存儲具有寫入權限,那麼他能夠:"
}
]
},
{
"ID": "20220626214021-8dj1v35",
"Type": "NodeList",
"ListData": {},
"Properties": {
"id": "20220626214021-8dj1v35",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-i8s5ai0",
"Type": "NodeListItem",
"ListData": {
"BulletChar": 42,
"Marker": "Kg=="
},
"Properties": {
"id": "20220626214021-i8s5ai0",
"updated": "20220626214021"
},
"Children": [
{
"ID": "20220626214021-ye9pf1i",
"Type": "NodeParagraph",
"Properties": {
"id": "20220626214021-ye9pf1i",
"updated": "20220626214021"
},
"Children": [
{
"Type": "NodeText",
"Data": "修改或刪除雲端存儲,造成雲端存儲數據不可用"
}
]
}
]
}
]
}
]
}

View file

@ -147,6 +147,14 @@ export const appearance = {
<span class="fn__space"></span>
<input class="b3-switch fn__flex-center" id="nativeEmoji" type="checkbox"${window.siyuan.config.appearance.nativeEmoji ? " checked" : ""}>
</label>
<label class="fn__flex b3-label">
<div class="fn__flex-1">
${window.siyuan.languages.appearance16}
<div class="b3-label__text">${window.siyuan.languages.appearance17}</div>
</div>
<span class="fn__space"></span>
<input class="b3-switch fn__flex-center" id="hideStatusBar" type="checkbox"${window.siyuan.config.appearance.hideStatusBar ? " checked" : ""}>
</label>
<label class="fn__flex b3-label">
<div class="fn__flex-1">
${window.siyuan.languages.appearance10}
@ -231,6 +239,7 @@ export const appearance = {
customCSS: window.siyuan.config.appearance.customCSS,
closeButtonBehavior: (appearance.element.querySelector("#closeButtonBehavior") as HTMLInputElement).checked ? 1 : 0,
nativeEmoji: (appearance.element.querySelector("#nativeEmoji") as HTMLInputElement).checked,
hideStatusBar: (appearance.element.querySelector("#hideStatusBar") as HTMLInputElement).checked,
}, response => {
let needTip = false;
if (modeNumber !== window.siyuan.config.appearance.mode || themeLight !== window.siyuan.config.appearance.themeLight ||
@ -344,7 +353,7 @@ export const appearance = {
ipcRenderer.send(Constants.SIYUAN_CONFIG_CLOSE, data.closeButtonBehavior);
/// #endif
loadAssets(data);
const modeElement = document.getElementById("barThemeMode");
const modeElement = document.getElementById("barThemeMode");
if (modeElement) {
if (data.mode === 1) {
modeElement.classList.add("toolbar__item--active");

View file

@ -205,6 +205,7 @@ declare interface IWebSocketData {
}
declare interface IAppearance {
hideStatusBar: boolean,
nativeEmoji: boolean,
customCSS: boolean,
themeJS: boolean,

View file

@ -33,6 +33,7 @@ type Appearance struct {
CustomCSS bool `json:"customCSS"` // 是否启用自定义主题
ThemeJS bool `json:"themeJS"` // 是否启用了主题 JavaScript
CloseButtonBehavior int `json:"closeButtonBehavior"` // 关闭按钮行为0退出1最小化到托盘
HideStatusBar bool `json:"hideStatusBar"` // 是否隐藏底部状态栏
}
func NewAppearance() *Appearance {
@ -47,5 +48,6 @@ func NewAppearance() *Appearance {
Lang: "en_US",
CustomCSS: false,
CloseButtonBehavior: 0,
HideStatusBar: false,
}
}

View file

@ -360,15 +360,27 @@ func IndexRepo(memo string) (err error) {
defer writingDataLock.Unlock()
start := time.Now()
latest, _ := repo.Latest()
WaitForWritingFiles()
sql.WaitForWritingDatabase()
filelock.ReleaseAllFileLocks()
_, err = repo.Index(memo, map[string]interface{}{
index, err := repo.Index(memo, map[string]interface{}{
CtxPushMsg: CtxPushMsgToStatusBarAndProgress,
})
if nil != err {
util.PushStatusBar("Create data snapshot failed")
return
}
elapsed := time.Since(start)
util.LogInfof("index data repo elapsed [%.2fs]", elapsed.Seconds())
util.PushStatusBar(fmt.Sprintf("Index data repo elapsed [%.2fs]", elapsed.Seconds()))
if nil != latest {
if latest.ID != index.ID {
util.PushStatusBar(fmt.Sprintf(Conf.Language(147), elapsed.Seconds()))
} else {
util.PushStatusBar(Conf.Language(148))
}
} else {
util.PushStatusBar(fmt.Sprintf(Conf.Language(147), elapsed.Seconds()))
}
util.PushClearProgress()
return
}
@ -393,23 +405,32 @@ func indexRepoBeforeCloudSync() {
}
start := time.Now()
latest, err := repo.Latest()
latest, _ := repo.Latest()
index, err := repo.Index("[Auto] Cloud sync", map[string]interface{}{
CtxPushMsg: CtxPushMsgToStatusBar,
})
if nil != err {
util.PushStatusBar("Create data snapshot for cloud sync failed")
util.LogErrorf("index data repo before cloud sync failed: %s", err)
return
}
elapsed := time.Since(start)
if nil != latest && latest.ID != index.ID {
// 对新创建的快照需要更新备注,加入耗时统计
index.Memo = fmt.Sprintf("[Auto] Cloud sync, completed in [%.2fs]", elapsed.Seconds())
err = repo.PutIndex(index)
if nil != err {
util.LogErrorf("put index into data repo before cloud sync failed: %s", err)
return
if nil != latest {
if latest.ID != index.ID {
// 对新创建的快照需要更新备注,加入耗时统计
index.Memo = fmt.Sprintf("[Auto] Cloud sync, completed in [%.2fs]", elapsed.Seconds())
err = repo.PutIndex(index)
if nil != err {
util.PushStatusBar("Save data snapshot for cloud sync failed")
util.LogErrorf("put index into data repo before cloud sync failed: %s", err)
return
}
util.PushStatusBar(fmt.Sprintf(Conf.Language(147), elapsed.Seconds()))
} else {
util.PushStatusBar(Conf.Language(148))
}
} else {
util.PushStatusBar(fmt.Sprintf(Conf.Language(147), elapsed.Seconds()))
}
if 7000 < elapsed.Milliseconds() {
util.LogWarnf("index data repo before cloud sync elapsed [%dms]", elapsed.Milliseconds())
@ -433,6 +454,6 @@ func syncRepo() (err error) {
})
elapsed := time.Since(start)
util.LogInfof("sync data repo elapsed [%.2fs]", elapsed.Seconds())
util.PushStatusBar(fmt.Sprintf("Sync data repo elapsed [%.2fs]", elapsed.Seconds()))
util.PushStatusBar(fmt.Sprintf(Conf.Language(149), elapsed.Seconds()))
return
}

View file

@ -18,6 +18,7 @@ package util
import (
"sync"
"time"
"github.com/88250/gulu"
"github.com/88250/melody"
@ -145,6 +146,7 @@ func PushErrMsg(msg string, timeout int) (msgId string) {
}
func PushStatusBar(msg string) {
msg += " (" + time.Now().Format("2006-01-02 15:04:05") + ")"
BroadcastByType("main", "statusbar", 0, msg, nil)
}