swift - 使用内存位置的哈希作为标识符是否安全?
问题描述
我根据它们的内存位置为类的某些对象生成一个哈希(在这种情况下,是来自 vapor swift 的 websocket 对象)。
Unmanaged.passUnretained(webSocket).toOpaque().hashValue
或者:
ObjectIdentifier(webSocket).hashValue
https://stackoverflow.com/a/41666807/10551293(关于如何获取对象的内存位置的答案)
我想我会用这个作为标识符(最终用户可以查看这个)。这是否打开了攻击的可能性?
解决方案
Swift 专门为此目的提供了一个工具:ObjectIdentifier()
.
它的散列包括一个每次启动的随机种子,专门用于挫败基于散列的攻击。即使攻击者对哈希进行暴力破解(这本身就是一个重要但可能并非不可能的问题),它也不会揭示内存中的实际位置。这应该是一个安全的标识符。
但一定要使用ObjectIdentifier
. 如果将来发现攻击,那就是可以缓解的 API。
推荐阅读
- kubernetes - 查找应用于 Kubernetes 集群的命令历史记录
- c - 如何在C中返回布尔值?
- laravel - Gitlab ci错误:bash:composer:找不到命令
- arrays - 使用数组进行二进制十进制转换
- python - 如何将字符串拆分为列表中的不同部分?
- sql - 带有 PARTITION 的 COUNT() 生成不一致的结果
- flutter - 为什么 setState 在 Navigator.push 之后起作用?
- r - 在 pdf rmarkdown xelatex 中使用 kableextra 更改 Kable 中的单元格字体颜色
- python - 在 os.system 中传递多个参数
- tcl - 期望 -re 不会在 eof 上失败