SpringMVC如何有效的防止XSS注入?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC如何有效的防止XSS注入?相关的知识,希望对你有一定的参考价值。

参考技术A 在数据进入数据库之前对非法字符进行转义,在更新和显示的时候将非法字符还原
在显示的时候对非法字符进行转义
如果项目还处在起步阶段,建议使用第二种,直接使用jstl的<c:out>标签即可解决非法字符的问题。当然,对于Javascript还需要自己处理一下,写一个方法,在解析从服务器端获取的数据时执行以下escapeHTML()即可。
附:Javascript方法:
String.prototype.escapeHTML = function ()
return this.replace(/&/g, ‘&’).replace(/>/g, ‘>’).replace(/</g, ‘<’).replace(/”/g, ‘"’);
如果项目已经开发完成了,又不想大批量改动页面的话,可以采用第一种方法,此时需要借助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;@Overridepublic 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); @Overridepublic String getAsText() Object value = getValue(); return value != null ? value.toString() : “”;
在上面我们做了一个EscapeEditor,下面还要将这个Editor和Spring的Controller绑定,使服务器端接收到数据之后能够自动转移特殊字符。
下面我们在@Controller中注册@InitBinder
@InitBinder
public void initBinder(WebDataBinder binder)
这个方法可以直接放到abstract Controller类中,这样子每个Controller实例都能够拥有该方法。

StringEscapeUtils的常用使用,防止SQL注入及XSS注入

引入common-lang-2.4.jar中
一个方便做转义的工具类,主要是为了防止sql注入,xss注入攻击的功能
官方参考文档
StringEscapeUtils.unescapeHtml(sname)
1.escapeSql 提供sql转移功能,防止sql注入攻击,
例如典型的万能密码攻击’ ’ or 1=1 ’ ‘

StringBuffer sql = new StringBuffer("select key_sn,remark,create_date from tb_selogon_key where 1=1 ");
if(!CommUtil.isEmpty(keyWord)){
sql.append(" and like ‘%" + StringEscapeUtils.escapeSql(keyWord) + "%‘");
}
1
2
3
4
2.escapeHtml /unescapeHtml 转义/反转义html脚本

System.out.println(StringEscapeUtils.escapeHtml("<a>dddd</a>"));
1
输出结果为:<a>dddd</a>

System.out.println(StringEscapeUtils.unescapeHtml("&lt;a&gt;dddd&lt;/a&gt;"));
1
输出为:

<a>ddd</a>
1
3.escapeJavascript/unescapeJavascript 转义/反转义js脚本

System.out.println(StringEscapeUtils.escapeJavaScript("<script>alert(‘1111‘)</script>"));
1
输出为:<script>alert(‘111’)</script>
4.escapeJava/unescapeJava 把字符串转为unicode编码

System.out.println(StringEscapeUtils.escapeJava("中国"));
1
输出为:用escapeJava方法转义之后的字符串为:/u4E2D/u56FD/u5171/u4EA7/u515A
————————————————
版权声明:本文为CSDN博主「小狮王」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/wanghaoqian/article/details/78293631

以上是关于SpringMVC如何有效的防止XSS注入?的主要内容,如果未能解决你的问题,请参考以下文章

v-html防止XSS注入

如何防止 XSS 和 SQL 注入

如何实现php的安全最大化?怎样避免sql注入漏洞和xss跨站脚本攻击漏洞

如何防止人们在 Spring MVC 中进行 XSS?

asp.net如何防止xss(脚本注入啊)

sql注入,xss攻击,csrf(模拟请求)