当前位置: 首页 > 面试题库 >

在Java中,如何在不生成String对象的情况下从HttpServletRequest标头提取密码?

冯胤
2023-03-14
问题内容

用于处理敏感数据(==密码)的通用Java安全准则建议不要使用String对象存储数据,而应使用字节或字符数组。我正在尝试在HttpServlet处理程序中应用此准则。特别是,我使用的是类似于基本身份验证的方法,其中凭据在标头中传递(这是GET请求,因此没有正文)。

我遇到的问题是,在不生成String对象的情况下似乎无法获取标头数据,这违反了一开始的准则。我已经彻底搜索了解决方案,但是没有找到任何相关的讨论。有人对此问题有见识吗?

注意:这是通过HTTPS进行的,因此这里没有连接安全性问题。


问题答案:

简单的答案是,除了字符串以外,您不能以任何其他形式获取参数。至少,不要使用标准的servlet API。但是有一些可能的“滚滚”。

  1. 如果您准备好变得丑陋,则实际上可以破坏String对象的抽象,然后进入并覆盖字符。(实际上,如果您准备违反规则,则字符串是可变的。这是可以证明其合理性的少数情况之一。)

  2. HttpServletRequest为此,您的Web容器的实现中可能存在非标准的API扩展(例如)。如果没有,您也许可以掌握源代码并添加一个。(假设您使用的是开放源Web容器。)

话虽这么说,IMO对Java安全性的“无条件限制”方法被误导了,或者至少在实现目标方面被高估了。

“无字符串”方法可以防止某些事情可能在您的应用程序的地址空间中蔓延,定位看起来像字符串的事物并找出可能的密码。从理论上讲,这可以通过以下方式完成:

  • 破坏JVM执行模型并查看原始内存的黑客,
  • 附加Java调试器并拖曳可访问对象,
  • 使用“ / dev / mem”或类似的东西从外部读取进程内存,
  • 访问硬盘上的程序交换映像的剩余部分,或者
  • 以某种方式使它成为核心转储并读取转储。

但是,除了第一个条件外,所有其他条件都要求坏人已经破坏了系统的安全性。而且,如果坏人这样做了,还有其他(可能更简单)的方法可以从程序中窃取密码……“无字符串”方法无法阻止。

而且,如果您担心利用Java安全漏洞读取原始内存的黑客攻击,则该漏洞可能会以其他方式使用;例如,注入代码以更改代码处理密码的方式。

因此,总而言之,“没有条件”可以防止真正困难的黑客攻击,也可以防止 已经 破坏了安全性的情况。海事组织,不值得付出努力……除非 要求
您实施军事级安全。



 类似资料:
  • 问题出现在Kafka的配置需要序列化程序。不起作用,JsonSerializer也不起作用,而字符串序列化程序将所有转义为,这使得使用这些消息非常麻烦。 如何生成这些JSON对象?是否有一个简单的Kafka序列化程序配置?

  • 问题内容: 我想向服务器发送命令,并确定是否得到响应。 现在,我正在使用的函数,该函数会阻塞直到服务器发出响应,但我要做的就是首先确认服务器是否响应。 我尝试使用或避免此阻止,但这无济于事。 这导致我的程序陷入等待服务器响应的困境,这种情况永远不会发生。根据我对事物的理解,似乎做同样的事情。 我在此处找到的关于该主题的其他问题没有回答我的问题,所以请您回答我的问题会很好。 问题答案: 可能您所需要

  • 我有一个私钥(ecdsa,secp256r1)。 如何在没有充气城堡的情况下从Java中制作公钥?

  • 假设我有这个方法: 我想调用这个方法,获取字符串,将该字符串转换为整数7,然后以非阻塞方式返回该整数。我该怎么做? 我试过这个,但是函数阻塞(同步): 我尝试使用代替(异步): 但是我得到了这个错误:<代码>类型不匹配:无法从int转换为Mono 那我该怎么办?

  • 我试图在不生成代码的情况下使用JOOQ。我有一个像这样的刀类 一个像这样的Pojo类 当我尝试使用这样的主方法从表中读取时 我可以看到SQL查询运行良好,列出了所有匹配的行,但pojo返回的是null值。我做错了什么?谁能给我指一下正确的方向吗?我真的很感激任何帮助。

  • 问题内容: 我想知道在不提示输入密码的情况下执行数据库mysqldump的命令。 原因:我想运行一个cron作业,该作业每天执行一次mysqldump数据库的转储。因此,出现提示时,我将无法插入密码。 我该如何解决? 问题答案: 由于您正在使用Ubuntu,因此您所要做的只是在主目录中添加一个文件,这将禁用mysqldump密码提示。这是通过创建文件来完成的(权限需要为600)。 将此添加到.my