首页 > 代码库 > Spring MVC 如何防止XSS、SQL注入攻击
Spring MVC 如何防止XSS、SQL注入攻击
在Web项目中,关键词挖掘通常需求处置XSS,SQL写入进犯,处置这个疑问有两个号码大全思路:
在数据进入数据库之前对不合法字符进行转义,在更新和显现的时分将不合法字符复原
在显现的时分对不合法字符进行转义
假如项目还处在起步期间,主张运用第二种,直接运用jstl的标签即可处置不合法字符的疑问。当然,对于Javascript还需求自个处置一下,写一个办法,在解析从服务器端获取的数据时履行以下escapeHTML()即可。
附:Javascript办法:
String.prototype.escapeHTML = function () {
return this.replace(/&/g, ‘&’).replace(/>/g, ‘>’).replace(/ }
假如项目现已开发完结了,又不想大批量改动页面的话,能够选用榜首种办法,此时需求凭借Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils
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;
}
@Override
public void setAsText(String text) {
if (text == null) {
setValue(null);
} else {
String value = http://www.mamicode.com/text;
if (escapeHTML) { value = http://www.mamicode.com/StringEscapeUtils.escapeHtml(value); }
if (escapeJavaScript) { value = http://www.mamicode.com/StringEscapeUtils.escapeJavaScript(value); }
if (escapeSQL) { value = http://www.mamicode.com/StringEscapeUtils.escapeSql(value); } setValue(value); }
}
@Override
public String getAsText() { Object value = http://www.mamicode.com/getValue(); return value != null ? value.toString() : “”; }
}
在运用StringEscapeUtils时需求注意escapeHtml和escapeJavascript办法会把中文字符转换成Unicode编码,假如经过标签或许EL表达式展现时,能够正确复原,可是假如运用类似于Ext这样的前端组件来展现这部分内容时,不能正常复原,这也是我为何抛弃了榜首种办法,直接运用第二种办法的缘由。
在上面咱们做了一个EscapeEditor,下面还要将这个Editor和Spring的Controller绑定,使服务器端接收到数据之后能够主动搬运特别字符。
下面咱们在@Controller中注册@InitBinder
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringEscapeEditor(false, false, false));
- indexRead arguments from command-line "http://www.shoudashou.com"
- indexRead arguments from command-line "http://www.4lunwen.cn"
- indexRead arguments from command-line "http://www.zx1234.cn"
- indexRead arguments from command-line "http://www.penbar.cn"
- indexRead arguments from command-line "http://www.whathappy.cn"
- indexRead arguments from command-line "http://www.lunjin.net"
- indexRead arguments from command-line "http://www.ssstyle.cn"
- indexRead arguments from command-line "http://www.91fish.cn"
- indexRead arguments from command-line "http://www.fanselang.com"
}
这个办法能够直接放到abstract Controller类中,这姿态每个Controller实例都能够具有该办法。至此第二种办法完结,可是在复原的办法暂时还没有。O(∩_∩)O…