sql 整改措施 注入_SQL注入(SQL Injection)案例和防御方案

sql注入(SQL Injection):就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

SQL注入攻击的主要危害包括:

非法读取、篡改、添加、删除数据库中的数据;

数据库信息泄漏:数据库中存放的用户的隐私信息的泄露,攻击者盗取用户的各类敏感信息,获取利益。

网页篡改:通过修改数据库来修改网页上的内容。

数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改,攻击者私自添加或删除账号

网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击;

服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。

破坏硬盘数据,瘫痪全系统。

SQL注入的产生原因通常表现在以下几方面:

1. 不当的类型处理;

2. 不安全的数据库配置;

3. 不合理的查询集处理;

4. 不当的错误处理;

5. 转义字符处理不合适;

6. 多个提交处理不当。

SQL注入攻击案例:

查看文章的注入案例:

查看某篇文章的url参数为:?id=1

则通过注入命令:?id=1 or 1=1,则可以列出整个数据表里面的所有文章。

如果查看用户是通过user_id来访问,如:?uid=1

则通过注入命令:?id=1 or 1=1, 则可以把整个用户表的记录全部显示出来

SQL命令如下:

通过?id=1的SQL命令为:select * from article where id=1,此语句查询到1条结构

通过?id=1 and 1=1的SQL命令为:select * from article where id=1 or 1=1,此语句查询到整个表的记录

用户登录的注入案例:

登录表单有user_name字段,查询语句为:select * from users where nickname='{user_name}'

则可以在user_name文本框填入:(' or 1='1),这样可以构造出注入的SQL命令:select * from users where user_name='' or 1='1',这样很容易就进入系统了。

SQL注入猜表:

在登录页面的用户名字段填入:(' or 1=(select count(0) from t_porg_document) or 1='1),可以构造出注入的SQL命令:select * from users where user_name='' or 1=(select count(0) from recharge) or 1='1'

这样就可以猜测是否recharge表存在.存在则语句正常执行,否则就报错了。

猜中表名后,就可以对数据表进行增删改查的操作,如:

在登录页面的用户名字段填入:('; delete from users),可以构造出危险的SQL命令:select * from users where user_name=''; delete from users;

通过加分号,可以构造出任意增删改查sql语句,整个数据库就被攻击者随意控制了。

对SQL注入的防御方法主要有:

1. 字符串长度验证,仅接受指定长度范围内的变量值。sql注入脚本必然会大大增加输入变量的长度,通过长度限制,比如用户名长度为 8 到 20 个字符之间,超过就判定为无效值。

2. 对单引号和双"-"、下划线、百分号等sql注释符号进行转义

3. 对接收的参数进行类型格式化,如id参数值获取后,进行int类型转换

4. 永远不要使用动态拼装SQL,推荐使用参数化的SQL或者直接使用存储过程进行数据查询存取。sql注入最主要的攻击对象就是动态拼装的SQL,通过参数化查询可以极大减少SQL注入的风险。

5. 永远不要使用管理员权限的数据库连接(sa、root、admin),为每个应用使用单独的专用的低特权账户进行有限的数据库连接。

6. 不要把机密信息明文存放,请加密或者hash掉密码和敏感的信息。这样对方就算获取到整个表的数据内容,也没什么价值。

7. 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息输出到日志而不是在页面中展示。

8. 做好XSS跨站攻击的防护,防止攻击者伪造管理员信息进入系统后台

9. 不管客户端是否做过数据校验,在服务端必须要有数据校验(长度、格式、是否必填等等)

SQL注入检测工具:

http://blog.jobbole.com/17763/ 10个SQL注入工具

http://netsecurity.51cto.com/art/201412/458837.htm 国产SQL注入漏洞测试工具——SSQLInjection

https://www.oschina.net/search?scope=project&q=sql注入 sql注入工具排行榜

编程语言自带的过滤方法:

PHP

普通输入可以用mysql_real_escape_string() / mysqli_real_escape_string()来转义特殊的输入字符;

like查询语句中,如果用户输入的值有"_"和"%",则会出现这种情况:用户本来只是想查询"abcd_",查询结果中却有"abcd_"、"abcde"、"abcdf"等等;用户要查询"30%"(注:百分之三十)时也会出现问题。

在PHP脚本中我们可以使用addcslashes()函数来处理以上情况,如下实例:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");

// $sub == \%something\_

参考文章:

http://blog.csdn.net/stilling2006/article/details/8526458 (SQL注入原理讲解,很不错!)

http://netsecurity.51cto.com/art/201009/226227.htm (SQL注入攻击三部曲之入门篇)

http://www.runoob.com/mysql/mysql-sql-injection.html (MySQL 及 SQL 注入)

http://www.jb51.net/article/18874.htm (SQL注入中绕过 单引号 限制继续注入)

http://www.knowsky.com/441536.html (让SQL注入攻击危害最小化三大措施)

http://www.cnblogs.com/smilewxt/p/4229810.html (SQL注入的原理以及危害)

http://blog.jobbole.com/105586/ (记一次SQL注入实战)

https://my.oschina.net/qjedu/blog/1504004 (SQL注入详解)

演示文件下载:

版权声明:本文采用署名-非商业性使用-相同方式共享(CC BY-NC-SA 3.0 CN)国际许可协议进行许可,转载请注明作者及出处。

本文标题:SQL注入(SQL Injection)案例和防御方案

本文链接:http://www.cnblogs.com/sochishun/p/6994918.html

本文作者:SoChishun (邮箱:14507247#qq.com | 博客:http://www.cnblogs.com/sochishun/)

发表日期:2017年6月12日

SQL注入——SQL Injection

本文部分内容转自:https://www.cnblogs.com/rush/archive/2011/12/31/2309203.html http://www.diybl.com/course/7_ ...

DDOS、CC、sql注入,跨站攻击防御方法

web安全常见攻击解读--DDos.cc.sql注入.xss.CSRF 一,DDos https://www.cnblogs.com/sochishun/p/7081739.html#4111858 ...

Web安全相关(五):SQL注入(SQL Injection)

简介 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据 ...

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

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

仿sql注入 sql

代码审计中的SQL注入

0x00 背景 SQL注入是一种常见Web漏洞,所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.本文以代码审计的形式研 ...

【转载】以Java的视角来聊聊SQL注入

以Java的视角来聊聊SQL注入 原创 2017-08-08 javatiku Java面试那些事儿 在大二就接触过sql注入,之前一直在学习windows逆向技术,认为web安全以后不是自己的从业方 ...

SQL注入技术专题—由浅入深【精华聚合】

作者:坏蛋链接:https://zhuanlan.zhihu.com/p/23569276来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 不管用什么语言编写的Web应用 ...

随机推荐

android 动态改变listview的内容

本文模拟:点击一个按钮,为已有的listview添加一行数据 < ...

Windows 8.1 with update 官方最新镜像汇总(全)

Windows 8.1 with update 官方最新镜像汇总,发布日期: 2014/12/16,Microsoft MSDN. 镜像更新日志: 12/29:32位大客户专业版中文版12/24:64 ...

stringstream字符串流

例题详解 題目:输入的第一行有一个数字 N 代表接下來有 N 行資料,每一行資料里有不固定個數的整數(最多 20 個,每行最大 200 個字元),請你寫一個程式將每行的总和印出來. 輸入: 3 1 2 ...

MVC 01

ASP.NET MVC 01 - ASP.NET概述 本篇目录: ASP.NET 概述 .NET Framework 与 ASP.NET ASP.NET MVC简介 ASP.NET的特色和优势 典型案 ...

Beamer 中的页面链接

\documentclass[]{beamer} \usetheme{Madrid} \usenavigationsymbolstemplate{} \title{Main Title} \autho ...

python2 python3 转换,兼容

0. 1.参考 https://docs.python.org/3/library/urllib.html urllib is a package that collects several modu ...

man查看帮助命令

man -h/-help 1.在man命令帮助信息的界面中,所包含的常用操作按键及其用途 按键 用处 空格键 向下翻一页 PaGe down 向下翻一页 PaGe up 向上翻一页 home 直接前往 ...

Spring Boot的数据访问:CrudRepository接口的使用

示例 使用CrudRepository接口访问数据 创建一个新的Maven项目,命名为crudrepositorytest.按照Maven项目的规范,在src/main/下新建一个名为resource ...

GitHub学习二-将本地Git库与Github上的Git库相关联

0 git clone 如果是从自己的github clone,一键搞定,和三步的git remote add功能一样. 1.创建本地库 新建目录,右键git bash here,输入 git ini ...

Linux查看磁盘占用率及文件大小

查看磁盘占用率: 在 df 命令中使用-h选项,以人类易读的格式输出(例如,5K,500M 及 5G) linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令 ...

你可能感兴趣的:(sql,整改措施,注入)