- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
decl_storage!
是一个“过程宏”,用于存储数据以使其在后续 block 中可用。
它说如果用户能够在 double_map
中设置第一个 key 对,那么我们就不能信任那个 key 对,所以我们必须使用加密哈希例如 blake2_256
以防止“所有存储项目的其他值被泄露”。
然后它继续说,如果用户能够在 double_map
中设置第二个 key 对,那么我们就不能信任那个 key 对,所以我们必须使用诸如 blake2_256
之类的加密哈希器来防止“存储中具有相同第一 key 的其他项目遭到破坏”。
关于第一对 key ,为什么说只是为了防止“所有存储项的其他值被泄露”? blake2_256
不是也用于防止第一个 key 对本身 被泄露(而不仅仅是“其他值”)吗?
最佳答案
假设 module1.someValue
的哈希值是 0x12345678
module2.doubleMapValue.firstKey(value1)
的哈希是 0x1234
module2.doubleMapValue.secondKey(value2)
的哈希是 0x5678
这意味着 module2.doubleMapValue.fullKey(value1, value2)
和 module1.someValue
具有相同的哈希值。即值存储在同一个地方。
如果用户能够控制 module2.doubleMapValue
的两个键并计算出 value1
和 value2
的值,那么他们将能够覆盖 module1.someValue
的值并导致安全问题。
这就是为什么如果值由用户控制,则 double map 的 key1 的散列函数需要是密码散列器。否则,用户可能能够制作 value1
,使其与所有其他模块的存储发生冲突,从而危及它们。
如果用户不控制 key2,double map 提供了清除所有带有 hash(key1) 前缀功能的键,也可能被劫持造成麻烦。
关于hash - 为什么 `blake2_256` 在使用 decl_storage 时不能防止 StorageDoubleMap 中的 "first key pair"被破坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56237091/
decl_storage!是一个“过程宏”,用于存储数据以使其在后续 block 中可用。 它说如果用户能够在 double_map 中设置第一个 key 对,那么我们就不能信任那个 key 对,所以
我是一名优秀的程序员,十分优秀!