- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序使用 Google Protocol Buffer 在客户端和服务器实例之间发送敏感数据。网络链接使用 SSL 加密,因此我不担心网络上的窃听者。由于内存问题解释,我担心敏感数据实际加载到 protobuf 中 in this SO question .
例如:
Login login = Login.newBuilder().setPassword(password)// problem
.build();
由于 Protocol Buffer 是不可变的,是否没有办法安全地执行此操作?
最佳答案
Protobuf 不提供任何使用 char[]
代替 String
的选项。相反,Protobuf 消息被有意设计为完全不可变,这提供了一种不同的安全性:您可以在程序的多个沙箱组件之间共享单个消息实例,而不必担心一个组件可能会修改数据以干扰另一个组件.
在我个人看来,作为一名安全工程师(尽管其他人可能会不同意),您链接到的 SO 问题中描述的“安全”是安全剧场,实际上并不值得追求,原因有很多:
如果攻击者可以读取您进程的内存,那么您就已经失败了。即使您在丢弃 secret 之前覆盖了它的内存,如果攻击者在正确的时间读取您的内存,他们也会找到密码。但是,更糟糕的是,如果攻击者能够读取您进程的内存,他们可能会做比提取临时密码更糟糕的事情:他们可能会提取长期存在的 secret (例如您服务器的 TLS 私钥) 、覆盖部分内存以更改应用程序的行为、访问应用程序有权访问的任何和所有资源等。这根本不是一个可以通过在使用后将某些字段归零来有效解决的问题。
<实际上,您的 secret 可能被复制的方式有太多,而您无法控制这些方式,从而使整个练习毫无意义:
ByteBuffer
。InputStream
可能会进行内部缓冲,并且之后可能不会将其缓冲区清零。因此,在我看来,专门在 Java 中使用可变对象来以这种方式覆盖 secret 并不是一个有用的策略。这些威胁需要在其他地方解决。
关于java - 将敏感信息加载到 Protocol Buffer 的最安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38317319/
我这里有一些(遗留)代码,似乎在LD_LIBRARY_PATH上调用setenv(其值在编译时未知,实际上它将从命令中获取)行),现在我必须将其移植到 Windows。我怀疑 setenv 只是出于历
我在 SSIS 包上有一个敏感字符串参数,用于存储远程服务器的密码。 但是,当字符串值包含花括号时,作业代理会在配置该步骤的包参数时抛出错误: Microsoft SQL Server Managem
我们都非常了解 strictfp 的工作原理。 像这样: package com.hk.basicjava.tests.strictfp; import java.util.*; public cla
我正在对我的博客进行简单搜索。我使用亚美尼亚语,当我搜索时,这些字母总是很敏感。这是我的代码的一部分。提前谢谢你。 search_query = get.get('search') query_lis
我正在对我的博客进行简单搜索。我使用亚美尼亚语,当我搜索时,这些字母总是很敏感。这是我的代码的一部分。提前谢谢你。 search_query = get.get('search') query_lis
想象一下这个非常基本的可拖放设置: #dropArea 是可放置的。 #itemBox > .item 是可拖动对象。 由于某种原因,droppable
我有这样的网址: http://quickstart.local/public/category1/product2 并且在 url (category1/product2) 数字是 id ,从数据库
我是一名优秀的程序员,十分优秀!