- 浏览: 74592 次
- 性别:
- 来自: 大连
最新评论
-
Heart.X.Raid:
//非递归后序遍历二叉树
void aftorder_t ...
树的遍历 -
zhangjunji111:
airlink 写道建议你再加个0来循环。
我的测试结果是10 ...
Spring的获取Bean的性能测试。 -
airlink:
建议你再加个0来循环。我的测试结果是10倍以上的差距。spri ...
Spring的获取Bean的性能测试。 -
rmn190:
结果中哪一个是C++的,哪一个Java的呢? 楼主最好用一个t ...
简单的c++排序跟java的性能比较。仅仅学习。 -
moshalanye:
每个对象都有一个隐含锁静态对象属于Class对象,非晶态对象属 ...
Java里面的同步跟oracle的锁的联想
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(45) NOT NULL,
`passwd` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
package com.liuxt;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlInjection {
Connection conn=null;
private void initDB(){
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" +
"user=root&password=G@111111");
}catch(Exception e){
e.printStackTrace();
}
}
private boolean queryPreUser(String name, String passwd) {
PreparedStatement statement=null;
try {
String sql=this.ceatePreSql(name,passwd);
statement=this.conn.prepareStatement(sql);
System.out.println("sql....."+sql);
statement.setString(1,name);
statement.setString(2,passwd);
ResultSet res=statement.executeQuery();
int count=0;
while(res.next()){
count=res.getInt(1);
}
if(count==1) return true;
else return false;
} catch (SQLException e) {
e.printStackTrace();
}
finally{
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return false;
}
private String ceatePreSql(String name, String passwd) {
StringBuilder sb=new StringBuilder();
sb.append("select count(*) as cc from user ");
sb.append("where name=? ");
sb.append("and passwd=? ");
return sb.toString();
}
private boolean queryUser(String name, String passwd) {
Statement statement=null;
try {
statement=this.conn.createStatement();
String sql=this.creatSql(name,passwd);
System.out.println("sql ....."+sql);
ResultSet res=statement.executeQuery(sql);
int count=0;
while(res.next()){
count=res.getInt(1);
}
if(count==1) return true;
else return false;
} catch (SQLException e) {
e.printStackTrace();
}
finally{
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return false;
}
private String creatSql(String name, String passwd) {
StringBuilder sb=new StringBuilder();
sb.append("select count(*) as cc from user ");
sb.append("where name='"+name+"' ");
sb.append("and passwd='"+passwd+"'");
//sb.toString();
return sb.toString();
}
public static void main(String[] args) {
SqlInjection dbTest=new SqlInjection();
dbTest.initDB();
boolean result;
result=dbTest.queryUser("test","111");
System.out.println("query result(in Statement) is ===="+result);
result=dbTest.queryUser("", "' or 1=1 --'");
System.out.println("query result(in Statement) is ===="+result);
result=dbTest.queryUser("' or 1=1 --'", "x");
System.out.println("query result(in Statement) is ===="+result);
result=dbTest.queryPreUser("test","111");
System.out.println("query result(in PreparedStatement) is ===="+result);
result=dbTest.queryPreUser("", "' or 1=1 --'");
System.out.println("query result(in PreparedStatement) is ===="+result);
result=dbTest.queryPreUser("' or 1=1 --'", "x");
System.out.println("query result(in PreparedStatement) is ===="+result);
}
}
运行结果:
sql .....select count(*) as cc from user where name='test' and passwd='111'
query result(in Statement) is ====true
sql .....select count(*) as cc from user where name='' and passwd='' or 1=1 --''
query result(in Statement) is ====true
sql .....select count(*) as cc from user where name='' or 1=1 --'' and passwd='x'
query result(in Statement) is ====false
sql.....select count(*) as cc from user where name=? and passwd=?
query result(in PreparedStatement) is ====true
sql.....select count(*) as cc from user where name=? and passwd=?
query result(in PreparedStatement) is ====false
sql.....select count(*) as cc from user where name=? and passwd=?
query result(in PreparedStatement) is ====false
评论
有数据输入查询数据库而不加以限制就很容易产生注入
我在C# 的界面程序也试过SQL注入成功
<div class="quote_div">
<p>DROP TABLE IF EXISTS `user`;<br>CREATE TABLE `user` (<br> `id` int(10) unsigned NOT NULL auto_increment,<br> `name` varchar(45) NOT NULL,<br> `passwd` varchar(45) NOT NULL,<br> PRIMARY KEY (`id`)<br>) ENGINE=InnoDB DEFAULT CHARSET=gb2312;</p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>package com.liuxt;</p>
<p>import java.sql.Connection;<br>import java.sql.DriverManager;<br>import java.sql.PreparedStatement;<br>import java.sql.ResultSet;<br>import java.sql.SQLException;<br>import java.sql.Statement;</p>
<p>public class SqlInjection {<br> Connection conn=null;<br> <br> private void initDB(){<br> <br> try{<br> Class.forName("com.mysql.jdbc.Driver");<br> conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" + <br> "<a href="mailto:user=root&password=G@111111">user=root&password=G@111111</a>");</p>
<p> }catch(Exception e){<br> e.printStackTrace(); <br> }<br> <br> <br> }</p>
<p> private boolean queryPreUser(String name, String passwd) {<br> PreparedStatement statement=null;<br> try {<br> String sql=this.ceatePreSql(name,passwd);<br> statement=this.conn.prepareStatement(sql);<br> System.out.println("sql....."+sql);<br> statement.setString(1,name);<br> statement.setString(2,passwd);<br> ResultSet res=statement.executeQuery();<br> int count=0;<br> while(res.next()){<br> count=res.getInt(1);<br> <br> }<br> <br> if(count==1) return true;<br> else return false;<br> <br> } catch (SQLException e) {<br> e.printStackTrace();<br> }<br> finally{<br> try {<br> statement.close();<br> } catch (SQLException e) {<br> e.printStackTrace();<br> }<br> <br> }<br> return false;<br> }<br> <br> <br> </p>
<p> <br> private String ceatePreSql(String name, String passwd) {<br> StringBuilder sb=new StringBuilder();<br> sb.append("select count(*) as cc from user ");<br> sb.append("where name=? ");<br> sb.append("and passwd=? ");<br> return sb.toString();<br> }</p>
<p><br> private boolean queryUser(String name, String passwd) {<br> Statement statement=null;<br> try {<br> statement=this.conn.createStatement();<br> String sql=this.creatSql(name,passwd);<br> System.out.println("sql ....."+sql);<br> ResultSet res=statement.executeQuery(sql);<br> int count=0;<br> while(res.next()){<br> count=res.getInt(1);<br> <br> }<br> <br> if(count==1) return true;<br> else return false;<br> <br> } catch (SQLException e) {<br> e.printStackTrace();<br> }<br> finally{<br> try {<br> statement.close();<br> } catch (SQLException e) {<br> e.printStackTrace();<br> }<br> <br> }<br> return false;<br> }<br> <br> <br> private String creatSql(String name, String passwd) {<br> <br> StringBuilder sb=new StringBuilder();<br> sb.append("select count(*) as cc from user ");<br> sb.append("where name='"+name+"' ");<br> sb.append("and passwd='"+passwd+"'");<br> //sb.toString();<br> return sb.toString();<br> }</p>
<p> public static void main(String[] args) {<br> <br> SqlInjection dbTest=new SqlInjection();<br> dbTest.initDB();<br> boolean result;<br> result=dbTest.queryUser("test","111");<br> System.out.println("query result(in Statement) is ===="+result);<br> result=dbTest.queryUser("", "' or 1=1 --'");<br> System.out.println("query result(in Statement) is ===="+result);<br> result=dbTest.queryUser("' or 1=1 --'", "x");<br> System.out.println("query result(in Statement) is ===="+result);<br> <br> result=dbTest.queryPreUser("test","111");<br> System.out.println("query result(in PreparedStatement) is ===="+result);<br> result=dbTest.queryPreUser("", "' or 1=1 --'");<br> System.out.println("query result(in PreparedStatement) is ===="+result);<br> result=dbTest.queryPreUser("' or 1=1 --'", "x");<br> System.out.println("query result(in PreparedStatement) is ===="+result);<br> }</p>
<p>}</p>
<p> </p>
<p>运行结果:</p>
<p> </p>
<p><span style="color: #ff6600;">sql .....select count(*) as cc from user where name='test' and passwd='111'<br>query result(in Statement) is ====true<br>sql .....select count(*) as cc from user where name='' and passwd='' or 1=1 --''<br>query result(in Statement) is ====true<br>sql .....select count(*) as cc from user where name='' or 1=1 --'' and passwd='x'<br>query result(in Statement) is ====false<br>sql.....select count(*) as cc from user where name=? and passwd=? <br>query result(in PreparedStatement) is ====true<br>sql.....select count(*) as cc from user where name=? and passwd=? <br>query result(in PreparedStatement) is ====false<br>sql.....select count(*) as cc from user where name=? and passwd=? <br>query result(in PreparedStatement) is ====false<br></span></p>
<p> </p>
<p> </p>
</div>
<p> </p>
发表评论
-
Java里面的同步跟oracle的锁的联想
2009-07-16 08:21 1172暂时不讨论。不明白 -
想做一个JMSServer,实现10000/s可以吗?
2009-07-02 17:51 1038本贴已经删除,有很多东西需要学习。谢谢大大家给予的建议和批评啊 ... -
Spring的事务管理例子代码
2009-06-27 10:29 3444事务管理: 分global事务管理和local事务管理, ... -
Java String中的hashCode函数
2009-06-27 09:43 4265String 类中的hash函数如下: public ... -
java中HashCode的作用和Map的实现结构
2009-06-25 22:50 3906Map 是一种数据结构,用来实现key和value 的映射。通 ... -
使用Spring后会带来什么好处
2009-06-23 16:20 9331 为你的项目增加一个管家,你不必写很多的代码去实现一些框架已 ... -
jboss EJB
2009-06-15 14:39 817暂时不讨论。不明白 -
简单的归并排序算法例子
2009-06-14 21:36 1062import java.util.ArrayList;impo ... -
Jboss消息中间件跟IBM MQ的比较
2009-06-12 21:28 1602简单说几点. 1 jboss消息以java编写,嵌入到jbo ... -
Jboss message point to point
2009-06-12 21:17 885下面的例子程序是从Jbos ... -
Jboss SubscriberClient 主动式接受消息
2009-06-11 21:35 691下载jboss后面,按照默认启动就可以。 packag ... -
http报文
2009-06-11 21:09 2550HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII ... -
面向对象的三个特征
2009-06-11 20:52 778面向对象的三个基本特征是:封装、继承、多态。 Th ... -
java的同样排序函数的执行效率
2009-06-11 20:50 1303package com.liuxt.sort; import ... -
apache ab 性能测试
2009-06-10 20:22 1491测试结果的说明:参考文章:http://www.phpchin ... -
java虚拟机规范 3.5 运行期数据区
2009-06-10 14:35 923http://java.sun.com/docs/books/ ... -
java virtural machine data type
2009-06-08 16:35 673data ... -
parse xml file with dom and sax .
2009-06-07 13:47 908基于dom方式的dom4j和jdom以及JDK提供的dom方式 ... -
memcached 的linux配置
2009-06-03 22:45 681详细参选下面的连接: http://www.ccvita.co ... -
memcached 的java 客户端的简单测试代码
2009-06-03 22:42 1548import java.io.IOException; imp ...
相关推荐
总之,Java中的SQL注入过滤器是保护应用程序免受SQL注入攻击的重要手段之一。通过在请求处理前对参数进行检查和清理,可以有效地降低被注入的风险。同时,结合其他安全措施,如使用预编译的SQL语句,可以进一步增强...
在Java开发中,SQL注入是一种常见的安全威胁,它允许攻击者通过输入恶意SQL代码来操纵数据库,获取、修改或删除敏感数据。为了防止此类攻击,开发者通常会使用一种称为“SQL注入过滤器”的机制。本篇文章将深入探讨...
本文在分析了SQL 注入原理的基础上,提出了几点Java Web 环境下防范措施。 随着Ineternet 技术的迅猛发展,为了能更充分地使用互联网这个世界上最大的交流平台,许多单位或个人纷纷建立自己的网站。但是...
SQL注入是一种常见的网络安全威胁,它发生在应用程序不恰当地处理用户输入数据时,导致攻击者能够构造恶意SQL语句,从而获取、修改、删除或者控制数据库中的敏感信息。在这个实验中,我们将关注Java语言如何处理SQL...
本项目"java web Xss及sql注入过滤器.zip"就是针对这两种威胁提供的一种解决方案,基于流行的Spring Boot 2.0框架进行开发。 XSS 攻击是通过在网页中插入恶意脚本,当其他用户访问该页面时,这些脚本会被执行,从而...
其次,SQL漏洞静态代码检测工具则从源代码层面进行分析,对程序进行深度扫描,寻找可能导致SQL注入的编程错误。这种工具通常会检查SQL查询语句的构造方式,例如是否存在字符串拼接构建SQL语句的情况,或者是否使用了...
为了防止SQL注入,开发者需要采取一系列的预防措施,确保应用程序的安全性。以下是一些核心的解决方案: 1. **预编译语句(PreparedStatement)**: 题目中提到的预编译语句是防止SQL注入的关键技术。预编译语句在...
**基于ESAPI的防SQL注入技术** 在网络安全领域,SQL注入是一种常见的攻击手段,通过恶意构造SQL语句,攻击者可以获取、修改甚至删除数据库中的敏感数据。为了防止这种攻击,开发人员通常会采用各种防御策略,其中一...
SQL注入是一种常见的网络攻击方式,攻击者通过在Web应用程序接收的请求中插入恶意SQL语句,以此来操纵目标数据库执行非授权操作。这类攻击通常发生在应用程序没有对用户输入的数据进行充分验证的情况下。 **SQL注入...
本文将详细分析一个用于防止SQL注入的Java过滤器类——`Checksql`。 #### 类结构与功能 `Checksql`类实现了`javax.servlet.Filter`接口,主要负责对HTTP请求中的参数进行检查,以确保其不包含可能导致SQL注入攻击...
SQL注入是由于应用程序未能正确验证和清理用户输入的数据导致的。当用户提交的输入被直接拼接到SQL查询中时,攻击者可以构造特定的字符串来操纵查询的逻辑。例如,一个简单的登录表单可能接收用户名和密码,但如果...
SQL注入是一种严重的安全威胁,它允许攻击者通过在应用程序的输入字段中插入恶意SQL代码来执行未经授权的数据库操作。攻击者通常寻找没有适当验证和过滤的用户输入,然后利用这些漏洞来构造能改变原始SQL语句意图的...
SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过提交恶意的SQL代码到应用程序的输入字段中(如表单、URL等),利用这些输入来操控数据库执行非预期的操作,进而获取敏感数据、修改数据甚至破坏整个数据库...
SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过向数据库提交恶意SQL代码来获取敏感数据、修改数据或执行其他非法操作。随着网络安全意识的提高和技术的发展,传统的SQL注入检测方法(如简单的字符串匹配)...
标题中的“自己动手编写SQL注入漏洞扫描工具”指的是创建一个能够自动检测Web应用程序是否存在SQL注入漏洞的软件。SQL注入是一种常见的网络安全威胁,攻击者通过在输入字段中插入恶意的SQL语句来操纵数据库,获取...
SQL注入是一种常见的安全漏洞,攻击者通过在应用程序的输入字段中插入恶意SQL语句,利用这些语句来操控数据库,获取未授权的数据访问,修改或破坏数据。这种攻击方式广泛存在于Web应用程序中,尤其是在那些使用动态...
"程序分析技术在SQL注入防御中的应用研究" 程序分析技术在SQL注入防御中的应用研究是指利用程序分析技术来防御SQL注入攻击的方法。SQL注入攻击是一种常用且易于实施的攻击手段,对Web应用程序的安全构成严重危害。...
Java SQL Inspector是一款强大的工具,专为检测Java代码中的SQL注入漏洞而设计。SQL注入是一种常见的安全威胁,攻击者可以通过在输入字段中插入恶意SQL代码来操纵数据库查询,从而获取敏感信息、修改数据甚至完全...
本书作者均是专门研究SQL注入的安全专家,他们集众家之长,对应用程序的基本编码和升级维护进行全面跟踪,详细讲解可能引发SQL注入的行为以及攻击者的利用要素,并结合长期实践经验提出了相应的解决方案。针对SQL...