- 浏览: 74133 次
- 性别:
- 来自: 大连
最新评论
-
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 1154暂时不讨论。不明白 -
想做一个JMSServer,实现10000/s可以吗?
2009-07-02 17:51 1016本贴已经删除,有很多东西需要学习。谢谢大大家给予的建议和批评啊 ... -
Spring的事务管理例子代码
2009-06-27 10:29 3430事务管理: 分global事务管理和local事务管理, ... -
Java String中的hashCode函数
2009-06-27 09:43 4258String 类中的hash函数如下: public ... -
java中HashCode的作用和Map的实现结构
2009-06-25 22:50 3888Map 是一种数据结构,用来实现key和value 的映射。通 ... -
使用Spring后会带来什么好处
2009-06-23 16:20 9261 为你的项目增加一个管家,你不必写很多的代码去实现一些框架已 ... -
jboss EJB
2009-06-15 14:39 804暂时不讨论。不明白 -
简单的归并排序算法例子
2009-06-14 21:36 1054import java.util.ArrayList;impo ... -
Jboss消息中间件跟IBM MQ的比较
2009-06-12 21:28 1598简单说几点. 1 jboss消息以java编写,嵌入到jbo ... -
Jboss message point to point
2009-06-12 21:17 880下面的例子程序是从Jbos ... -
Jboss SubscriberClient 主动式接受消息
2009-06-11 21:35 690下载jboss后面,按照默认启动就可以。 packag ... -
http报文
2009-06-11 21:09 2549HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII ... -
面向对象的三个特征
2009-06-11 20:52 774面向对象的三个基本特征是:封装、继承、多态。 Th ... -
java的同样排序函数的执行效率
2009-06-11 20:50 1290package com.liuxt.sort; import ... -
apache ab 性能测试
2009-06-10 20:22 1469测试结果的说明:参考文章:http://www.phpchin ... -
java虚拟机规范 3.5 运行期数据区
2009-06-10 14:35 921http://java.sun.com/docs/books/ ... -
java virtural machine data type
2009-06-08 16:35 669data ... -
parse xml file with dom and sax .
2009-06-07 13:47 891基于dom方式的dom4j和jdom以及JDK提供的dom方式 ... -
memcached 的linux配置
2009-06-03 22:45 680详细参选下面的连接: http://www.ccvita.co ... -
memcached 的java 客户端的简单测试代码
2009-06-03 22:42 1545import 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注入的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...