我有一个网络应用程序建立在JSF与MySQL作为DB。我已经实现了在我的应用程序中防止CSRF的代码。
现在,由于我的底层框架是JSF,我想我不必处理XSS攻击,因为它已经由UIComponent
处理了。我没有在任何视图页面中使用任何JavaScript。即使我使用了,我真的需要实现代码来防止XSS攻击吗?
对于DB,我们在所有的DB交互中都使用准备好的语句和存储过程。
为了防止这三种常见的攻击,还有什么需要处理的吗?我已经浏览过OWASP网站和他们的cheat sheets了。
我需要注意任何其他潜在的攻击载体吗?
发布于 2019-09-27 16:42:03
当使用带有未转义的值的<h:outputText escape="false">
(例如,来自html文本编辑器)时,您可能会受到讨厌的XSS攻击。在这种情况下,我使用的是JSF转换器,它使用Jsoup从文本中删除javascript,保持HTML不变。Converter也可以用来清理用户输入。你可以这样使用它:
<h:outputText value="{bean.value}" escape="false" converter="htmlSanitizingConverter"/>
和转换器本身:
/**
* Prevents from XSS attack if output text is not escaped.
*/
@FacesConverter("htmlSanitizingConverter")
public class HtmlSanitizingConverter implements Converter {
private static final Whitelist JSOUP_WHITELIST = Whitelist.relaxed()
.preserveRelativeLinks(true)
.addAttributes(":all","style");
/*
Optionally - add support for hyperlinks and base64 encoded images.
.addTags("img")
.addAttributes("img", "height", "src", "width")
.addAttributes("a", "href")
.addProtocols("img", "src", "http", "https", "data");
*/
@Override
public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
return (submittedValue != null) ? Jsoup.clean(submittedValue, JSOUP_WHITELIST) : null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
return (value != null) ? Jsoup.clean(value.toString(), JSOUP_WHITELIST) : "";
}
}
注意:当您在PrimeFaces中使用JSF时,要注意<p:textEditor>
- older versions (6.2之前的版本)在默认情况下不会清理用户输入。
https://stackoverflow.com/questions/7722159
复制相似问题