初学SQL注入

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 初学SQL注入

预计阅读时间:5分钟

SQL注入是比较常见的网络攻击方式之一,他不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。

当应用程序使用输入内容来构造动态SQL语句以访问数据库时,会发生SQL注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的 字符串来传递,也会发生SQL注入。SQL注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造动态SQL命令,或者作为存储过程的输入参数,这些表单特别容易受到SQL注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码, 根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是SQL注入就发生了。

SQL注入攻击的总体思路,

1、寻找到SQL注入的位置
2、判断服务器类型和后台数据库类型
3、针对不通的服务器和数据库特点进行SQL注入攻击

2、判断服务器类型和后台数据库类型

一个简单的例子,


SQL create table account(id number primary key, name varchar2(10), password varchar2(20));
Table created.

SQL insert into account values(1, 'bisal', '111111');
1 row created.

SQL commit;
Commit complete.

SQL select * from account;
        ID NAME       PASSWORD
---------- ---------- --------------------
         1 bisal      111111

SQL select * from account where name='' or 1=1 -- and password='';
        ID NAME       PASSWORD
---------- ---------- --------------------
         1 bisal      111111

条件后面”username=’xx’ or 1=1”,用户名等于“空 or1=1”,因为1=1恒为ture,那么这个条件一定会成功,另外,后面加两个“-”,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

SQL注入漏洞存在的原因,就是拼接SQL参数。也就是将用于输入的查询参数,直接拼接在SQL语句中,导致了SQL注入漏洞。例如,


select id,password from user where id=2;

如果该语句是通过sql字符串拼接得到的,例如,


String sql = "select password from user where id=" + id;

其中的id是一个用户输入的参数,那么,如果用户输入的是“2 or 1=1”进行sql注入攻击,上面的语句(select id,password from user where id=2 or 1=1;),就将user表中的所有记录都查出来了,这就是典型的sql注入。

试想,如果用户输入的,是一些危险操作,例如drop table,通过SQL注入的攻击,就不仅仅是数据的泄露,有可能是对数据库的破坏。

至于解决方案,有人总结过,

  1. 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双”-“进行转换等。

  2. 永远不要使用动态拼装SQL,可以使用参数化的SQL(绑定变量)或者直接使用存储过程进行数据查询存取。

  3. 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

  4. 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

  5. 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。

  6. SQL注入的检测方法一般采取辅助软件或网站平台来检测。

关于SQL注入的学习,

1. Sqli-labs

Sqli-labs是一个印度程序员写的,用来学习sql注入的一个游戏教程,可以本地安装,浏览器进行访问,学习各种SQL注入的案例,

https://github.com/Audi-1/sqli-labs

  1. OWASP

关于信息安全,OWASP(Open Web Application Security Project)是一个开源组织,会有各种开源的项目,可以参加,或是有条件使用,有兴趣可以看,

http://www.owasp.org.cn/owasp-project

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 初学SQL注入


  转载请注明: 好好学java 初学SQL注入

 上一篇
一次惊心动魄的问题排查 一次惊心动魄的问题排查
预计阅读时间:9分钟 周末之前,经历了一次系统应急处理,可谓惊险。简单回顾一下,梳理排查思路,算是总结,也是学习。由于涉及些隐私问题,所以屏蔽了一些信息,只阐述技术问题。 应用逻辑并不很复杂,需要访问远端数据库,进行一些数据交互的操作,从应
下一篇 
MySql(windows)安装步骤整理 MySql(windows)安装步骤整理
一、Mysql安装简介     MySQL是一个小巧玲珑但功能强大的数据库,目前十分流行。但是官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的。很多人下了zip格式的解压发现没有setup.exe。     MySQL安装文