当前位置: 首页 > 编程日记 > 正文

ASP.NET中如何防范SQL注入式攻击

1将sql中使用的一些特殊符号,如' -- /* ; %等用Replace()过滤;
2限制文本框输入字符的长度;
3检查用户输入的合法性;客户端与服务器端都要执行,可以使用正则。
4使用带参数的SQL语句形式。

ASP.NET中如何防范SQL注入式攻击


一、什么是SQL注入式攻击?

所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如:

⑴ 某个ASP.NET Web应用有一个登录页面,这个登录页面控制着用户是否有权访问应用,它要求用户输入一个名称和密码。

⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令,或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子:

System.Text.StringBuilder query = new System.Text.StringBuilder(
  "SELECT * from Users WHERE login = '")
  .Append(txtLogin.Text).Append("' AND password='")
  .Append(txtPassword.Text).Append("'");

⑶ 攻击者在用户名字和密码输入框中输入"'或'1'='1"之类的内容。

⑷ 用户输入的内容提交给服务器之后,服务器运行上面的ASP.NET代码构造出查询用户的SQL命令,但由于攻击者输入的内容非常特殊,所以最后得到的SQL命令变成:SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。

⑸ 服务器执行查询或存储过程,将用户输入的身份信息和服务器中保存的身份信息进行对比。

⑹ 由于SQL命令实际上已被注入式攻击修改,已经不能真正验证用户身份,所以系统会错误地授权给攻击者。

如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询,他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能,欺骗系统授予访问权限。

系统环境不同,攻击者可能造成的损害也不同,这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员或其他比较高级的权限,攻击者就可能对数据库的表执行各种他想要做的操作,包括添加、删除或更新数据,甚至可能直接删除表。

二、如何防范?

好在要防止ASP.NET应用被SQL注入式攻击闯入并不是一件特别困难的事情,只要在利用表单输入的内容构造SQL命令之前,把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。

⑴ 对于动态构造SQL查询的场合,可以使用下面的技术:

第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,“SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'”显然会得到与“SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'”不同的结果。

第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如“SELECT * from Users WHERE login = 'mas' -- AND password =''”之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。

第三:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERT、UPDATE或DELETE命令。

⑵ 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。

⑶ 限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。

⑷ 检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。

在客户端,攻击者完全有可能获得网页的源代码,修改验证合法性的脚本(或者直接删除脚本),然后将非法内容通过修改后的表单提交给服务器。因此,要保证验证操作确实已经执行,唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象,例如RegularExpressionValidator,它们能够自动生成验证用的客户端脚本,当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象,你可以通过CustomValidator自己创建一个。

⑸ 将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了“消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了攻击者注入SQL命令。System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile,非常适合于对输入数据进行消毒处理。

⑹ 检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。

相关文章:

iOS下的类似Android的toast提示

一般人会说,就是用那个MBProgressHUD不就行了吗? 的确是,MBProgressHUD能为我们做了好多loading指示器,但是toast不一样,它是在屏幕某个地方出现一行小提示,例如网络状态,出现的时候不会妨碍用户…

配置Activiti Explorer使用MYSQL

http://blog.csdn.net/lxxxzzl/article/details/39583977

初学者SQL语句介绍

初学者SQL语句介绍 1.用 Select 子句检索记录 Select 子句是每一个检索数据的查询核心。它告诉数据库引擎返回什么字段。 Select 子句的常见形式是: Select * 该子句的意思是“返回在所指定的记录源中能找到的所有字段”。这种命令形式很方便&#xff…

转型AI成功几率有几分?太真实了......

技术转型,这两年一直是程序员圈子里的热门话题。对于大部分基层程序员来说,基础岗位上薪资的涨幅很难跟上年龄的增长。而近些年,AI技术发展势头迅猛,优秀人才短缺。在这种情况下,无疑是谁先转型成功,谁就占…

如何使用聚簇索引

2019独角兽企业重金招聘Python工程师标准>>> 聚簇索引是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序。由于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎 总是比使用非聚簇索引快。每张表只能建一个聚簇索引&#…

C语言实现汉诺塔问题

代码如下&#xff1a; #include <stdio.h> #include <stdlib.h> void move(int n,char x,char y,char z) {if (n1) {printf("%c--->%c\n",x,z);}else {move(n-1,x,z,y);printf("%c--->%c\n",x,z);move(n-1,y,x,z);} } int main() {int n…

将Session值储存于SQL Server中

一般情况下&#xff0c;我们喜欢使用Session储存我们的变量。Asp.Net提供了下面一些方法储存Session的值&#xff1a; InProc State Server SQL Server “InProc”表示我们使用传统ASP一样的方法储存Session的值&#xff0c;而且“State Server”则表示使用另外一台主机来…

系统定时关机的方法

曾经在网上搜索过关于windows XP定时关机的方法&#xff0c;很多人都说下载一个定时关机的软件。其实根本不需要这么麻烦&#xff0c;windowsXP本身就自带有定时关机这个功能&#xff0c;而且有两种方法。方法一&#xff1a;使用at命令(1)"开始"->"运行"…

让线上学习不打折扣,作业帮如何用技术促进课堂高频互动场?

“在大班直播课上&#xff0c;可能有数千甚至上万学员同时上课&#xff0c;但是他们彼此看不见也听不见&#xff0c;是千千万万个‘孤独的个体’&#xff0c;而‘小组直播间’却可以让他们随时随刻感觉到自己置身于一个温暖的集体之中。” “小组直播间”是曹越一直主张在大班…

在python中调用js或者nodejs要使用PyExecJs第三方包。

在python中调用js或者nodejs要使用PyExecJs第三方包。 使用时&#xff1a;import execjs这是没有用到nodejs的情况&#xff1b;如果用到nodejs&#xff0c;这种写法会报“Cannot find module xxx”的错误。 如果要用nodejs&#xff0c;要在环境变量中指定node_modules的路径。转…

超越Google,快手落地业界首个万亿参数推荐精排模型

整理 | 兆雨 责编 | 阿司匹林 出品 | AI科技大本营 精准的推荐系统模型是很多互联网产品的核心竞争力&#xff0c;个性化推荐系统旨在根据用户的行为数据提供“定制化”的产品体验。国民级短视频App快手&#xff0c;每天为数亿用户推荐百亿的视频&#xff0c;遇到的挑战之一是推…

Cache总义Cache用法之页面声明

Cache总义Cache用法之页面声明 <% outputCacheDuration"#ofseconds"Location"Any|Client|Downstream|Server|None"VaryByControl"ControlName"VaryByCustom"browser|customstring"VaryByHeader"headers"VaryByParam&quo…

InfBox V7.0 企业绩效助手客户端使用简介

1&#xff0c;点击此处下载InfBox V7.0 客户端软件。2&#xff0c;把下载下来的InfBox.rar压缩包&#xff0c;加压缩到E盘&#xff0c;解压后的目录如下&#xff1a;3&#xff0c;双击运行infbox.exe文件&#xff0c;点击登录窗口的左下角配置图标&#xff0c;设置服务器IP地址…

iOS:转载:UIControl的使用

主要功能&#xff1a; UIContol&#xff08;控件是所有控件的基类 如&#xff1a;&#xff08;UIButton&#xff09;按钮主要用于与用户交互&#xff0c;通常情况下我们不会直接使用UIControl&#xff0c;而是子类化它。常用属性&#xff1a; BOOL enabled 空间默认是启用的&am…

fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出

格式化输入输出 1. fprintf&#xff08;格式化输出数据至文件&#xff09; 相关函数 printf&#xff0c;fscanf&#xff0c;vfprintf 表头文件 #include<stdio.h> 定义函数 int fprintf(FILE * stream, const char * format,.......); 函数说明 fprint…

毕业后五年之内将决定你的一生

大家千万不要错过这篇文章&#xff0c;毕业2年多了&#xff0c;能看到这篇文章也是一种幸运&#xff0c;真的受益匪浅&#xff0c;对我有很大启迪&#xff0c;这篇文章将会改变我的一生&#xff0c;真的太好了&#xff0c;希望与有缘人分享&#xff0c;也希望对有缘人有所帮助&…

达沃斯议程对话会:张亚勤解读人工智能发展 3R 原则

在国内外新冠疫情持续的特殊形势下&#xff0c;2021年世界经济论坛“达沃斯议程”对话会于1月25日至29日以线上形式举行。此次论坛上&#xff0c;全球70多个国家和地区的1500多位政商界和社会组织领导人围绕“把握关键之年&#xff0c;重建各方信任”这一主题&#xff0c;就如何…

The note of Developing Innovative Ideas for New Companies Course

This course is free on the Coursera Site&#xff0c;But it only has English version Threee pieces of the course overview&#xff1a; 1、opportunity analysis Canvas 2、business model Canvas&#xff1a;执行与验证 3、business plan 1.3&#xff1a; By first und…

C语言的一个关键字——static

C语言的一个关键字——static Static在C语言里面有两个作用&#xff0c;第一个是修饰变量&#xff0c;第二个是修饰函数。 1、Static修饰变量 按照作用范围的不同&#xff0c;变量分为局部变量和全局变量。如果用static修饰变量&#xff0c;不论这个变量是全局的还是局部的都是…

Android常用URI收藏

http://www.android-study.com/jichuzhishi/338.html转载于:https://www.cnblogs.com/hyzhou/p/3286550.html

Teradata推出Vantage on Azure,可实现自助配置、快速部署,提供安全、可扩展的高性能分析

云数据分析平台公司Teradata今日宣布推出全新Teradata Vantage on Azure 服务&#xff0c;帮助客户在部署其Teradata Vantage 环境时&#xff0c;将Vantage的强大功能与Microsoft Azure 基础架构的敏捷性和灵活性更好地结合&#xff0c;以更轻松地成为具有一流分析能力的数据驱…

布巴内斯瓦尔成智慧城市 印小城何以“智慧”

在2月14日举行的布巴内斯瓦尔市“智慧生活日”活动中&#xff0c;学生们集体练习瑜伽。 核心阅读 印度打造百座“智慧城市”计划日前取得阶段性成果&#xff0c;综合评分领先的20座城市成为今后5年印度城市发展首批资助对象。 位于印度东部奥里萨邦的布巴内斯瓦尔市在本次评选中…

摘自一个读者读后rework的感受

2019独角兽企业重金招聘Python工程师标准>>> 读了《Rework》这本书好多遍&#xff0c;每次读都有不同的感想。但从来没有把这些感想记录下来&#xff0c;今天把《Rework》书中的一些章节做一些摘录&#xff0c;并把我的一些感想总结出来。供大家参考。这是一本平生以…

web.config文件详解

(一).Web.Config是以XML文件规范存储,配置文件分为以下格式 1.配置节处理程序声明 特点&#xff1a; 位于配置文件的顶部&#xff0c;包含在<configSections>标志中。 2.特定应用程序配置 特点: 位于<appSetting>中。 可以定义应用程序的全局常量…

Go 语言这一年

作者 | 白明 责编 | 张文来源 | 本文转载自 TonyBai题图 | 自视觉中国2020&#xff0c;这一六十年一遇的庚子年的确“名不虚传”。在这一年发生了很多事&#xff0c;而最受瞩目的事情莫过于新冠疫情的全球大流行。疫情给全球的经济带来了近似毁灭性的打击&#xff0c;给人们的…

JMeter入门(1):JMeter总体介绍及组件介绍

一、JMeter概述JMeter就是一个测试工具&#xff0c;相比于LoadRunner等测试工具&#xff0c;此工具免费&#xff0c;且比较好用&#xff0c;但是前提当然是安装Java环境&#xff1b;JMeter可以做(1)压力测试及性能测试&#xff1b;(2)数据库测试&#xff1b;(3)Java程序的测试&…

在Linux平台上如何使用接静态库和共享库

1、Linux函数库介绍 函数库可以看做是事先编写的函数集合&#xff0c;它可以与主函数分离&#xff0c;从而增加程序开发的复用性。Linux中函数库可以有3种使用的形式&#xff1a;静态、共享和动态。 1) 静态库的代码在编译时就已连接到开发人员开发的应用程序中&#x…

GSA+麦肯锡开年首场线上活动:汽车半导体要变天?

作者 | 白露 . L来源 | GSA全球半导体联盟首场GSA主办的行业活动将于2月初拉开序幕。本次线上研讨会聚焦汽车行业&#xff0c;将于北京时间2021年2月12日举行&#xff0c;是GSA与麦肯锡公司&#xff08;McKinsey&#xff06;Company&#xff09;合作的自动驾驶时代的半导体项目…

poj 1185(状压dp)

题目链接&#xff1a;http://poj.org/problem?id1185 思路&#xff1a;状态压缩经典题目&#xff0c;dp[i][j][k]表示第i行状态为j,(i-1)行状态为k时最多可以放置的士兵个数&#xff0c;于是我们可以得到递推方程&#xff1a;dp[i][j][k]max(dp[i][j][k],dp[i-1][k][l]num[j])…

存储能否导致ESXi网络性能问题?

管理员应该如何判断存储是否能够引起ESXi服务器当中的网络性能问题呢? 虚拟机非常依赖存储资源&#xff0c;因此如果存储产生的延迟过大&#xff0c;那么会在一定程度上导致虚拟机糟糕的性能表现。幸运的是&#xff0c;虚拟化管理可以使用多种可用工具和策略来诊断潜在的存储问…