网络安全之SQL注入

文章目录

      • SQL注入的定义
      • SQL注入为什么会成功?
      • 为什么发生SQL注入?
      • SQL注入的分析
      • SQL的注入流程
        • 判断SQL注入点
        • 判断注入类型
      • SQL注入的通常方法
      • 防止SQL注入

SQL注入的定义

SQL注入是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击。

当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。
如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。

理解:
现代的注入手法,其实就是利用现成的表格数据来执行非常规指令。简单的说,利用非该段执行文本数据,代替正常数据做运算从而得到正确解。能够实现这种操作的技术就叫做sql注入。

SQL注入为什么会成功?

Sql注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行Sql语句以及进行其他方式的攻击,动态生成Sql语句时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。

为什么发生SQL注入?

程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患
用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据或进行数据库操作

当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。

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

SQL注入的分析

对于Java数据库连接JDBC而言,SQL注入攻击只对Statement有效,对PreparedStatement是无效的,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。
如验证用户是否存在的SQL语句为:用户名'and password='密码'

如果在用户名字段中输入: 'or 1=1'或是在密码字段中输入:'or 1=1'
将绕过验证,但这种手段只对只对Statement有效,对PreparedStatement无效。相对Statement有以下优点:

1.防注入攻击
2.多次运行速度快
3.防止数据库缓冲区溢出
4.代码的可读性可维护性好
这四点使得PreparedStatement成为访问数据库的语句对象的首选,缺点是灵活性不够好,有些场合还是必须使用Statement。

SQL的注入流程

判断SQL注入点

找注入点是最关键,也最基础的一个环节
本质原理:
找一个需要后台处理后提交给数据的点,所有的输入只要和数据库进行交互的,都有可能触发SQL注入
一般分为三大类:
Get参数触发SQL注入
POST参数触发SQL注入
Cookie触发SQL注入

例如:
在常规的链接的参数中(链接?参数)找形如?id=num的搜索框
而验证是否存在注入点方法有很多种
最常规也是最简单的方法,引入单引号判断是否注入点

http://host/test.php?id=100;返回错误说明有可能注入
http://host/test.php?id=100 and 1=1 返回正常
http://host/test.php?id=100 and 1=2 返回错误

判断注入类型

数字型注入点

http://host/test.php?id=100 and 1=1
SELECT first_name, last_name FROM users WHERE user_id = '1' or '1'='1'

字符型注入点

http://host/test.php?name=man' and '1'='1 
select * from student where  sname='张三'  or 1=1 --  and password='123'
"select id from users where username = ''+username +"'"  and password = ''  + password +"'" 

在表单中username的输入框中输入’ or 1=1-- ,password的表单中随便输入一些东西,假如这里输入123.此时我们所要执行的sql语句就变成了select id from users where username = ’ ’ or 1=1-- and password = ‘123’,我们来看一下这个sql,因为1=1是true,后面 and password = '123’被注释掉了。

搜索型注入点 — 目前常见的

http://host//test.php?keyword=python%' and 1=1 and '%'='

内联式SQL注入 –常用
在 SQL语句中, AND的优先级是大于 OR的
先计算 AND,然后计算 OR,所以这里我们的语句会被 OR分为两段 SQL语句

SELECT * FROM admin WHER username=''or''='' AND password ='fuzz'SELECT * FROM admin WHER username='fuzz' AND password =''or''=''SELECT * FROM admin WHER username='fuzz' AND password =''or''=''这里我们第一句是返回失败的,但是我们的第二句''=''是返回成功的,OR逻辑是有一个是成功就返回成功,于是我们的整个语句就会返回成功

SQL注入的通常方法

SQL注入主要分两种方式:

一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。上面笔者举的例子就是采用了这种方法。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。

二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“—”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不背编译与执行。

注入大致方法:  
  先猜表名 And (Select count(*) from 表名)<>0
  猜列名 And (Select count(列名) from 表名)<>0
  或者也可以这样

and exists (select * from 表名)
and exists (select 列名 from 表名)

返回正确的,那么写的表名或列名就是正确
这里要注意的是,exists这个不能应用于猜内容上,例如and exists (select len(user) from admin)>3这样是不行的

防止SQL注入

防止SQL注入,我们需要注意以下几个要点:

1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

数据库操作,是触发技术使用的关键。
围绕这一点,可以想到许多系统层面的防护。
第一点就是,避免使用普适性的名词去做主要关键词,可以做适当的修改变形。sql注入其实也是技术门槛比较高的,它需要破解者对于项目网站本身就有一定的了解。
第二点可以考虑加强过滤手段,通过对于主要关键词周边风险词的限制降低风险。根据理论模型来看,这种语句过滤可以极大程度防范技术侵入。

更多相关一
更多相关二

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4个空格和一个tab有什么区别_火花塞为什么一换就是4个?只换一个不行吗?

火花塞不是一个经常被提及的配件&#xff0c;但如果火花塞老化&#xff0c;车辆的整体性能将受到影响&#xff0c;更换火花塞其实也是日常保养的一部分&#xff0c;就像换机油和三滤一样。不知道大家是否注意到&#xff0c;在做完保养之后&#xff0c;维修师傅会帮你检查一下火…

小型云台用的是什么电机_直流电机的工作原理是什么?未来的电动车都会用直流电机吗?...

说起直流电机&#xff0c;其实我们每个人&#xff0c;每天都在用。是吗&#xff1f;别惊讶&#xff0c;是的。手机&#xff0c;我们每天都在用&#xff0c;有消息或者有电话时&#xff0c;手机就开始振动。这个振动就是用直流电机来实现的。当然&#xff0c;直流电机在其他领域…

C语言、C++学习路线

文章目录C语言 C语言大纲 C语言知识点总结图 C语言视频推荐基础篇进阶篇速成篇基础入门之游戏实战篇C语言核心链表文档教程视频教程文件C语言实例C C大纲岗位分析 C与C 编程基础四大件数据结构与算法计算机网络操作系统设计模式C视频推荐C语言 C语言大纲 C语言知识点总结图 C语…

2020年日历_2020年《故宫日历》发布:浓缩紫禁城600年沧桑

2020年《故宫日历》。中国网记者 刘维佳/摄中国网8月26日讯(记者 刘维佳) 2020年《故宫日历》发布会今日在故宫博物院建福宫举行。2020年为庚子鼠年&#xff0c;亦正值紫禁城建成六百周年&#xff0c;因此&#xff0c;2020年《故宫日历》是为纪念紫禁城六百周年而特别呈现。故宫…

计算机二级(C语言)备考

文章目录考试详情一点建议公共基础知识&#xff08;10分&#xff09;着重点资源视频教程文档练习题考试详情 一、选择题 40分 二、程序填空题 18分 三、程序修改题 18分 四、程序设计题 24分 考试时间&#xff1a;120分钟 一点建议 多练习题目&#xff0c;多思考&#xff0c…

jav简单的个人博客网站代码_每个人都可以拥有的个人博客网站

题记------去过的地方越多&#xff0c;越知道自己想回到什么地方去&#xff01;雨又下了一夜&#xff0c;曾经多少次觉得下雨天是最适合睡觉的天气。而最近的雨&#xff0c;总感觉有些嘈杂&#xff0c;总怕吵醒远方睡梦中的星&#xff0c;晨。以至于翻来覆去睡不着。但是&#…

实用的编程网站—良好的开端

文章目录在线编程网站编程资源网编程源码网编程学习网在线编程网站 nyist_acm 领扣 力扣 洛谷 计蒜客 牛客网 蓝桥杯ACM在线 HUSTOJ LiberOJ EduCoder PIPIOJ Codeabbey C语言网 hihocoder 赛码网 编程资源网 搜云盘 IT视频学习网 798资源网 Java知识分享网…

泰禾光电机器人研发_机器之眼 | 3D相机能让机器人看见什么?

“中国制造2025”&#xff0c;其核心环节之一就是机器人智能化。视觉技术代表了机器的眼睛和大脑&#xff0c;机器视觉将使得机器人智能化变成现实。为了使机器人能够胜任更复杂的工作&#xff0c;机器人不但要有更好的控制系统&#xff0c;还需要更多地感知环境的变化。机器人…

云计算学习路线

文章目录说明云计算学习路线云计算技术支撑Linux 基础环境搭建文档教程Linux学习视频推荐云计算基础知识docker容器KVM&#xff08;推荐一本书《深度实践KVM》&#xff09;OpenStackK8S&#xff08;Kubernetes&#xff09;说明 云计算和大数据未来十年必然趋势成为社会的生产资…

c语言将数组初始化为1_c语言之数组初始化

c语言之数组初始化在c语言中&#xff0c;我们经常会有两种初始化的方式(一维数组)&#xff1a;方式一int arr[20];这种方式是在c语言编译阶段对数组分配了固定的内存空间&#xff0c;但没有为c语言赋值&#xff0c;此时&#xff0c;对该数组进行打印输出的话&#xff0c;则会输…

算法学习路线图

关于算法的讨论 如何系统地学习数据结构与算法&#xff1f;| 自学数据结构与算法最全路线 编程指北 动态规划-背包问题 最小生成树(MST)—prim和kruskal算法 用回溯法(backtracking algorithm)求解N皇后问题(N-Queens puzzle) n皇后问题[分支限界法] 克鲁斯卡尔算法(Krus…

python中以表示语块_scikitlearn:将数据拟合成块与将其全部拟合到on

这取决于您使用的矢量器。在CountVectorizer统计文档中单词的出现次数。它为每个文档输出一个(n_words, 1)向量&#xff0c;其中包含每个单词在文档中出现的次数。n_words是文档中的单词总数(也就是词汇表的大小)。它也适合词汇表&#xff0c;这样您就可以反省模型(看看哪个词是…

大数据学习路线

文章目录学习教程&#xff08;不全&#xff09;文档教程大数据实战项目项目源码广义的定义 &#xff1a;是指物理世界到数字世界的映射和提炼。通过发现其中的数据特征&#xff0c;从而做出提升效率的决策行为。 狭义的定义&#xff1a;通过获取存储、分析&#xff0c;从大容量…

input层级高 小程序_获客、引流成本越来越高?开发小程序:低成本获客、引流...

在最近几年时间中&#xff0c;各行各业都有不少企业、商家反应&#xff1a;获客成本越来越高。对此&#xff0c;小编的建议是&#xff1a;去开发一个微信小程序。这是为什么&#xff1f;下面将让带着丰富小程序开发以及运营经验的&#xff0c;来自上海数字商圈的产品经理&#…

聚宽macd底背离_许多散户不知道:MACD月线金叉,MACD月金叉都会带来一波牛市!...

MACD吸收了移动平均线的优点。移动平均线的买卖交易在趋势明显时效果很好&#xff0c;但是一旦遇到牛皮盘整行情&#xff0c;移动平均线所发出的信号就过于频繁而且极其不准确&#xff0c;在期货市场的保证金杠杆效应下容易使投资者遭受致命损失。而MACD恰好能做到&#xff1a;…

E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unavailable)

Ubuntu 安装软件报错问题 错误信息如下&#xff1a; E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarly unavailable) 解决方案&#xff1a; sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/lib/dpkg/lockinit 6 #重启apt-get…

ubuntu 报错E: Unable To Locate Package Software-properties-common

Ubuntu16.04 安装docker-ce [傻瓜教程] 错误描述&#xff1a; Unable To Locate Package Software-properties-common 解决方案&#xff1a; apt-get updateapt-get install python-software-propertiesapt-get install apt-fileapt-file updateapt-get install software-p…

dbscan算法中 参数的意义_无监督机器学习中,最常见的聚类算法有哪些?

在机器学习过程中&#xff0c;很多数据都具有特定值的目标变量&#xff0c;我们可以用它们来训练模型。但是&#xff0c;大多数情况下&#xff0c;在处理实际问题时&#xff0c;数据不会带有预定义标签&#xff0c;因此我们需要开发能够对这些数据进行正确分类的机器学习模型&a…

大数据与云计算的理解与基本认识

文章目录大数据海量数据产生的原因?大数据的出现与发展为我们生活带来了什么&#xff1f;传统的数据处理&#xff0c;存储手段在海量数据当中有什么劣势&#xff1f;大数据数据存储手段&#xff1f;大数据分析在商业上的应用&#xff1f;云计算什么是虚拟化&#xff1f;虚拟化…

造完家怎么拆东西_吸顶灯灯管怎么拆?吸顶灯拆灯管的注意事项有哪些?

吸顶灯出现故障&#xff0c;检查是因为灯管给坏了&#xff0c;就需要对吸顶灯的灯光进行拆卸&#xff0c;那么&#xff0c;吸顶灯灯管怎么拆?打算将吸顶灯的灯管给拆了的时候&#xff0c;也应该要能够清楚具体拆卸的事宜&#xff0c;保证拆卸效果&#xff0c;吸顶灯拆灯管的注…