- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
序言:这可能是一个巨大的菜鸟错误,我团队中的所有开发人员都对 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/
我是一名优秀的程序员,十分优秀!