使用LINQ解除SQL注入安全问题

在开发人员承受越来越多的安全责任之时,许多开发人员了解到的第一个Web 应用安全漏洞,是一个被称为“SQL注入”的极危险的命令注入形式 。命令注入的原始的形式本是指这样一种漏洞:攻击者通过提供一个正常使用者 意料之外的输入,改变你的Web应用程序的运行方式,从而允许攻击者运行服务 器上的非授权的命令。无疑,SQL注入式攻击是很常见的、被广泛使用的攻击形 式。幸运的是,一旦我们理解了这个问题,就可以很容易地防止SQL注入式攻击 。更妙的是,现在微软的数据访问技术向.net开发人员提供了彻底地清除SQL注 入漏洞的机会,当然前提是能够正确使用。这种技术称为“语言级集成查 询”(Language Integrated Query (LINQ)),并随Visual Studio "Orcas" 和 .NET Framework 3.5一起发布。本文将讨论如何通过 LINQ强化Web应用程序的数据访问代码,从而解决通过SQL注入进行攻击的问题。

SQL注入是一种Web应用程序的安全漏洞,通过它攻击者可以将恶意数据 提交给应用程序,欺骗应用程序在服务器上执行恶意的SQL命令。理论上讲,这 种攻击是容易预防的,不过由于其允许攻击者直接运行针对用户关键数据的数据库命令,从而成为一种常见的、危害性大的攻击形式。在非常极端的情况下,攻 击者不但能够自由地控制用户的数据,还可以删除数据表和数据库,甚至控制整 个数据库服务器。

如果这种攻击容易预防,那么为什么还如此危险呢? 首先,由于众所周知的经济上的原因,你的应用数据库是非常诱人的,可以引起 攻击者的极大注意。如果SQL注入漏洞在Web应用程序中可能存在着,那么对于一 个攻击者来说是很容易检测到的,然后就可以利用它。很显然,即使SQL注入错 误并不是开发人员最经常犯的错误,它们也很容易被发现和利用。

对SQL 注入的剖析

这里我们给出一个SQL注入的例子来说明两个问题,一是SQL 注入这种错误是很容易犯的,二是只要进行严格的程序设计,这种错误是很容易 预防的。

这个示例用的Web应用程序包含一个名为SQLInjection.aspx简 单的客户搜索页面,这个页面易于受到SQL注入攻击。此页面包含一个 CompanyName的输入服务器控件,还有一个数据表格控件,用于显示从微软的示 例数据库Northwind的搜索结果(这个数据库可从SQL Server 2005中找到)。在 搜索期间执行的这个查询包含一个应用程序设计中很普通的错误:它动态地从用 户提供的输入中生成查询。这是Web应用程序数据访问中的一个主要的错误,因 为这样实际上潜在地相信了用户输入,并直接将其发送给你的服务器。在从 “搜索”的单击事件启动时,这个查询看起来是这个样子:

protected void btnSearch_Click(object sender, EventArgs e)
{   String cmd = "SELECT [CustomerID], [CompanyName], [ContactName]
FROM [Customers] WHERE CompanyName ='" + txtCompanyName.Text
+ "'";
SqlDataSource1.SelectCommand = cmd;
GridView1.Visible = true;
}

在这种情况下,如果一个用户输入“Ernst Handel”作为公司名,并单击“搜索”按钮,作为响应屏幕会 向用户显示那个公司的记录,这正是我们所期望的理想情况。不过一个攻击者可 以轻易地操纵这个动态查询。例如,攻击者通过插入一个UNION子句,并用一个 注释符号终止这个语句的剩余部分。换句话说,攻击者不是输入“Ernst Handel”,而是输入如下的内容:

Ernst Handel' UNION SELECT CustomerID, ShipName, ShipAddress
FROM ORDERS--

其结果是这个SQL语句在服务器端执行,由于添加了这个恶意的请求 。它会将这个动态的SQL查询转换为下面的样子:

SELECT [CustomerID], [CompanyName],
[ContactName]
FROM [Customers]
WHERE CompanyName ='Ernst Handel'
UNION SELECT CustomerID, ShipName,
ShipAddress
FROM ORDERS-- '

这是一个相当合法的SQL语句,它可以在应用程序数据库上执行 ,返回order表中所有的客户,这些客户通过应用程序已经处理了定单。

时间: 2024-09-10 07:35:30

使用LINQ解除SQL注入安全问题的相关文章

PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)_php技巧

浅谈Php安全和防Sql注入,防止Xss攻击,防盗链,防CSRF 前言: 首先,笔者不是web安全的专家,所以这不是web安全方面专家级文章,而是学习笔记.细心总结文章,里面有些是我们phper不易发现或者说不重视的东西.所以笔者写下来方便以后查阅.在大公司肯定有专门的web安全测试员,安全方面不是phper考虑的范围.但是作为一个phper对于安全知识是:"知道有这么一回事,编程时自然有所注意". 目录: 1.php一些安全配置(1)关闭php提示错误功能(2)关闭一些"坏

PHP-Nuke存在远程SQL注入漏洞 后台数据库堪忧

描述: PHP-Nuke是一个广为流行的网站创建和管理工具,它可以使用很多数据库软件作为后端,比如MySQL.PostgreSQL.mSQL.Interbase.Sybase等. PHP-Nuke的Your_Account模块实现上存在输入验证漏洞,远程攻击者可能利用此漏洞对服务器程序执行SQL注入攻击. PHP-Nuke的Your_Account模块没有对username参数做充分的过滤检查,远程攻击者可能在此参数中插入恶意的SQL命令,从而非授权获取对后台数据库的操作. 受影响系统: PHP

LINQ to SQL的执行可能无法复用查询计划

查询计划 Sql Server在执行一条查询语句之前都对对它进行"编译 "并生成"查询计划",查询计划告诉Sql Server的查询引擎 应该用什么方式进行工作.Sql Server会根据当前它可以收集到的各种信息(例 如内存大小,索引的统计等等)把一条查询语句编译成它认为"最优 "的查询计划.很显然,得到这样一个查询计划需要消耗CPU资源,而大部 分的查询语句每次经过编译所得到的查询计划往往是相同的,因此除非指定了 RECOMPILE选项,Sq

LINQ TO SQL中SQLMetal和Mapping文件缺陷

Mapping文件的缺陷 开发LINQ TO SQL,我个人倾向选择外部配置文件的方式进行开发,灵活,(这个也是.Net平台下的建议选择,如果你了解WCF,会更有体会). 利用SQLMeatal开发Mapping文件的时候,在修改Association节的DeleteRule属性的时候,感觉是LING TO SQL的缺陷. MSND: NET Framework 类库 AssociationAttribute..::.DeleteRule 属性 更新:2007 年 11 月 获取或设置关联的删除

PHP代码网站防范SQL注入漏洞攻击的建议

所有的网站管理员都会关心网站的安全问题.说到安全就不得不说到SQL注入攻击(SQL Injection).黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入 功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉.做为网络开发者的你对这种黑客行为恨之入骨,当然也有必要了解一下SQL注入这种功能方式的原理并 学会如何通过代码来保护自己的网站数据库.今天就通过PHP和MySQL数据库为例,分享一下我所了解的SQL注入攻击和一些简单的

c#.net全站防止SQL注入类的代码_实用技巧

复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Web; /// <summary>/// 防SQL注入检查器/// </summary>public class SqlChecker{    //当前请求对象    private HttpRequest request;    //当前响应对象    private HttpResponse respo

绿盟科技网络安全威胁周报2017.20 关注Joomla!3.7.0 SQL注入漏洞CVE-2017-8917

绿盟科技发布了本周安全通告,周报编号NSFOCUS-17-20,绿盟科技漏洞库本周新增36条,其中高危3条.本次周报建议大家关注 Joomla!3.7.0 SQL注入漏洞 .目前厂商已经发布了升级补丁以修复这个安全问题,请到用户及时到厂商主页下载升级补丁,修复此漏洞. 焦点漏洞 Joomla!3.7.0 SQL注入漏洞 NSFOCUS ID 36720 CVE ID CVE-2017-8917 受影响版本 Joomla! CMS versions 3.7.0 漏洞点评 Joomla是一套世界流行

LuManager高危SQL注入0day分析

2015年9月7日阿里云盾态势感知系统捕获到LuManager系统的0day一枚,经证实,该漏洞一旦被黑客利用可直接以最高权限登陆后台,上传webshell, 控制系统数据库.操作虚拟主机,后果不堪设想. 作者:云盾攻防对抗团队 - 千霄 LuManager是一种基于FreeBSD.Zijidelu.Debian.Centos.Ubuntu等Linux/Unix系统的网站服务器管理软件,目前有大量国内用户使用.云盾攻防对抗团队捕获0day后第一时间通知厂商,厂商迅速响应,于8日上午发布安全更新并

浅谈SQL注入风险 - 一个Login拿下Server(转)

前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查.   可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:"老师你这SQL有注入,随便都能登录了.不能这么写!"   "呦?小伙子这都知道了?那你说说看 啥是注入?注入只能拿来绕过登录么?" 好吧,竟然在老子面前装逼,看来不给你点儿颜色看看,你还真是不明白天有多高..   于是乎..哈哈.大清早的,轻松在班里装了一手好逼..   呵呵.不说了,下面我把