用Statements和PreparedStatement防范sql注入

 标题:用Statements和PreparedStatement防范sql注入
摘要:这篇文章主要简要说明一下jsp下如何防范sql注入
难度:20

摘要:这篇文章主要简要说明一下jsp下如何防范sql注入

难度:简单

前几天朋友说他们公司的网站被人黑进去了,还居然做了一段视频放到网上,演示如何黑进去的。问他
对方如何做的,只是告诉我是通过sql注入的,下了那段视频看了看,原来这么回事
首先说明 他们公司的网站是用jsp写的而且是用最古老的方式写的(个人认为只能是用来做入门教学的
),没有用任何struts、spring、hibernate等框架。
sql注入想必大家都知道的,比如用个用户登录,那么form表单有用户名和密码
那么我提交时,在用户名输入框内 输入 “ aaa’ or ’a’=’a” 密码框随便输入,那么这样意味着 sql的
查询语言就是 “select * from 表 where 用户名=' aaa’ or ’a’='a’ and 密码='www.itstudy.cn’  ”,稍懂sql语法的大家就知道 这样的查询结果了。
那么我朋友公司网站正是在用jsp开发时 用Statement方法向数据库提交sql查询的。不被黑都怪了,实际中现在java程序员早都不用这种方式写查询了,一般都用PreparedStatement来查询 或干脆就用hibernate之类的持久层框架,这样通过sql注入就无从谈起了。
为什么呢?比较一下Statements和PreparedStatement和的执行就一目了然了(这里具体的理论解释大家网上自己查了,这里就白话文说说了)

如果有一条sql语句:
“select * frim 表 where 用户名=  ’用户名’”

Statement 的sql语句是这样写的 “select * frim  表 where  用户名= ’”+ 变量值 + “’ ”
而PreparedStatement的 sql语句是这样写的 “select * frim  表 where  用户名=?” 然后赋值于?对应

这样我们就发现 输入“aa’ or ’1’=’1”
Statement是将这个他和sql语句做字符串连接连到一起变成一个大字串 sql语句执行
PreparedStatement怎么处理呢?他是将“aa’ or ’1’=’1”作为一个字符串 赋给?做为 “用户名”字段的对应值,显然这样sql注入无从谈起了。

写到这里我们就发现 实际上很多时候被黑客攻击 不是黑客怎么厉害 ,通常都是我们的程序员只是一个简单的软件工人的缘故吧!!!

朋友是做网络的 不会java,催促我好几次让我解释一下,今天抽空一气呵成写了一小段,算是交差了(考虑安全没有具体说明网址)。
作者:吕海鹏
来自:it学习网原创
更新日志: 2008-03-15 v0.1 初稿完成;
参考文档:
致谢:
讨论网址: http://bbs.deepteach.com
标签(Tags):richyue
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值