Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何处理Go中的敏感数据?_String_Security_Go_Garbage Collection - Fatal编程技术网

String 如何处理Go中的敏感数据?

String 如何处理Go中的敏感数据?,string,security,go,garbage-collection,String,Security,Go,Garbage Collection,对不起,如果以前有人问过这个问题 背景: 我目前正在Go中开发一个API,该API生成访问令牌,用于公开我们公司目前在内部使用的一些API。考虑一下您用于Stripe或Github的令牌。我正在做这样的东西:)。我生成一个令牌,将其散列,然后将其持久化 问题: 据我所知,Go中的字符串是不可变的。我曾经是一名Java工程师。Java中的字符串也是不可变的,并且存在于称为字符串常量池的东西中。无论如何,在Java中,在垃圾收集器运行之前,字符串一直存在于堆中。因此,与其使用字符串,不如使用字符数组

对不起,如果以前有人问过这个问题

背景: 我目前正在Go中开发一个API,该API生成访问令牌,用于公开我们公司目前在内部使用的一些API。考虑一下您用于Stripe或Github的令牌。我正在做这样的东西:)。我生成一个令牌,将其散列,然后将其持久化

问题: 据我所知,Go中的字符串是不可变的。我曾经是一名Java工程师。Java中的字符串也是不可变的,并且存在于称为字符串常量池的东西中。无论如何,在Java中,在垃圾收集器运行之前,字符串一直存在于堆中。因此,与其使用字符串,不如使用字符数组作为密码或API令牌

这在Go中是如何工作的?在垃圾回收之前,表示API令牌的字符串在堆上是否有效?有人能劫持我的垃圾堆并抢走代币吗?我应该用别的东西而不是字符串吗?也许要一块符文片?我可以强制垃圾收集我的不可变字符串吗


谢谢!:-)

根据对我的问题发表的评论,我最终使用了一个
[]字节来处理我的敏感数据。使用完阵列后,我会清除它


我担心的是,当字符串对象仍在堆上时,可能会使用侧通道攻击来访问它们。

Go标准库使用
[]字节作为键。我可能很幼稚,但是,如何从用go或Java编写的应用程序中劫持堆内存呢?@kingkupps您希望尽可能短地保存敏感数据。查看有关敏感数据的oracle官方文档:任何敏感数据,即使是垃圾收集的,都将保留在内存中,直到被覆盖。有人无法劫持您的堆,但侧通道攻击可能会泄露内存内容,或者页面可能会被调出。如果您担心这些问题,请使用[]字节并在完成后覆盖它。有一个go库可以将页面锁定在内存中,这样它们就不会被调出,您可能还需要搜索这些页面。@kingkupps,不,读取内存不需要破坏主机。你记得吗?RCE是足够的,在虚拟化环境中,您还必须考虑恶意邻居。“我不知道如何利用它,因此我不必担心它”不是一个好的态度。