【问题标题】:Is possible to user char[] instead of Strings in a Servlet for password storing?是否可以在 Servlet 中使用 char[] 而不是 Strings 来存储密码?
【发布时间】:2013-08-22 15:58:21
【问题描述】:

我阅读了几篇关于安全性的文章和帖子(注意 Comparing input password to stored hashed password in a web appWhy is char[] preferred over String for passwords?

由于从请求中检索参数值使用返回字符串的request.getParameter("passwordFieldName"),是否有任何选项可以从请求中检索参数作为char[]?

【问题讨论】:

标签: java security servlets passwords


【解决方案1】:

很遗憾,我不知道。

请求参数已经加载,希望在内部作为重用的 byte[] 或 char[]。但是之后?

所以也许应该重新实现一些 HTTP 服务器?不是我。

您可以在客户端将密码拆分为多个变量并对其进行加密。是不是更好?

如果您不信任您的服务器平台,最好使用 OpenID 或其他委托身份验证。

【讨论】:

    【解决方案2】:

    您可以使用String 的方法toCharArray 将其转换为char[]

    String str = request.getParameter("passwordFieldName");
    char[] pwArr = str.toCharArray();
    

    请参阅the docs 了解更多信息。

    【讨论】:

    • 您也可以使用getBytes(String charset) 将字符串作为byte[] 获取。
    • str.toCharArray() 返回一个新分配的字符数组(参见 javadoc),因此字符串密码 str 将出现在系统中的任何位置,在任何线程转储/堆分析器中,直到垃圾回收,并且这就是我试图避免的
    • 我相信密码在所有情况下都会出现,因为它会在服务器请求的内存中。无论你做什么,字符串密码都会出现在内存中的某个地方。
    • fwiw Restlet 似乎根据 tihs 页面做得更好:templth.wordpress.com/2015/01/05/…。请注意 Basic Auth 代码(那里有指向 Github 的完整代码链接)如何以 char[] 的形式获取秘密并将其写入标题中,而无需在任何地方创建临时字符串。我使用的是 Jersey,而不是 Restlet,但在寻找答案时发现了此代码
    猜你喜欢
    • 1970-01-01
    • 2022-11-12
    • 2012-11-29
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 2015-06-22
    相关资源
    最近更新 更多