- 浏览: 236750 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
wahahachuang8:
GoEasy 实时推送支持IE6-IE11及大多数主流浏览器的 ...
服务器推送技术 java -
mahuanjian:
[flash=200,200][/flash]
服务器推送技术 java -
wenjundiandian:
下面有网页编辑器的话还是会被隐藏.
ext中消息框、提示框、确认框显示在最前面的解决方法 -
天塔上的猫:
/**
* JAVA常见的权限控制算法的实现
*
* ...
JAVA常见的权限控制算法的实现
定义包装器对request进行包装,修改其内的getParameter方法,
使getParameter方法具有防SQL注入的功能
一、定义一个防SQL注入的类,目的在于转换一些特殊符号
public class SQLSafe{
public static String tran(String words){
if(words!=null){
if(words.indexOf("%0d%0a")>=0)
{
words = words.replace("%0d%0a", "");
}
StringBuffer stringbuffer = new StringBuffer();
int j = words.length();
for(int i = 0; i < j; i++)
{
char c = words.charAt(i);
switch(c)
{
case 60: stringbuffer.append("<"); break;
case 62: stringbuffer.append(">"); break;
case 39: stringbuffer.append("'");break;
case 34: stringbuffer.append("""); break;
case 169: stringbuffer.append("©"); break;
case 174: stringbuffer.append("®"); break;
case 165: stringbuffer.append("¥"); break;
case 8364: stringbuffer.append("€"); break;
case 8482: stringbuffer.append("™"); break;
case 13:
if(i < j - 1 && words.charAt(i + 1) == 10)
{stringbuffer.append("<br>");
i++;
}
break;
case 32:
if(i < j - 1 && words.charAt(i + 1) == ' ')
{
stringbuffer.append(" ");
i++;
break;
}
default:
stringbuffer.append(c);
break;
}
}
return new String(stringbuffer.toString());
}else{
return words;
}
}
public static String unTran(String words){
String result = "";
String strTo ="'";
int intFromLen = strTo.length();
int intPos = 0;
if(words==null||"".equals(words)){
return words;
}
while((intPos=words.indexOf("'"))!=-1){
result = result + words.substring(0,intPos);
result = result + strTo;
words = words.substring(intPos+intFromLen);
}
result = result + words;
return result;
}
public static boolean checkSql(String words,String[] sqls){
if(words==null||"".equalsIgnoreCase(words.trim()))
return false;
words = words.toLowerCase();
for(String s:sqls){
if(words.indexOf(s)!=-1&&s.length()==1&&s.indexOf("'")==-1)
return true;
if(words.indexOf(" "+s+" ")!=-1&&s.length()>1&&s.indexOf("'")==-1)
return true;
}
return false;
}
}
二、定义一个包装器类
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map params;
public ParameterRequestWrapper(HttpServletRequest request) {
super(request);
this.params=request.getParameterMap();;
}
public Map getParameterMap() {
return params;
}
public Enumeration getParameterNames() {
Vector l=new Vector(params.keySet());
return l.elements();
}
public String[] getParameterValues(String name) {
Object v = params.get(name);
if(v==null){
return null;
}else if(v instanceof String[]){
return (String[]) v;
}else if(v instanceof String){
return new String[]{(String) v};
}else{
return new String[]{v.toString()};
}
}
public String getParameter(String name) {
Object v = params.get(name);
if(v==null){
return null;
}else if(v instanceof String[]){
String []strArr=(String[]) v;
if(strArr.length>0){
return SQLSafe.tran(strArr[0]); //对经过getParameter的返回值进行防SQL注入
}else{
return null;
}
}else if(v instanceof String){
return SQLSafe.tran((String) v);
}else{
return v.toString();
}
}
}
第三、通过过滤器对request进行包装
ParameterRequestWrapper prw = new ParameterRequestWrapper((HttpServletRequest)request);//定义包装器对request进行包装
FChain.doFilter(prw, response);
这样就实现了对所有的request.getParameter()进行包装,令通过其传入的参数都经过SQLSafe的转码。达到防止直接在页面编辑区输入SQL代码而造成的SQL注入。
发表评论
-
利用 Heritrix 构建特定站点爬虫
2011-01-12 13:42 897Heritrix 是一个由 java 开 ... -
java解析xml文件四种方式
2011-01-10 16:23 7761.介绍 1)DOM(JAXP Crims ... -
Spring AOP的两种实现方式
2010-12-10 09:16 912来源:http://javacrazyer.iteye.com ... -
详解Java解析XML的四种方法
2010-12-09 22:31 853来源:http://mengsina.iteye.co ... -
(转载)手写压缩软件,超详细解释(哈夫曼实现)
2010-12-07 11:17 1100转载自:http://stchou.iteye.com/b ... -
comparable 与comparator的区别
2010-01-29 09:12 957Comparable & Comparator 都是用 ... -
Java经典问题算法大全
2010-01-28 20:52 3043/*【程序1】题目:古典 ... -
Java各种排序算法
2010-01-28 20:50 930/*** 排序测试类* * 排序算法的分类如下:* 1.插入排 ... -
Java细节总结
2010-01-28 20:46 709TURE、FALSE、NULL等都不是Java关键字; 数组 ... -
设计异常管理系统
2010-01-28 20:37 852——针对有效的错误处理设计异常管理系统 作者:Jean-Pie ... -
使用Filter快速对网页资源进行缓存
2010-01-28 20:18 900使用Filter快速对网页资源进行缓存,在网页资源没有改变的情 ... -
详解ThreadLocal与synchronized
2010-01-28 20:14 802Java良好的支持多线程。使用java,我们可以很轻松的编程一 ... -
在有多个选择路径的情况下,利用Switch可以使程序更加简洁有效。但由于其只能对整数选择因子进行判断,所以限制了其在其他类型尤其是String的使用,本文利用J
2010-01-28 20:04 889在有多个选择路径的情况下,利用Switch可以使程序更加简洁有 ... -
java优化编程37条
2010-01-28 20:00 7161.JVM管理两种类型的内 ... -
服务器推送技术 java
2009-12-28 12:11 6293下面介绍在ARP之上的一个非常热门的技术实现:服务器推送技术。 ... -
java排序集锦
2009-12-16 09:29 856Java代码 package sort; ... -
3DES加密解密调用示例
2009-12-15 10:02 996在java中调用sun公司提供的3DES加密解密算法时,需要使 ... -
java货币 Locale Currency NumberFormat
2009-12-04 18:14 2390使用java currency配合Locale,NumberF ... -
Deque 作为堆栈使用(ArrayDeque)
2009-12-04 18:09 2816package code.jdk; imp ... -
Random类
2009-12-04 14:00 1047Random类 (java.util) ...
相关推荐
在Java Web开发中,SQL注入是一种常见的安全威胁,它允许攻击者通过恶意构造的SQL语句来操控数据库。为了防止这种攻击,开发者通常会使用过滤器(Filter)来对用户输入进行预处理,确保输入的数据不会对系统造成危害...
3. 限制数据库权限:为应用分配最小必要的数据库访问权限,避免攻击者通过SQL注入获取额外敏感信息。 4. 使用ORM框架:如Hibernate或MyBatis等,它们在底层处理SQL语句时通常会提供一定的防护措施。 在`web中添加...
通过使用自定义的Filter来防止SQL注入和XSS攻击是一种常见且有效的安全措施。本文介绍了如何实现一个简单的XssFilter,并详细解释了其工作原理。在实际项目中,开发者还可以根据具体的业务需求进一步完善过滤逻辑,...
3. SQL执行:封装`Statement`或`PreparedStatement`的创建和执行,支持参数化查询,避免SQL注入风险。 4. 结果集处理:提供方便的方法来获取和处理查询结果,例如`queryForObject()`、`queryForList()`等。 5. 错误...
在Spring MVC中防止XSS攻击的基本方法之一是通过实现过滤器来包装HttpServletRequest对象。具体地,需要创建一个包装类XssHttpServletRequestWrapper,用于覆盖HttpServletRequest的方法,对所有进入的请求数据进行...
同时,遵循最佳实践,如使用预编译的`PreparedStatement`防止SQL注入,以及正确处理异常和关闭资源,以确保代码的健壮性和安全性。 综上所述,"SqlServer数据库连接jar包"提供了连接到SQL Server数据库所需的JDBC...
2. **安全性**:通过参数化查询(PreparedStatement)防止SQL注入攻击。在封装的SQL方法中,我们可以使用占位符(问号)来代替直接拼接字符串,避免了恶意用户输入可能导致的SQL语句执行风险。 3. **复用性**:封装...
3. 防止SQL注入:SQL注入是一种常见的安全漏洞,通过使用`PreparedStatement`而非`Statement`,可以预编译SQL语句,有效防止恶意输入导致的注入攻击。`PreparedStatement`允许将参数占位符与实际值分开,从而增强...
为了防止SQL注入,可以采取预编译语句并使用参数化的方式。这是因为预编译语句可以将SQL语句的结构提前解析,仅将参数作为变量传递给SQL语句,从而避免了恶意数据的执行。 字符串操作也是面试常考的内容,包括字符...
在XML描述文件中,SQL Maps定义了Java Bean、Map实现以及基本数据类型的包装类如何与数据库中的表和记录对应。这些映射文件通常包含SQL查询、存储过程以及事务管理等元素,使得开发者无需编写大量JDBC代码就能完成...
【Java两年工作经验简历】 在Java开发领域,两年的工作经验意味着开发者已经从新手阶段逐渐过渡到熟练工阶段。在这段时间里,他们通常会掌握以下几个关键的知识点: 1. **基础语法与核心概念**:掌握Java的基础...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据着重要地位。...56. **JDBC中的P**:可能是指PreparedStatement,预编译的SQL语句,能防止SQL注入,提高性能。 这只是部分Java面试中涉及
Statement用于执行静态SQL语句,而PreparedStatement则允许预编译SQL语句,更适用于处理包含参数的查询,能提高性能并防止SQL注入攻击。ResultSet对象则是执行查询后返回的结果集,可以遍历其中的数据行。 在Java...
2. 容器支持:通过Spring框架,可以实现依赖注入,便于组件间的解耦和管理,提高系统的灵活性。 3. 异步处理:使用JAVA的并发工具类和ExecutorService,能处理大量并发请求,提升系统性能。 4. Web开发:结合Servlet...
- **选项 C 正确:**使用 `#` 而不是 `$` 来处理动态参数,特别是在 `ORDER BY` 子句中,以防止 SQL 注入。 - **选项 D 错误:**MyBatis 中 `<where>` 标签通常配合 `#` 使用。 **结论:** 正确选项为 C: MyBatis...
在实际部署聊天程序时,需要考虑安全性,如使用SSL/TLS加密通信、防止SQL注入等。此外,优化也是必要的,比如使用高效的缓存策略,减少不必要的网络传输,以及优化多线程处理等。 总结,这个Java聊天程序项目是一个...
**Hibernate** 是一个对象关系映射(ORM)框架,它简化了数据库操作,通过将Java对象与数据库表之间的映射关系自动化,使得开发人员可以更加专注于业务逻辑,而不是底层的SQL查询。Hibernate支持事务处理、缓存机制...
安全方面,手册列举了一些常见的安全风险,如SQL注入、XSS攻击,并给出了预防措施。 总的来说,《阿里Java开发手册》是一份全面而细致的Java编程指南,它将帮助开发者编写更健壮、更高效的代码,提升团队协作效率,...
例如,限制字符串长度,检查数字范围,防止SQL注入等。 - **使用HTTPS**:加密传输数据,防止中间人攻击,保护请求参数不被篡改。 - **使用CSRF Token**:防止跨站请求伪造,每个表单提交都携带一个随机生成的安全...
1. **java.lang**:这是每个Java程序的基础,包含基本类型包装类、字符串类(String)以及运行时异常。 2. **java.io**:提供输入输出流,用于读写文件、网络通信等。 3. **java.util**:包括集合框架(ArrayList、...