注册忘记密码

黑客论坛,黑客工具,黑客教程,QQ技术,黑客基地,黑客网络,黑客软件,黑客联盟,免杀,远控,ddos,cc,黑客攻防,黑客编程,黑客定位,手机定位,微信定位,hack,黑客网站,查开房,定位,信息查询

网站建设SEO培训
查看: 8919|回复: 0

[技术文章] SQL 注入小结总结及理解Web 应用的工作原理和

[复制链接]
   0 UID
   0帖子
   0精华
21
   0威望
500
   0金币
45022
   0贡献
5000
   0阅读权限
   200
   积分
   0
   在线时间
   567 小时
   最后登录
   2020-2-24
发表于 2020-1-9 23:17:24 | 显示全部楼层 |阅读模式
    通前面的学习,您学到了一些引发 SQL 注入的因素,从应用的设计和架构到开发人员行为以及在构建应用的过程中使用的编码风格。我们讨论了当前流行的多层(n 层)Web 应用架构中通
常包含的带数据库的存储层,是如何与其他层产生的数据库查询(通常包含某些用户提供的信息)进行交互的。我们还讨论了动态字符串构造(也称动态SQL)以及将SQL 查询组合成一个字符串并与用户提供的输入相连的操作。该操作会引发SQL 注入,因为攻击者可以修改SQL 查询的逻辑和结构,进而执行完全违背开发人员初衷的数据库命令。我们将在后面的进一步讨论SQL 注入,不仅学习SQL 注入的发现和区分SQL 注入攻击和SQL 注入的危害,还将学习如何对SQL黑客注入进行防御,最后我们会给出很多方便的参考资源、建议和备忘单以帮助读者快速找到需要的信息。您应该反复阅读并实践例子,这样才能巩固对SQL 注入概念及其产生过程的理解。掌握这些知识后,才算踏上了在现实中寻找、利用并修复SQL 注入的漫漫征程。
  1.理解Web 应用的工作原理
Web 应用是一种使用Web 浏览器并通过Internet 或内部网访问的程序。它同时还是一种使用浏览器所支持语言(如HTML、JavaScript、Java 等)编写的计算机软件程序,借助普通的Web 浏览器来呈现应用程序的可执行文件。基本的数据库驱动的动态Web 应用通常包含一个后台数据库和很多包含服务器端脚本的Web 页面,这些脚本则是由可从数据库(数据库的选择依不同的交互而定)中提取特定信息的编程语言编写而成的。
● 基本的数据库驱动的动态Web 应用通常包含三层:表示层(Web 浏览器或呈现引擎)、逻辑层(如C#、ASP、.NET、PHP、JSP 等编程语言)和存储层(如SQL Server、MySQL、Oracle 等数据库)。Web 浏览器(表示层,Internet Explorer、Safari、Firefox 等)向中间层(逻辑层)发送请求,中间层通过查询、更新数据库(存储层)来响应该请求。
2. 理解SQL 注入
● SQL 注入是一种将SQL 代码插入或添加到应用(用户)的输入参数中,之后再将这些参数传递给后台的SQL 服务器加以解析并执行的攻击。
● SQL 注入的主要方式是直接将代码插入到参数中,这些参数会被置入SQL 命令中加以执行。
● 攻击者能够修改SQL 语句时,该进程将与执行命令的组件(如数据库服务器、应用服务器或Web 服务器)拥有相同的权限,该权限通常级别很高。
3. 理解SQL 注入的产生过程
● 如果Web 应用开发人员无法确保在将从Web 表单、cookie、输入参数等收到的值传递给SQL 查询(该查询在数据库服务器上执行)之前已经对其进行过验证,通常就会出现SQL 注入漏洞。
● 如果攻击者能够控制发送给SQL 查询的输入,并且能操纵该输入将其解析为代码而非数据,那么攻击者就可能有能力在后台数据库上执行该代码。
● 如果应用开发人员无法彻底理解与他们交互的基础数据库或者无法完全理解并意识到所开发代码潜在的安全问题,那么他们编写的应用通常是不安全的,并且容易受到SQL注入攻击。
4.常见问题解答
问题:什么是SQL 注入?
解答:SQL 注入是一种通过操纵输入来修改后台SQL 语句以达到利用代码进行攻击目的的技术。
问题:是否所有数据库都易受到SQL 注入攻击?
解答:根据情况的不同,大多数数据库都易受到攻击。
问题:SQL 注入漏洞有哪些影响?
解答:这取决于很多因素。例如,攻击者可潜在地操纵数据库中的数据,提取更多应用允许范围之外的数据,并可能在数据库服务器上执行操作系统命令。
问题:SQL 注入是一种新漏洞吗?
解答:不是。自SQL 数据库首次连接至Web 应用起,SQL 注入就可能已经存在。但它首次引起公众注意是在1998 年的圣诞节。
问题:如果我向一个Web 站点插入单引号('),真的会遭到起诉么?
解答:是的,除非您这样做有合法的理由(例如,您的名字中包含一个单引号,如O’Neil)。
问题:如果某人故意在输入中添加了一个单引号字符,代码会怎样执行?
解答:SQL 数据库将单引号字符解析成代码与数据间的分界线:假定单引号外面的内容均为需要运行的代码,而用单引号括起来的内容均为数据。
问题:如果Web 站点禁止输入单引号字符,是否能避免SQL 注入?
解答:不能。可使用很多方法对单引号字符进行编码,这样就能将它作为输入来接收。有些SQL 注入漏洞不需要使用该字符。此外,单引号字符并不是唯一可用于SQL 注入的字符,攻击者还可以使用很多其他字符,比如双竖线(| |)和双引号字符(")等。
问题:如果Web 站点不使用GET 方法,是否能避免SQL 注入?
解答:不能。POST 参数同样容易被操纵。
问题:我的应用是用PHP/ASP/Perl/.NET/Java 等语言编写的。我选择的语言是否能避免SQL 注入?
解答:不能。任何编程语言,只要在将输入传递给动态创建的SQL 语句之前未经过验证,
就容易潜在地受到攻击,除非使用参数化查询和绑定变量。

发表回复

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

快速回复 返回顶部 返回列表