SQL 注入式攻击的本质

有文章还说注入式攻击还会有“第三波”攻击潮,到时候会更加难以察觉,连微软的大佬都跑出来澄清说与微软的技术与编码无关,微软为此还专门推出了三个检测软件,那么这个SQL注入式攻击的漏洞究竟是怎么造成的呢?

正如微软的大佬所说的,是由于网站程序的开发人员编码不当造成的,不光是ASP、ASP.NET,也包括JSP、PHP等技术,受影响的也不仅仅是Access和SQL Server数据库,也包括Oracle和MySql等其他关系数据库,和人家微软没什么关系。事实上不光是基于B/S架构的系统或网站存在这样的问题,基于C/S架构的系统也存在这样的问题,只不过由于C/S架构的特点决定了不可能像B/S系统这样影响这么广泛。那么为什么说这个问题是开发人员编码不当造成的呢,下面我们就来具体分析。

首先让我们来看一下以下这四条SQL查询语句
语句1:select * from news where newstype=1
语句2:select * from news where newstype=1;drop table news
语句3:select * from news where newstype='社会新闻'
语句4:select * from news where newstype='社会新闻';drop table news--'
大家都知道语句1的作用是查询news表中newstype字段值等于1的所有记录,其中newstype字段的类型是一种数值型,比如Int、SmaillInt、TinyInt、Float等等;语句2实际上是两条语句,第一条的作用和语句1的作用相同,第二条的作用是删除数据库中的news表。语句3和语句4的功能和语句1、语句2的基本相同,所不同的是语句3、4里的newstype字段是字符型的,比如:char、varchar、nvarchar、text等等

不管是在ASP还是ASP.NET还是JSP或PHP,一般我们都会采用“select * from news where newstype=”+v_newstype的方法来构造语句1,或者“select * from news where newstype='”+v_newstype+"'"来构造语句3,其中v_newstype是一个变量,如果v_newstype的值等于1,构造出来的就是语句1了,如果v_newstype的值等于"社会新闻",构造出来的就是语句3了,但是很不幸的是如果我们忽略了对v_newstype的检查,通过这个方法构造出来的也可能是语句2或者语句4,比如v_newstype的值为“1;drop table news”或“社会新闻';drop table news--”,如果我们的疏忽让别人给利用了,就会给我们造成巨大的损失,SQL注入式攻击正是利用了我们的这个疏忽,所以说SQL注入式攻击的根源来自开发人员的编码不当和你所使用的平台、开发工具以及系统架构等等都没有任何直接的关系。

既然SQL注入式攻击是由于编码人员编码不当造成的,那究竟怎么样的编码才是恰当的编码才不会受到SQL注入攻击呢,下一篇我们将继续介绍。

(0)

相关推荐

  • SQL 注入式攻击的本质

    有文章还说注入式攻击还会有"第三波"攻击潮,到时候会更加难以察觉,连微软的大佬都跑出来澄清说与微软的技术与编码无关,微软为此还专门推出了三个检测软件,那么这个SQL注入式攻击的漏洞究竟是怎么造成的呢? 正如微软的大佬所说的,是由于网站程序的开发人员编码不当造成的,不光是ASP.ASP.NET,也包括JSP.PHP等技术,受影响的也不仅仅是Access和SQL Server数据库,也包括Oracle和MySql等其他关系数据库,和人家微软没什么关系.事实上不光是基于B/S架构的系统或网站

  • 防范SQL注入式攻击

    比如: 如果你的查询语句是select * from admin where username="&user&" and password="&pwd&"" 那么,如果我的用户名是:1 or 1=1 那么,你的查询语句将会变成: select * from admin where username=1 or 1=1 and password="&pwd&"" 这样你的查询语句就通

  • SQL 注入式攻击的终极防范

    在讲这个问题之前让我们来先看一段代码: 复制代码 代码如下: dim sql_injdata,SQL_inj,SQL_Get,SQL_Data,Sql_Post SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" SQL_inj = split(SQL_Injdata,"|") If Request.QueryStr

  • ASP.NET防范SQL注入式攻击的方法

    一.什么是SQL注入式攻击?  SQL注入式攻击就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击.常见的SQL注入式攻击过程类如: ⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码. ⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直

  • asp.net下检测SQL注入式攻击代码

    两个类: (页面数据校验类)PageValidate.cs 基本通用. 代码如下: 复制代码 代码如下: using System; using System.Text; using System.Web; using System.Web.UI.WebControls; using System.Text.RegularExpressions; namespace Common {     /// <summary>     /// 页面数据校验类     /// </summary&

  • PHP中全面阻止SQL注入式攻击分析小结

    一. 引言 PHP是一种力量强大但相当容易学习的服务器端脚本语言,即使是经验不多的程序员也能够使用它来创建复杂的动态的web站点.然而,它在实现因特网服务的秘密和安全方面却常常存在许多困难.在本系列文章中,我们将向读者介绍进行web开发所必需的安全背景以及PHP特定的知识和代码-你可以借以保护你自己的web应用程序的安全性和一致性.首先,我们简单地回顾一下服务器安全问题-展示你如何存取一个共享宿主环境下的私人信息,使开发者脱离开生产服务器,维持最新的软件,提供加密的频道,并且控制对你的系统的存取

  • ASP下的两个防止SQL注入式攻击的Function

    用于防止sql注入攻击的 函数,大家可以直接用了,不过大家光会用不行,要增强安全意识 复制代码 代码如下: '========================== '过滤提交表单中的SQL '========================== function ForSqlForm() dim fqys,errc,i,items dim nothis(18) nothis(0)="net user" nothis(1)="xp_cmdshell" nothis(2

  • asp.net 预防SQL注入攻击之我见

    1. SQL注入攻击的本质:让客户端传递过去的字符串变成SQL语句,而且能够被执行. 2. 每个程序员都必须肩负起防止SQL注入攻击的责任. 说起防止SQL注入攻击,感觉很郁闷,这么多年了大家一直在讨论,也一直在争论,可是到了现在似乎还是没有定论.当不知道注入原理的时候会觉得很神奇,怎么就被注入了呢?会觉得很难预防.但是当知道了注入原理之后预防不就是很简单的事情了吗? 第一次听说SQL注入攻击的时候还是在2004年(好像得知的比较晚),那是还是在写asp呢.在一次写代码的时候,有同事问我,你的这

  • 一文搞懂SQL注入攻击

    目录 1. 前言 2. SQL注入简介 (1)SQL语言 (2)SQL注入 3. SQL注入步骤 (1)发现漏洞 (2)信息收集 (3)攻击Web系统(猜解用户名和密码) (4)获取管理员权限 4. 防范SQL注入 (1)使用参数化查询或存储过程 (2)用户输入检测 (3)SQL语法分析 (4)其他 1. 前言 随着互联网的发展和普及,网络安全问题越来越突出,网络在为用户提供越来越多服务的同时,也要面对各类越来越复杂的恶意攻击.SQL注入(SQL Injection)攻击是其中最普遍的安全隐患之

  • PHP与SQL注入攻击防范小技巧

    下面来谈谈SQL注入攻击是如何实现的,又如何防范. 看这个例子: 复制代码 代码如下: // supposed input $name = "ilia'; DELETE FROM users;"; mysql_query("SELECT * FROM users WHERE name='{$name}'"); 很明显最后数据库执行的命令是: SELECT * FROM users WHERE name=ilia; DELETE FROM users 这就给数据库带来

随机推荐