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 = text;

if (escapeHTML) {   value = StringEscapeUtils.escapeHtml(value);     }

if (escapeJavaScript) {      value = StringEscapeUtils.escapeJavaScript(value);      }

if (escapeSQL) {      value = StringEscapeUtils.escapeSql(value);      }      setValue(value);     }

}

@Override

public String getAsText() {     Object value = 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…

Spring MVC 如何防止XSS、SQL注入攻击

时间: 2024-11-05 14:45:59

Spring MVC 如何防止XSS、SQL注入攻击的相关文章

XSS攻击&SQL注入攻击&CSRF攻击?

- XSS(Cross Site Script,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式.跨站脚本攻击分有两种形式:反射型攻击(诱使用户点击一个嵌入恶意脚本的链接以达到攻击的目标,目前有很多攻击者利用论坛.微博发布含有恶意脚本的URL就属于这种方式)和持久型攻击(将恶意脚本提交到被攻击网站的数据库中,用户浏览网页时,恶意脚本从数据库中被加载到页面执行,QQ邮箱的早期版本就曾经被利用作为持久型跨站脚本攻击的平台).XSS虽然不是什么新鲜玩意,但是攻击

什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?

答: - XSS(Cross Site Script,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式.跨站脚本攻击分有两种形式:反射型攻击(诱使用户点击一个嵌入恶意脚本的链接以达到攻击的目标,目前有很多攻击者利用论坛.微博发布含有恶意脚本的URL就属于这种方式)和持久型攻击(将恶意脚本提交到被攻击网站的数据库中,用户浏览网页时,恶意脚本从数据库中被加载到页面执行,QQ邮箱的早期版本就曾经被利用作为持久型跨站脚本攻击的平台).XSS虽然不是什么新鲜玩意,但

【渗透攻防Web篇】SQL注入攻击高级

前言 前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御.有攻必有防,当然还要来探讨一下SQL注入防御技巧. 目录 第五节 避开过滤方法总结 5.1.大小写变种 5.2.URL编码 5.3.SQL注释 5.4.空字节 5.5.二阶SQL注入 第六节 探讨SQL注入防御技巧 6.1.输入验证 6.2.编码输出 正文 第五节 避开过滤方法总结 Web应用为了防御包括SQL注入在内的攻击,常常使用输入过滤器,这些过滤器可以在应用的代码中,也可以

Web安全篇之SQL注入攻击

在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http://www.2cto.com/article/201310/250877.html ps:直接copy,格式有点问题~ 大家早上好!今天由我给大家带来<web安全之SQL注入篇>系列晨讲,首先对课程进行简单介绍,SQL注入篇一共分为三讲:       第一讲:"纸上谈兵:我们需要在本地架设注入环境,构造注入语句,了解注入原理.":       第二讲:"实战演练:我们要在互联网上

SQL注入攻击

转载http://blog.jobbole.com/105259/ 1.大小写变种 这种技巧适用于关键字阻塞过滤器不聪明的时候,我们可以变换关键字字符串中字符的大小写来避开过滤,因为使用不区分大小写的方式处理SQL关键字. 例如:(下面的代码就是一个简单的关键字阻塞过滤器) function waf($id1){ if(strstr($id1,'union')){ echo 'error:lllegal input'; return; } return $id1; } 这段代码的缺陷就在strs

Web安全之SQL注入攻击技巧与防范

在Web1.0时代,人们更多是关注服务器端动态脚本语言的安全问题,比如将一个可执行脚本(俗称Webshell)通过脚本语言的漏洞上传到服务器上,从而获得服务器权限.在Web发展初期,随着动态脚本语言的发展和普及,以及早期工程师对安全问题认知不足导致很多”安全血案”的发生,至今仍然遗留下许多历史问题,比如PHP语言至今仍然无法从语言本身杜绝「文件包含漏洞」(参见这里),只能依靠工程师良好的代码规范和安全意识. 伴随着Web2.0.社交网络.微博等一系列新型互联网产品的兴起,基于Web环境的互联网应

SQL注入攻击浅谈

原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统.根据相关技术原理,SQL注入可以分为平台层注入和代码层注入.前者由不安全的数据库配置或数据库平台的漏洞所致:后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询.基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理:②不安全的数据库配置:③不合理

SQL注入攻击---web安全

一.什么是sql注入呢?         所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击.如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入. 黑客通过SQL注入攻击可以拿到

django csrf,xss,sql注入

一.csrf跨站请求伪造(Cross-site request forgery) CSRF的攻击原理:简单说就是利用了高权限帐号(如管理员)的登录状态或者授权状态去做一些后台操作,但实际这些状态并没有被我们直接获取到(获取那是XSS干的事). CSRF能够攻击的根本原因是:服务器无法识别你的来源是否可靠. 防御CSRF攻击:服务端验证请求的token一致性 CSRF攻击的核心原理就是利用用户验证信息储存cookie中,发送请求,使得服务器无法判断真伪,而token之所以能够拦截,就是因为它是CS