gpt4 book ai didi

security - Security: is there a way to use a straight reference to char[] instead of a String?

转载 作者:行者123 更新时间:2023-12-02 21:55:29 26 4
gpt4 key购买 nike

序言:这可能是一个巨大的菜鸟错误,我团队中的所有开发人员都对 Java 101 有点模糊,所以如果我们不担心任何事情,请告诉我。 [具体担心在 permgen 中缓存的字符串文字]

我们有一个简单的登录页面,基本上如下所示://支持 Bean“LoginBean”

  String username;
String password;
//getter/setter pairs

//JSF

  <h:form id="login">
<h:inputText value="#{loginBean.username} />
<h:inputSecret value="#{loginBean.password} />
<h:commandButton actionListener="#{loginBean.login} />
</h:form>

我担心的是,传递的字符串文字可能会被缓存并打开潜在的安全漏洞。有没有办法进行设置,以便我们完全绕过字符串文字?如果这是一个 Swing 应用程序,我将使用明确具有“char[] getPassword();”的 JPasswordField

或者在我想要的代码中:

String username;
char[] password;

感谢您的帮助,如果是重复帖子,请随时打我,我似乎找不到它,但这似乎是一个核心问题。

最佳答案

My concern here is that a string literal being passed could be cached and opens potential security holes.

您的担忧仅部分有效。字符串文字实际上是作为 Java 类文件中的文字出现的。用户提供的密码不是字符串;相反,它是一个 String 对象,除非您调用 String.intern(),否则它不会被放置在永久代中。

现在假设您没有犯下调用String.intern()的愚蠢行为,那么您对内存中密码的其他担忧应该得到解决。这已经是next to impossible in Java (由于垃圾收集器执行对象的复制),并且 JSF 生命周期使其不可能(通过要求为输入值构造 String 对象)。以下代码是我编写的,允许托管 bean 通过将字符串转换为 char[] 数组(反之亦然)来将密码存储为字符数组,但如果您已经意识到,它仅用于合规性检查String 对象可能会在内存中停留一段时间:

@FacesConverter("Char[]Converter")
public class CharArrayConverter implements Converter
{

@Override
public Object getAsObject(FacesContext context, UIComponent component, String newValue)
{
if(newValue == null)
{
return newValue;
}
return newValue.toCharArray();
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value)
{
if(value == null)
{
return null;
}
char[] inputValue;
try
{
inputValue = (char[]) value;
}
catch(ClassCastException ccex)
{
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Object was not present in the desired format", null);
throw new ConverterException(message);
}
return new String(inputValue);
}

}

转换器在 Facelet 中的用途如下:

...
<p>
<h:outputLabel for="password" value="#{msg['Signup.password.label']}" />
<h:inputSecret id="password" value="#{userManager.signupRequest.password}" converter="Char[]Converter" />
</p>
...

关于security - <h :inputSecret/> Security: is there a way to use a straight reference to char[] instead of a String?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6947689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com