spring mvc 过滤跨站的一个方法
XSS 是我们在工作中经常遇到的东西。让每个开发者都注意到这块的东西很不容易。很多开发者都不知道 什么是 XSS;
对于这块的防护。我们一般都是用一个全局过滤器来处理 request 信息,挨个遍历替换处理危险内容。然后再保存到数据库。
这样的实现网上有很多例子。
下面我这针对spring mvc 过滤xss分享的一个小方法。。
方法出处 stackoverflow
在我们使用springmvc的时候,我们可以自定义一个 property editor 通过这个编辑器,我们可以过滤接收到字符串的危险信息。将这个editor 放到 BaseController 然后需要过滤的Controller 直接继承这个 BaseController 就ok;
这是我们的 editor 代码:
@Override
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
super.initBinder(request, binder);
binder.registerCustomEditor(String.class,
new StringEscapeEditor(true, true, false));
}
然后是 StringEscapeEditor 的实现
public class StringEscapeEditor extends PropertyEditorSupport {
private boolean escapeHTML;
private boolean escapeJavaScript;
private boolean escapeSQL;
public StringEscapeEditor() {
super();
}
public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript,
boolean escapeSQL) {
super();
this.escapeHTML = escapeHTML;
this.escapeJavaScript = escapeJavaScript;
this.escapeSQL = escapeSQL;
}
public void setAsText(String text) {
if (text == null) {
setValue(null);
} else {
String value = text;
if (escapeHTML) {
value = StringEscapeUtils.escapeHtml(value);
}
if (escapeJavaScript) {
value = StringEscapeUtils.escapeJavaScript(value);
}
if (escapeSQL) {
value = StringEscapeUtils.escapeSql(value);
}
setValue(value);
}
}
public String getAsText() {
Object value = getValue();
return (value != null ? value.toString() : "");
}
}
这样就可以过滤掉非法字符串了。