快速业务通道

Spring的优秀工具类盘点,第2部分: 特殊字符转义和方法入参检测工具类 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-04
t 程序进行破坏的。假设我们有一个 JavaScript 数组变量,其元素值通过一个 Java List 对象提供,下面是完成这一操作的 JSP 代码片断:

清单 3. jsTest.jsp:未对 JavaScript 特殊字符进行处理

<%@ page language="java" contentType="text/html; charset=utf-8"%> <jsp:directive.page import="java.util.*"/> <%  List textList = new ArrayList();  textList.add("\";alert();j=\""); %> <script>  var txtList = new Array();   <% for ( int i = 0 ; i < textList.size() ; i++) { %>    txtList[<%=i%>] = "<%=textList.get(i)%>";    ① 未对可能包含特殊 JavaScript 字符的变量进行处理   <% } %> </script>

当客户端调用这个 JSP 页面后,将得到以下的 HTML 输出页面:

<script>  var txtList = new Array();   txtList[0] = "";alert();j=""; ① 本来是希望接受一个字符串,结果被植入了一段JavaScript代码 </script>

Spring的优秀工具类盘点,第2部分: 特殊字符转义和方法入参检测工具类(4)

时间:2011-02-06 IBM 陈雄华

由于包含 JavaScript 特殊字符的 Java 变量直接合并到 JavaScript 代码中,我们本来期望 ① 处所示部分是一个普通的字符串,但结果变成了一段 JavaScript 代码,网页将弹出一个 alert 窗口。想像一下如果粗体部分的字符串是“";while(true)alert();j="”时会产生什么后果呢?

因此,如果网页中的 JavaScript 代码需要通过拼接 Java 变量动态产生时,一般需要对变量的内容进行转义处理,可以通过 Spring 的 JavaScriptUtils 完成这件工作。下面,我们使用 JavaScriptUtils 对以上代码进行改造:

<%@ page language="java" contentType="text/html; charset=utf-8"%> <jsp:directive.page import="java.util.*"/> <jsp:directive.page import="org.springframework.web.util.JavaScriptUtils"/> <%  List textList = new ArrayList();  textList.add("\";alert();j=\""); %> <script>   var txtList = new Array();   <% for ( int i = 0 ; i < textList.size() ; i++) { %>   ① 在输出动态内容前事先进行转义处理   txtList[<%=i%>] = "<%=JavaScriptUtils.javaScriptEscape(""+textList.get(i))%>";   <% } %> </script>

通过转义处理后,这个 JSP 页面输出的结果网页的 JavaScript 代码就不会产生问题了:

<script>   var txtList = new Array();   txtList[0] = "\";alert();j=\"";   ① 粗体部分仅是一个普通的字符串,而非一段 JavaScript 的语句了 </script>

SQL特殊字符转义

应该说,您即使没有处理 HTML 或 JavaScript 的特殊字符,也不会带来灾难性的后果,但是如果不在动态构造 SQL 语句时对变量中特殊字符进行处理,将可能导致程序漏洞、数据盗取、数据破坏等严重的安全问题。网络中有大量讲解 SQL 注入的文章,感兴趣的读者可以搜索相关的资料深入研究。

虽然 SQL 注入的后果很严重,但是只要对动态构造的 SQL 语句的变量进行特殊字符转义处理,就可以避免这一问题的发生了。来看一个存在安全漏洞的经典例子:

SELECT COUNT(userId) FROM t_user WHERE userName=''"+userName+"'' AND password =''"+password+"'';

以上 SQL 语句根据返回的结果数判断用户

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号