`
haisny
  • 浏览: 1399 次
社区版块
存档分类
最新评论

系统软件防止SQL注入的过滤器

阅读更多
首先在系统了写个过滤器。
public class AntiSqlInjectionfilter implements Filter{
public void destroy() {       
// TODO Auto-generated method stub   
}         
public void init(FilterConfig arg0) throws ServletException {   
// TODO Auto-generated method stub    
}          
public void doFilter(ServletRequest args0, ServletResponse args1, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)args0;     
ServletResponse res=(ServletResponse)args1;      
//获得所有请求参数名       
Enumeration params = req.getParameterNames();     
String sql = "";       

String url=((HttpServletRequest) args0).getRequestURI();
if(url.contains("/cgw/admin")){
chain.doFilter(args0,args1);  
}else{
while (params.hasMoreElements()) { 
//得到参数名            
String name = params.nextElement().toString();        
//System.out.println("参数:" + name + "--");            
//得到参数对应值           
String[] value = req.getParameterValues(name);           
for (int i = 0; i < value.length; i++) {               
sql = sql + value[i];           
}         }        
//有sql关键字,跳转到error.html   
//System.out.println(sql);

if (sqlValidate(sql)) {    
org.springframework.context.ApplicationContext ctx = org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext(((HttpServletRequest) args0).getSession().getServletContext());
com.jeecms.cms.manager.main.CmsLogMng log =
     ( com.jeecms.cms.manager.main.CmsLogMng)ctx.getBean("cmsLogMng");
com.jeecms.cms.manager.main.CmsUserMng user =
     ( com.jeecms.cms.manager.main.CmsUserMng)ctx.getBean("cmsUserMng");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd H:m:s");
CmsLog cmslog =new CmsLog();
cmslog.setContent("攻击URL:"+((HttpServletRequest) args0).getRequestURI()+" 参数:"+sql+" 时间:"+format.format(new Date()));
cmslog.setIp(((HttpServletRequest) args0).getLocalAddr());
cmslog.setUrl(((HttpServletRequest) args0).getRequestURI());
cmslog.setTime(new Date());
cmslog.setTitle("网站受到访问攻击");
cmslog.setUser(user.findByUsername("admin"));
cmslog.setCategory(2);
log.save(cmslog);
RequestDispatcher requestDispatcher = args0
.getRequestDispatcher("/error.jsp");
requestDispatcher.forward(args0, args1);
//throw new IOException("您发送请求中的参数中含有非法字符");   
//String ip = req.getRemoteAddr();        
} else {          
chain.doFilter(args0,args1);   
}    
}

}         
     //效验  
protected static boolean sqlValidate(String str) {    
str = str.toLowerCase();//统一转为小写      
String badStr = "'|script|admin|iframe|test|img|body|div|exec|insert|select|delete|update|count|*|mid|master|truncate|char|declare|frameset|ilayer|layer|bgsound|base|onabort|onactivate|onafterprint|onafterupdate|onbeforeactivate|onbeforecopy|onbeforecut|onbeforedeactivate|onbeforeeditfocus|onbeforepaste|onbeforeprint|onbeforeunload|onbeforeupdate|onblur|onbounce|oncellchange|onchange|onclick|oncontextmenu|oncontrolselect|oncopy|oncut|ondataavailable|ondatasetchanged|ondatasetcomplete|ondblclick|ondeactivate|ondrag|ondragend|ondragenter|ondragleave|ondragover|ondragstart|ondrop|onerror|onerrorupdate|onfilterchange|onfinish|onfocus|onfocusin|onfocusout|onhelp|onkeydown|onkeypress|onkeyup|onlayoutcomplete|onload|onlosecapture|onmousedown|onmouseenter|onmouseleave|onmousemove|onmouseout|onmouseover|onmouseup|onmousewheel|onmove|onmoveend|onmovestart|onpaste|onpropertychange|onreadystatechange|onreset|onresize|onresizeend|onresizestart|onrowenter|onrowexit|onrowsdelete|onrowsinserted|onscroll|onselect|onselectionchange|onselectstart|onstart|onstop|onsubmit|onunload";
//过滤掉的sql关键字,可以手动添加        
String[] badStrs = badStr.split("\\|");

for (int i = 0; i < badStrs.length; i++) {  

if (str.indexOf(badStrs[i])!=-1) {         
return true;         
}      
}      
return false;   
}

public static String getSafeStringXSS(String s){
    if (s == null || "".equals(s)) { 
        return s; 
    } 
    StringBuilder sb = new StringBuilder(s.length() + 16); 
    for (int i = 0; i < s.length(); i++) { 
        char c = s.charAt(i); 
        switch (c) { 
        case '<': 
            sb.append("&lt;"); 
            break;
        case '>': 
            sb.append("&gt;"); 
            break; 
        case '\'': 
            sb.append("&prime;");// &acute;"); 
            break; 
        case '′': 
            sb.append("&prime;");// &acute;"); 
            break; 
        case '\"': 
            sb.append("&quot;"); 
            break; 
        case '"': 
            sb.append("&quot;"); 
            break; 
        case '&': 
            sb.append("&"); 
            break; 
        case '#': 
            sb.append("#"); 
            break; 
        case '\\': 
            sb.append('¥'); 
            break;
        case '=': 
            sb.append("&#61;"); 
            break;
        default: 
            sb.append(c); 
            break; 
        } 
    } 
    return sb.toString();
}

}
然后再web.xml配置下<!-- 防止SQL注入的过滤器   --> 
  <filter>       
   <filter-name>antiSqlInjection</filter-name>    
   <filter-class>com.jeecms.cms.AntiSqlInjectionfilter</filter-class>   
  </filter>    
  <filter-mapping>        
        <filter-name>antiSqlInjection</filter-name>      
          <url-pattern>/*</url-pattern>   
  </filter-mapping> 
</web-app>
分享到:
评论

相关推荐

    java防sql注入攻击过滤器

    在Java开发中,SQL注入是...记住,防御性编程是保障软件安全的关键,而防SQL注入过滤器是其中重要的一环。在实际项目中,结合多种安全机制,如输入验证、白名单策略、预编译语句和权限控制,能够构建更坚固的安全防线。

    C#写的防止SQL注入式攻击的软件 可以作为课程设计

    在IT行业中,SQL注入是一种常见的安全威胁,它允许攻击者通过输入恶意的SQL代码来...这个C#软件项目为学习和实践SQL注入防御提供了一个实际的平台,有助于提高开发者对安全编码的认识,防止未来可能出现的安全问题。

    SQL注入字符转换器

    总的来说,"SQL注入字符转换器"是开发人员和网络安全从业者的重要工具,它有助于确保应用程序的输入安全,防止恶意用户利用SQL注入进行攻击。了解并熟练使用这样的工具,不仅可以提高系统的安全性,也是提升个人专业...

    sql.rar_SQL防注入_asp 防注入_sql注入_防破

    同时,定期更新和打补丁,保持服务器软件和数据库管理系统处于最新状态,也是防御SQL注入的重要步骤。 在“sql.txt”文件中,可能包含了具体的示例代码或者技巧,比如使用参数化查询的ASP代码片段,或者是ASP中进行...

    超级SQL注入工具【SSQLInjection】V1.0 正式版 20201112

    SQL注入通常利用了开发者在编写动态SQL查询时对用户输入数据的安全过滤不足。这个【SSQLInjection】工具就是针对这种漏洞设计的专业检测和利用工具。 【SSQLInjection V1.0】是2020年11月12日发布的正式版本,专门...

    SQL注入与ASP木马上传的又一思路.txt

    SQL注入是一种常见的Web应用程序攻击方式,攻击者通过在应用程序中插入恶意SQL语句,利用程序对用户输入数据的不充分过滤或验证,实现对数据库的非法访问、修改甚至破坏。在本案例中,攻击者利用了SQL Server中的`xp...

    高级SQL注入课程.pdf

    - **危害**: SQL注入的危害十分严重,可能导致数据泄露、网站篡改、恶意软件传播、数据库被恶意操作、服务器被远程控制甚至系统瘫痪等后果。 #### 二、不同数据库类型的SQL注入 - **Access**: Microsoft Access是...

    基于Windows环境的SQL注入攻击检测系统设计与实现.pdf

    SQL注入攻击是一种常见的网络攻击手段,其攻击目标是Web应用程序使用的数据库管理系统(DBMS)。攻击者通过在Web表单输入或者在客户端向服务器发送带有恶意SQL代码的请求,试图对数据库执行未授权的查询、更新或其他...

    domain3.2_SQL注入漏洞扫描

    SQL注入是一种常见的网络安全漏洞,它发生在应用程序未能充分验证或过滤用户输入的数据,导致恶意SQL代码可以被嵌入到查询中,从而控制数据库的行为。在"domain3.2_SQL注入漏洞扫描"这个主题中,我们将深入探讨SQL...

    IIS非法信息过滤器

    该过滤器的主要目的是防止恶意用户通过HTTP请求发送有害或非法的信息,例如SQL注入攻击、跨站脚本(XSS)攻击等。这些攻击可能导致数据泄露、系统瘫痪甚至完全控制服务器。 ### IIS非法信息过滤器的工作原理 IIS...

    java-sql-inspector:用于测试Java代码是否存在SQL注入漏洞的实用程序

    SQL注入是一种常见的安全威胁,攻击者可以通过在输入字段中插入恶意SQL代码来操纵数据库查询,从而获取敏感信息、修改数据甚至完全控制数据库系统。这款工具的出现是为了帮助开发者在软件发布之前预防这种类型的攻击...

    过滤器源代码

    6. **安全考虑**:这样的过滤器设计是为了提高系统安全性,防止未经授权的访问。然而,为了确保有效性和安全性,需要考虑边界条件、异常处理和潜在的SQL注入等问题。此外,过滤规则应尽可能严格,避免误拦合法用户。...

    Secure-Systems-of-SQL-Injection-Attack:具有SQL注入漏洞的安全系统

    恶意文本检测器,约束验证,查询长度验证和基于文本的密钥生成器是用于检测和防止SQL注入攻击访问数据库的四种过滤技术。 要求 Web应用程序 一台虚拟服务器 测试客户 封包捕获软件 执行 我们正在Ubuntu中进行此项目...

    注入式攻击的实例

    1. **SQL注入**:描述中的"建库脚本.sql"可能涉及到SQL注入。当用户输入的数据未经验证或过滤,直接与SQL查询语句拼接时,攻击者可以通过构造特殊的输入,使数据库执行恶意的SQL命令。例如,一个不安全的登录表单...

    APK网络验证后台数据库+注入器.zip

    【标题】"APK网络验证后台数据库+注入器.zip"所涉及的知识点主要集中在移动应用安全、网络验证机制以及数据库管理与SQL注入攻击。这里我们将深入探讨这些关键领域。 首先,APK是Android应用程序包(Android Package...

    mvc模式过滤器简单登录

    2. **安全过滤**:过滤非法字符,防止SQL注入攻击,确保输入的数据安全。 3. **日志记录**:记录用户的登录尝试,便于分析和监控系统的使用情况。 4. **字符编码转换**:确保请求和响应的数据正确编码,避免乱码问题...

    sql injection cheat sheet

    为了防止SQL注入攻击,开发者应采取以下措施: 1. **参数化查询**:使用预编译的语句和参数绑定,避免直接拼接用户输入到SQL语句中。 2. **输入验证与清理**:对所有用户输入进行严格的验证和清理,避免任何潜在的...

    SQL-Injection-cheat-sheet:利用和学习SQL注入的备忘单

    SQL注入发生时,用户输入的数据未经验证或过滤就直接被用作数据库查询的一部分,导致执行非预期的SQL命令。例如,一个简单的登录表单如果没有进行输入检查,攻击者可以输入" ' OR '1'='1 ",这会使查询总是返回真,...

    阿D注入工具免杀版本

    在实际操作中,为了防止SQL注入攻击,开发人员应遵循以下最佳实践: 1. **输入验证**:对用户输入的数据进行严格的过滤和校验,只允许预期的字符和格式。 2. **参数化查询**:使用预编译的SQL语句和参数,可以有效...

    java sql2000 学生住宿信息管理系统

    考虑到安全,可能还对输入数据进行了验证和过滤,防止SQL注入等安全问题。 总的来说,"Java SQL2000学生住宿信息管理系统"是一个综合运用了Java编程语言、SQL Server 2000数据库和Web技术的实践案例,它体现了软件...

Global site tag (gtag.js) - Google Analytics