一个关于SQL注入的简单例子
2016-09-21 09:19
232 查看
什么是SQL注入?
SQL注入是利用某些数据库的外部接口将用户数据插入到数据库的操作语言中,从而达到入侵数据库乃至操作系统的目的。
数据库有一张user表;表定义如下:
表结构如下:
表中有这么1行数据:
进行普通登录操作时候,会讲账号和密码作为参数传进去,比如:
普通用户会进行正常的输入,这样会得到正确的结果,如下:
但恶意用户会根据MySQL的特性,只要知道用户名,无需知道密码就能查询到数据,比如:
即,用户在username的空格上只要填上:
那如何去防止SQL注入呢?
在JAVA中可以采用预编译的方法,尽量不要采用连接SQL语句的方法。例如:
或者,自定义函数把前端数据的参数进行过滤,(1)拒绝已知的非法数据;(2)只接受已知的正确输入
SQL注入是利用某些数据库的外部接口将用户数据插入到数据库的操作语言中,从而达到入侵数据库乃至操作系统的目的。
数据库有一张user表;表定义如下:
CREATE TABLE `user` ( `id` char(35) NOT NULL, `mobile_num` char(20) NOT NULL, `user_name` char(30) DEFAULT NULL, `password` char(100) NOT NULL, `has_card` tinyint(1) NOT NULL DEFAULT '0', `salt` char(15) DEFAULT NULL, `token` char(65) DEFAULT NULL, `is_valid` tinyint(4) NOT NULL DEFAULT '1', PRIMARY KEY (`id`), UNIQUE KEY `mobile_num_UNIQUE` (`mobile_num`), UNIQUE KEY `user_name_UNIQUE` (`user_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
表结构如下:
表中有这么1行数据:
进行普通登录操作时候,会讲账号和密码作为参数传进去,比如:
SELECT * FROM USER WH 4000 ERE user_name=' ' AND PASSWORD=' ';
普通用户会进行正常的输入,这样会得到正确的结果,如下:
SELECT * FROM USER WHERE user_name='username6' AND PASSWORD='2d1e482bc247a2540cfe1679f93365f8';
但恶意用户会根据MySQL的特性,只要知道用户名,无需知道密码就能查询到数据,比如:
SELECT * FROM USER WHERE user_name='username6' OR '1=1' AND PASSWORD='222';
即,用户在username的空格上只要填上:
username6' OR '1=1;在password的空格上随便填写一串数据即可。(注意’1=1’只是一个varchar)
那如何去防止SQL注入呢?
在JAVA中可以采用预编译的方法,尽量不要采用连接SQL语句的方法。例如:
String sql = "select * from user u where u.username=? and u.password=?"; preparedstatement ps = connection.preparestatement(sql); ps.setString(1, "username5"); ps.setString(2, "aaa")
或者,自定义函数把前端数据的参数进行过滤,(1)拒绝已知的非法数据;(2)只接受已知的正确输入
相关文章推荐
- 一个关于linux socket的简单例子
- 关于ColorBox使用的一个简单例子
- 关于ExpandableListView用法的一个简单小例子
- 自制简单的Java下载器——来自《Java高级编程》的一个关于线程的例子(带上部分注释)
- 关于:读写xls文件,提供下载的一个小例子(jxl 的简单运用) - 读取文件
- 关于:读写xls文件,提供下载的一个小例子(jxl 的简单运用) - 高级操作
- 关于:读写xls文件,提供下载的一个小例子(jxl 的简单运用)
- 关于Java的RMI编程的一个简单的例子
- 关于ExpandableListView用法的一个简单小例子
- 一个关于linux socket的简单例子
- 关于继承和多态的一个简单例子
- 自制简单的Java下载器——来自《Java高级编程》的一个关于线程的例子(带上部分注释)
- 【转载】关于:读写xls文件,提供下载的一个小例子(jxl 的简单运用) - 读取文件
- 关于ExpandableListView用法的一个简单小例子
- 关于AJAX一个简单的例子
- 关于JbpmCenter和Mule整合实现一个审核的简单例子
- 自制简单的Java下载器——来自《Java高级编程》的一个关于线程的例子(带上部分注释)
- 编写一个简单的jdbc例子程序_模版_CRUD_SQL注入
- 关于SAX解析的讲解和一个简单的例子
- 关于Linq的.distinct()方法的运用(一个简单的例子)