标题:用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
摘要:这篇文章主要简要说明一下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