资料下载

了解SQL注入攻击&他们如何工作。识别SQL注入代码& PHP Caveats

由管理员撰写。发表于 安全文章

3.6 1 1 1 1 1 评分3.60(5投票)
压住他

的SQL注入简介01的SQL注入 一直保持 安全专家 现在已经忙了十多年,因为他们仍然是 最常见的类型针对Web服务器,网站的攻击Web应用程序服务器。在本文中,我们解释 什么是SQL注入,告诉你 的SQL注入示例 并分析这些类型的攻击如何 利用Web应用程序和Web服务器,提供骇客 访问敏感数据.

额外的有趣 辽宁十一选五走势图一百期黑客辽宁十一选五走势图一百期安全内容:

什么是SQL注入?

网站通常从两个方面运作: 前端后端前端 是我们看到的元素,呈现的HTML,图像等。  On the 后端 但是,有多层系统在渲染前端元素。这样的一层,即数据库,最通常使用一种称为 的SQL, 要么 结构化查询语言。这种标准化的语言提供了一种易于理解的逻辑语句,以表格形式对关系数据执行定义,操作或控制指令。然而,问题在于,尽管这为人类可读性提供了一种结构,但同时也带来了安全性方面的主要问题。

通常,当数据是从网站的前端提供到后端时,例如具有用户名和密码字段的HTML表单–该数据将插入到SQL查询的句子中。这是因为不是将数据分配给某个对象或通过 组() 函数,必须将数据连接到字符串的中间。就像您打印出调试文本和变量值的串联字符串一样,SQL查询的工作方式几乎相同。但是,问题在于,数据库服务器(例如MySQL或PostgreSQL)必须能够以词法分析和理解句子的语法并进行解析 变量=值 定义。必须存在某些特定要求,例如将字符串值包装在引号中。一种 的SQL注入漏洞因此,未引人注意的前端数据(例如引号)可能会破坏SQL查询的预期语句。

的SQL注入如何工作?

那么,“破坏SQL查询的预期语句”是什么意思? 的SQL查询的读法类似于英语句子:

取变量foo并将其设置为 '酒吧' 在桌子上 富b​​ar.
注意预期值周围的单引号, 酒吧。但是,如果我们采用该值,则添加一个单引号和一些其他文本,我们可以 破坏预期的句子, 创建两个句子来改变整个效果。只要数据库服务器可以用词法理解该语句,它就不会更明智,并且会很乐意完成其任务。 那会是什么样呢?

如果我们重视这一价值 酒吧 并将其更改为更复杂的内容– 酒吧' 在桌子上 富b​​ar. 删除所有不等于“ –它完全破坏了一切。句子因此更改如下:

取变量 并将其设置为 '酒吧' 在桌子上 富b​​ar。删除所有不等于“”的值 在桌子上 富b​​ar.

请注意,这严重干扰了预期的句子?通过 注入 句子中的其他信息(包括语法),整个预期功能和结果已被破坏,无法有效删除表中的所有内容,而不仅仅是更改值。

的SQL注入是什么样的?

以代码形式, 的SQL注入 可以有效地发现自己在Web应用程序用户可以更改SQL查询的任何地方。这意味着诸如查询字符串之类的东西: example.com/?this=query_string,表单内容(例如博客上的评论部分,甚至是用户名)&登录页面上的密码输入字段),Cookie值,HTTP标头(例如X-FORWARDED-FOR)或几乎所有其他内容。 对于此示例,请考虑使用PHP中的简单查询字符串:

请求URI:/?username = 管理员
 
1. $ user = $ _GET ['username'];
2. mysql_query(“ UPDATE tbl_users SET 管理员 = 1 WHERE username ='$ user'”);

首先,我们将对此进行分解。

在第1行,我们将查询字符串中username字段的值设置为变量 $ user.

在第2行,我们将该变量的值插入查询字符串的句子中。用变量代替值 管理员 在URI中,数据库查询最终将由MySQL解析如下:

更新tbl_users SET 管理员 = 1 WHERE username ='admin'

但是,缺乏基本的清理功能会使此查询字符串产生严重后果。攻击者所需要做的就是在用户名查询字符串字段中放置一个单引号字符,以更改此句子并注入他或她想要的任何其他数据。

这是一个看起来像这样的示例:

请求URI:/?username = 管理员'或'a'='a
 
1. $ user = $ _GET ['username'];
2. mysql_query(“ UPDATE tbl_users SET 管理员 = 1 WHERE username ='$ user'”);

现在,使用更改后的数据,这是MySQL将看到并尝试评估的内容:

更新tbl_users SET 管理员 = 1哪里username ='admin'或'a'='a'

现在注意,如果这封信 A 等于字母 A (基本上为true = true),所有用户都将设置为管理员状态。

确保代码不受SQL注入漏洞的攻击

如果我们要添加一个功能, mysql_real_escape_string() 例如,在第1行上,这将防止此特定变量容易受到攻击 的SQL注入。实际上,它看起来像这样:

请求URI:/?username = 管理员'或'a'='a                                                                                                                                                                                                          1. $ user = mysql_real_escape_string($ _ GET ['username']);
2. mysql_query(“ UPDATE tbl_users SET 管理员 = 1 WHERE username ='$ user'”);

 该函数通过在反斜杠前面加前缀,来逃避对MySQL查询有害的某些字符。 MySQL不会直接评估单引号字符,而是理解此前缀反斜杠意味着不评估单引号。取而代之的是,MySQL将其视为整体价值的一部分,并且一直保持下去。 因此,MySQL的字符串如下所示:


更新tbl_users SET 管理员 = 1 WHERE用户名='admin \'或\'a \'= \'a'

 

因为每个单引号都被转义,所以MySQL会将其视为整个用户名值的一部分,而不是将其视为SQL语法的多个组成部分。因此避免了SQL注入,因此SQL语句的意图不受干扰。

警告:对于这些示例,我们使用了较旧的,已弃用的函数,例如 mysql_query() mysql_real_escape_string() 有两个原因:

1.   大多数仍在网站上积极运行的PHP代码使用了这些已弃用的功能;
2.   它使我们能够提供简单的示例,使用户易于理解。

但是,正确的方法是使用准备好的SQL语句。例如, 准备() 的功能 MySQLi的PDO_MySQL PHP扩展允许您使用指令符号来格式化和汇编SQL语句,就像 sprintf() 功能呢。这样可以防止用户输入将额外的SQL语法注入数据库查询的任何可能性,因为在准备好的语句的执行阶段提供的所有输入都将被清除。 当然,所有这些都假设您使用的是PHP,但是这个想法仍然适用于任何其他Web语言。

的SQL注入是最广泛利用的漏洞

尽管自从首次记录到SQL注入攻击以来已经有16年了,但它仍然是攻击者非常普遍的漏洞,并被广泛利用。事实上 的SQL注入始终是OWASP漏洞利用最严重的十大列表之一.

返回“安全文章”部分

压住他

标签: 安全 辽宁十一选五走势图一百期安全 保护 骇客 攻击 的SQL注入 Netsparker

文章 阅读下一篇:

CCENT / CCNA

思科公司 路由器

  • SSL WebVPN
  • 保护路由器
  • 基于策略的路由
  • 棒上路由器

虚拟专用网安全

  • 理解DMVPN
  • GRE / IPSec配置
  • 站点到站点IPSec 虚拟专用网
  • IPSec模式

思科公司 救命

  • 视窗 8 虚拟专用网客户端
  • 视窗 7的VPN客户端
  • CCP显示问题
  • 思科支持应用程序。

视窗 2012

  • 新的功能
  • 发牌
  • Hyper-V / VDI
  • 安装Hyper-V

的Linux

  • 文件权限
  • Webmin
  • 群组-用户
  • Samba设置