package com.bank;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement; //封装银行卡数据库操作类
public class CardDAO
{ //添加卡
//返回卡号
public String addCard (String userid,String username,String password)
{
String rtn=null;
//生成卡号 String cardid =(int)(Math.random()*1000000)+"";
try
{
//保存数据
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver"); //2.获得连接
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "test0816", "123456");
//3.创建声明
Statement st=conn.createStatement();
//4.执行语句
String sql ="insert into t_bankcard (cardid,user_id,user_name,password,times)"
+" values('"+cardid+"','"+userid+"','"+username+"','"+password+"',sysdate)";
if(st.executeUpdate(sql)==1)
{
rtn=cardid;
} //5.释放资源
st.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return rtn;
} //修改余额
//可以完成取款和存款的功能
//卡号,余额
public boolean updateBalance(String cardid,double yue) throws Exception
{
boolean rtn =false;
//验证余额
if(yue<0)
{
throw new Exception("余额数据异常");
}
try
{ //保存数据
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver"); //2.获得连接
Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "test0816", "123456");
//3.创建声明
Statement st=conn.createStatement();
//4.执行语句
String sql ="update t_bankcard set yue= "
+yue+"where cardid='"+cardid+"'"; rtn=st.executeUpdate(sql)==1; //5.释放资源
st.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return rtn;
} //登入
//登入
public boolean login(String cardid,String password)
{
boolean rtn=false;
try{
//保存数据
//1.加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2.获得链接
Connection conn=DriverManager.
getConnection("jdbc:oracle:thin:@localhost:1521:orcl","test0816","123456"); //3.创建声明
Statement st=conn.createStatement();
//4.执行语句
//这种方式会造成SQL注入
String sql="select * from t_bankcard where cardid='"+cardid
+"'"+"and password='"+password+"'";
//遍历结果集
ResultSet rs=st.executeQuery(sql);
rtn=rs.next();
//5.释放资源
st.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
return rtn;
} //验证登录 public boolean login2 (String cardid,String password)
{
boolean rtn =false; try
{
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:orcl",
"test0816", "123456");
//带有?占位符的语句
String sql= "select * from t_bankcard where "
+ "cardid=? and"
+ " password=? and state=?";
//预编译的声明
//优点:1.执行效率高
//2.避免SQL注入
PreparedStatement ps= conn.prepareStatement(sql);
//替换占位符
ps.setString(1, cardid);
ps.setString(2, password);
ps.setString(3, "1"); //查询结果集
ResultSet rs = ps.executeQuery();
rtn=rs.next();//如果有数据就验证通过 //调用存储过程
//不怎么用
//CallableStatement cs=conn.prepareCall("{call存储过程(?,?)}"); //获得数据库的元数据
DatabaseMetaData dmd= conn.getMetaData();
System.out.println(dmd.getURL());
System.out.println("getUserName()"+dmd.getUserName());
System.out.println("getDatabaseProductName="+dmd.getDatabaseProductName()); //结果集的元数据
ResultSetMetaData rsmd= rs.getMetaData(); System.out.println("getColumnCount="+rsmd.getColumnCount());
System.out.println("getColumnName="+rsmd.getColumnName(1)); rs.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
} return rtn;
}
//查询 }

  

package com.bank;

import static org.junit.Assert.*;

public class Test {

	@org.junit.Test
public void testInsert()
{ //测试发卡
CardDAO cd =new CardDAO ();
String cardid=cd.addCard("1234567890", "张三", "123456");
if(cardid !=null)
{
System.out.println("发卡成功"+cardid);
}
else
{
System.out.println("发卡失败");
}
} //测试修改余额
@org.junit.Test
public void testEdit()
{
CardDAO cd =new CardDAO ();
boolean b=false;
try
{ b=cd.updateBalance("148102", 100);
}
catch (Exception e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
if(b)
{
System.out.println("修改余额成功");
}
else
{
System.out.println("修改余额失败");
}
} //登入
@org.junit.Test
public void testLogin()
{
CardDAO cd=new CardDAO();
if(cd.login("'or 1=1--","14"))//SQL注入 {
System.out.println("登陆成功");
}
else{
System.out.println("登录失败");
}
} @org.junit.Test
//避免SQL注入的测试登入
public void testLogin2()
{
CardDAO cd=new CardDAO();
if(cd.login2("148102","123456"))
{
System.out.println("登陆成功");
}
else{
System.out.println("登录失败");
}
} }

  

1021上课演练----SQL注入与避免(银行系统)的更多相关文章

  1. 【攻防实战】SQL注入演练!

    这篇文章目的是让初学者利用SQL注入技术来解决他们面临的问题, 成功的使用它们,并在这种攻击中保护自己. 1.0 介绍 当一台机器只打开了80端口, 你最依赖的漏洞扫描器也不能返回任何有用的内容, 并 ...

  2. DVWA漏洞演练平台 - SQL注入

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执 ...

  3. DAY5 DVWA之SQL注入演练(low)

    1.设置 把安全等级先调整为low,让自己获得点信心,免得一来就被打脸. 2.测试和分析页面的功能       这里有一个输入框 根据上面的提示,输入用户的id.然后我们输入之后,发现它返回了关于这个 ...

  4. DVWA 黑客攻防演练(八)SQL 注入 SQL Injection

    web 程序中离不开数据库,但到今天 SQL注入是一种常见的攻击手段.如今现在一些 orm 框架(Hibernate)或者一些 mapper 框架( iBatis)会对 SQL 有一个更友好的封装,使 ...

  5. DVWA之SQL注入演练(low)

    1.设置 把安全等级先调整为low,让自己获得点信心,免得一来就被打脸. 2.测试和分析页面的功能       这里有一个输入框 根据上面的提示,输入用户的id.然后我们输入之后,发现它返回了关于这个 ...

  6. [SQL注入1]From SQL injection to Shell

    第一次写,希望大神们多指点. 对于刚接触WEB渗透测试这块的朋友们,很希望能有个平台可以练习.网络上有不少,十大渗透测试演练系统,我这里推荐一个在10以外,适合初学者一步一步进步的平台PENTESTE ...

  7. SQL注入关联分析

    在Web攻防中,SQL注入绝对是一个技能的频繁项,为了技术的成熟化.自动化.智能化,我们有必要建立SQL注入与之相关典型技术之间的关联规则.在分析过程中,整个规则均围绕核心词进行直线展开,我们简单称之 ...

  8. 入门级----黑盒测试、白盒测试、手工测试、自动化测试、探索性测试、单元测试、性能测试、数据库性能、压力测试、安全性测试、SQL注入、缓冲区溢出、环境测试

    黑盒测试 黑盒测试把产品软件当成是一个黑箱子,只有出口和入口,测试过程中只要知道往黑盒中输入什么东西,知道黑盒会出来什么结果就可以了,不需要了解黑箱子里面是如果做的. 即测试人员不用费神去理解软件里面 ...

  9. 手工检测SQL注入漏洞

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执 ...

随机推荐

  1. 数据库字典 sql

    SELECT 表名=case when a.colorder=1 then d.name else '' end, 表说明=case when a.colorder=1 then isnull(f.v ...

  2. Android学习二_八:Animation的使用(一) (转)

    一.Animations介绍 Animations是一个实现android UI界面动画效果的API,Animations提供了一系列的动画效果,可以进行旋转.缩放.淡入淡出等,这些效果可以应用在绝大 ...

  3. WINDOWS系统Eclipse+NDK+Android + OpenCv

    WINDOWS系统Eclipse+NDK+Android + OpenCv 参考文档博客 1 NDK环境搭建 http://jingyan.baidu.com/article/5d6edee22d90 ...

  4. 搭建ASP JSP运行环境

    搭建JSP 服务器 Java + HTML 的运行环境 服务端搭建ASP.NET运行环境

  5. Spring事务解析2-标签解析

    根据自定义标签的使用规则,可以知道会执行AnnotationDrivenBeanDefinitionParser的parse @Override public BeanDefinition parse ...

  6. hdu5119 dp

    题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=5119 题意: 输入T组数据,每组数据包括两个数n和m,接下来n个数,这n个数可以随意取( ...

  7. js不间断平滑地自动向上滚动

    <html> <head> <title>scroll up auto smooth</title> <style> *{ margin: ...

  8. Spring.Net Remoting 相关使用

    http://www.cnblogs.com/GoodHelper/archive/2009/11/19/SpringNet_Remoting.html  本博客系统转载  原文为 Spring.Se ...

  9. wpf,CollectionViewSource,使用数据过滤 筛选 功能。

    class TextListBoxVMpublic : ViewModelBase { public TextListBoxVMpublic() { var list = this.GetEmploy ...

  10. JavaScrip实现3D旋转动态效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...