Asp.Net构建安全网站

news/2024/5/15 15:00:21/文章来源:https://blog.csdn.net/w87875251l/article/details/5934297

摘 要 Asp.Net技术被广泛应用,该技术的安全性越来越受到人们重视。本文介绍黑客对Asp.Net系统的攻击手段以及如何采用Asp.Net技术来避免这些安全漏洞,从而构建安全性的网站系统。

关键字 Asp.Net;安全漏洞;对策

引言

Asp.Net又叫ASP+,他不是ASP的简单升级,而是Microsoft推出的新一代Active Server PagesASP.Net是建立在微软新一代.Net平台架构上,利用普通语言运行时(Common Language Runtime)在服务器后端为用户提供建立强大的企业级Web应用服务的编程框架。广泛的用在B/S架构的系统构建上。该项技术被国内越来越多的网站所采用。

Asp.Net的安全性逐渐被重视起来。原因很简单,一个安全性的漏洞会对一个网站带来毁灭性的灾难,对网站经营者带来非常严重的损失。保证应用程序的安全,避免安全漏洞应当从编写第一行代码的时候开始做起,这是因为随着应用规模的发展,修补安全漏洞所需的代价也随之快速增长。惠普、IBM、休斯飞机公司、TRW以及其他组织的研究人员发现,在构建活动开始之前清除一个错误,那么返工的成本仅仅是“在开发过程的最后阶段(在系统测试期间或者发布之后)做同样事情”的十分之一到百分之一。

掌握常见的安全漏洞对开发一个系统来说非常必要,利用这些知识点可以用非常低的成本构建安全的网站系统。

常见安全漏洞

大多数Web应用程序攻击都要在 HTTP 请求中传递恶意输入项。一般这种攻击并非强迫应用程序执行未经授权的操作,而是要中断应用程序的正常操作。Asp.Net网站系统常见的威胁有代码注入、信息泄漏和身份盗用等。 

2.1代码注入

代码注入是最常见的一种安全漏洞,也是最容易受到攻击的,因为攻击者不需要掌握太多的专业知识就可以对这些漏洞进行攻击。对系统的威胁也非常大。代码注入攻击主要包括SQL 注入、跨站点脚本和缓冲区溢出三种:

SQL注入(SQL injection:根据用户的输入值来动态构造SQL语句,该构造语句很可能就是攻击性的有害SQL语句。即攻击者可发送SQL输入来更改数据库中的预期查询或执行全新的查询。表单身份验证登录页是常见的攻击对象,因为查询用户存储所使用的是用户名和密码。

跨站点脚本(Cross-site Scripting):将恶意脚本作为输入项发送到 Web 应用程序。一旦执行,结果将回应至用户浏览器。

缓冲区溢出(Buffer Overflow):虽然托管代码的类型安全验证可大大降低风险,但应用程序依然存在安全漏洞,特别是调用非托管代码时。缓冲区溢出使攻击者可利用 Web 应用程序的安全上下文在 Web 应用程序进程中执行任意代码。

这里我们要特别搞清楚一个概论,传输加密技术不能用来防御注入攻击。注入攻击可通过使用HTTPHTTPS Secure Socket Layer(SSL) 连接发送请求。收到信息的服务器会认为该信息是合法的输入。

 2.2信息泄漏

信息泄漏主要涉及把一些服务器出错信息完全透露给请求者和隐藏域信息被攻击者使用等。攻击者往往通过探测 Web页来找寻引起异常的各种情况,异常细节信息常以 HTML 的形式返回并显示在浏览器中。这可能会泄漏很有用的信息,如堆栈跟踪。堆栈跟踪包含数据库连接字符串、数据库名、数据库方案信息、SQL 语句以及操作系统和平台版本。攻击者利用这些信息很容易找到攻击的方法。

 2.3身份盗用

恶意用户盗用合法用户的身份访问网站系统,主要包括身份验证Cookie未加密的保存在客户端,系统中用户使用了弱密码等。攻击者采用这些信息以合法的用户身份登录系统。

预防措施

知道了攻击者怎么攻击Asp.Net网站系统,系统在编写第一句代码的时候就需要考虑安全性问题,防止系统漏洞的出现。不给攻击者攻击的机会。

3.1防Sql注入

先来看一下以下语句:

SqlDataAdapter UserQuery = new SqlDataAdapter(  "Select * From Users Where UserName='" + username + "' And Password='" + password, conn);  

验证登录用户名和密码,正常输入没有什么问题。但如果username输入“Or 1=1,密码无论输入什么都可以进入系统。更为可怕的是如果连接数据库的用户权限足够大,还可以通过“;exec  master..xp_cmdshell 命令 –- 执行任意Shell命令。

对于SQL注入的预防,可以通过很多种技术来解决。

第一:对于一定需要动态构造SQL查询的场合,可以通过格式化用户输入的信息来避免SQL注入,即可以替换输入信息中的单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义;可以删除用户输入内容中的所有连字符,防止攻击者构造出类如“Select * From Users Where UserName = 'Dean' -- And Password =''”之类的查询,因为这类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。

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

第三:检查用户输入的合法性,确信输入的内容只包含合法的数据,并限制表单或查询字符串输入的长度。数据检查应当在客户端和服务器端都执行——之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。

第四:限制用来执行查询的数据库帐户权限,不让其执行一些特殊的存储过程和访问不该访问的资源。对查询所返回的记录数量也作一些判断,如程序只要求返回一个记录,但实际返回的记录却超过一行,那就当作出错处理。

3.2不要相信用户输入

在Web应用开发中,开发者最大的失误往往是无条件地信任用户输入,假定用户(即使是恶意用户)按正常情况进行操作并总是受到浏览器的限制,总是通过浏览器和服务器交互,给攻击者打开了方便之门。

<%@ Page Language="C#" ValidateRequest="false" %>

<script runat="server">

protected void Button1_Click(object sender, EventArgs e)

{

 Label1.Text = TextBox1.Text;

}

</script>

<form runat="server">

<asp:Label ID="Label1" runat="server"/>

<asp:TextBox ID="TextBox1" runat="server"/>

<asp:Button ID="Button1" OnClick="Button1_Click" runat="server" Text="提交"/> 

</form>

上面的代码简单,但却有一个非常严重的安全漏洞。比如用户输入“<script>alert(document.cookie)</script>”。堵住该漏洞需要使用ASP.NET请求验证,在页面的@Pages元素里面设置ValidateRequest = "True"来打开请求验证,默认情况下Asp.Net 1.1和2.0该项设置是打开的。ASP.NET请求验证会对送至服务器的数据检测是否含有HTML标记元素和保留字符。这可以防止用户向程序中输入脚本。请求验证会对照一个有潜在威胁的字符串列表进行匹配,如果发现异常它会抛出一个HttpRequestValidationException类型的异常。

有些情况,需要准许用户输入特定HTML代码。这就需要过滤输入数据使它们在输出的时候没有危险,使用HttpUtility.HtmlEncode方法先对输入值进行编码,再替换特定的HTML标记。例如前面的例子,如果准许用户输入<b>标记:

StringBuilder sb = new StringBuilder(HttpUtility.HtmlEncode(TextBox1.Text));      

sb.Replace("&lt;b&gt;", "<b>");

sb.Replace("&lt;/b&gt;", "</b>");

对不安全的URL地址也要使用HttpUtility.UrlEncode进行编码。因此,只有严密地验证用户输入的合法性,才能有效地抵抗黑客的攻击。

3.3让隐藏域更安全

在ASP.NET应用中,几乎所有HTML页面都有__VIEWSTATE隐藏域,它储存着来自页面控件的动态数据、开发者在ViewState中显式保存的数据以及它们数据的密码签字。如图1所示:

 
图1:页面
__VIEWSTATE

由于__VIEWSTATE是BASE 64编码的,所以往往被忽略,但黑客可以方便地解码BASE 64数据,轻松的得到__VIEWSTATE提供的详细资料。通过设置EnableViewStatMAC="True"来加密ViewState数据。启用__VIEWSTATE数据加密功能,可以在页面级别上设置 EnableViewStateMAC,也可以在应用程序级别上设置。然后还需将machineKey验证类型设置成3DES,要求ASP.NET用3DES对称加密算法加密ViewState数据。

3.4加密身份验证

ASP.NET身份验证方式有"Windows"、 "Forms"和"Passport" 。"Forms"可以为用户提供一个输入凭据的登录窗体,即平常见到的输入用户名和密码窗体。出于身份验证的灵活性和系统独立性,多数Web应用程序都采用Form验证方式。

攻击者可以利用 XSS 窃取身份验证的Cookie进行查看或修改。为了增强Cookie 的隐私性和完整性,可以在 <forms> 元素中设置 protection 属性,如下:

<forms protection="All"

指明应用程序同时使用数据验证和加密方法来保护Cookie。第二限制身份验证Cookie 的生命周期,可以减少攻击者使用盗用的 cookie 骗取应用程序访问权限的时间窗口。如下:

<forms timeout="10"

最后在 <forms> 元素中使用唯一的 name 和 path 属性值。如果名称唯一,可在同一服务器驻留多个应用程序时防止出现潜在的问题。例如,如果不使用独特的名称,通过某一应用程序身份验证的用户无需重定向至另一应用程序的登录页即可请求访问该应用程序。

另外在创建身份验证票据时也应该加密票据,有效防止身份被窃取。如下:

System.Web.Security.FormsAuthenticationTicket tk=new System.Web.Security.FormsAuthenticationTicket(1,"Admin",System.DateTime.Now, System.DateTime.Now.AddYears(1),false,"测试用户数据");

String str=System.Web.Security.FormsAuthentication.Encrypt(tk);//加密身份验证票据

3.5防止信息泄漏

攻击者在攻击网站应用系统前,首先需要获取网站应用系统的信息。他们通常向Web应用服务器抛出很多请求,引发Web错误抛出异常,从而获得很多对攻击者有用的信息。

在部署网站的时候,不要把错误信息返回给客户端,可以在Web.config使用<customErrors>元素来配置,一般的错误信息应该被程序错误检测机制返回到客户端。确认已经更改customErrors中的mode属性为"RemoteOnly",指明IIS只对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。代码示例为:

<customErrors mode = "RemoteOnly">

也可以通过设置defaultRedirect指定自定义错误页,如下:

<customErrors mode = "on" defaultRedirect = "Error.htm">

另外一方面,网站的数据库连接字符串经常写在Web.config配置文件里面。但是很多网站往往是直接把连接字符串写入,用户名和密码以明文的方式保存。也就是拿到配置文件就相当于完全掌握了数据库。可以通过System.Security.Cryptography在加密存储。需要用得时候在通过它解密。

结束语

知道系统的安全漏洞在什么地方,在开发系统时编写第一句代码就考虑安全性问题。采用Asp.Net的先进技术,防止漏洞的出现。随着Asp.Net技术的广泛应用,网站的逐步普及。如何采用Asp.Net构建安全性网站必将受到人们的高度重视。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_901887.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全网站从小做起

我是做asp.net网站开发的&#xff0c;QQ群里一个网友的站被挂马了。他说让我写点安全方面的文章。我就介绍下我的经验吧&#xff0c;各位大牛不要拿砖头砸我。。。以下都以ASP.NET开发网站为例。 1、sql注入漏洞。 解决办法&#xff1a;使用存储过程&#xff0c;参数不要用字…

每分钟访问10万+,11种策略教你保持亿级流量网站稳定性!

稳定性在大型网站运行中至关重要&#xff0c;面对每分钟 10 万次的网络访问&#xff0c;稍有不慎就会引起重大故障。今天这篇文章一起讨论下亿级流量网站在稳定性方面的一些做法&#xff0c;希望对您有帮助。本文已发布在公众号和网站。 基础策略 配置化 配置化就是把很多业务流…

微网站、手机站和APP的区别

因为之前写了一篇微网站的文章&#xff0c;有人问我微网站和手机站之间的区别&#xff0c;那我就在这里总体说一下吧。 首先&#xff0c;手机站和微网站都是移动互联网发展下的产物。这样一天24小时&#xff0c;商家就可以多点机会出现在人们的生活中。由于这样的特性&#xf…

微网站、手机站和APP的区别

因为之前写了一篇微网站的文章&#xff0c;有人问我微网站和手机站之间的区别&#xff0c;那我就在这里总体说一下吧。 首先&#xff0c;手机站和微网站都是移动互联网发展下的产物。这样一天24小时&#xff0c;商家就可以多点机会出现在人们的生活中。由于这样的特性&#xf…

ThinkPHP中使用网页模板快速搭建网站

ThinkPHP中使用网页模板快速搭建网站 公司要建一个网站&#xff0c;我刚接触PHP&#xff0c;还不是很熟悉&#xff0c;了解了一下ThinkPHP框架之后&#xff0c;简单的搭建了一个网站&#xff0c;网站内容目前还是写死的&#xff0c;还没有做具体的功能&#xff0c;想先分享一下…

Linux网站服务-搭建一个论坛

概念 前言 UI的转变&#xff1a;B/S架构 名词 HTMLHyperText Markup Language 超级 文本 标记 语言网页使用HTML,PHP,JAVA语言格式书写的文件。主页网页中呈现用户的第一个页面。网站多个网页组合而成的一台网站服务器URLhttp://www.baidu.com/1.htmlUniform Resource Locator…

Linux网站服务-用云服务器搭建论坛网站

前言 互联网的访问依靠IP地址。但IP地址不好记。 所以使用域名服务&#xff08;DNS&#xff0c;好记名&#xff09;&#xff0c;来替代访问的地址。 基本概念 hosts文件&#xff08;老的&#xff09; 一、hosts文件 作用&#xff1a; 实现名字解析&#xff0c;主要为本地主…

新手搭建网站后视频资源在网站上是如何存储的?

前言 本文的起因是一个学员搭建好了一个视频文章&#xff0c;主要做视频的录制&#xff0c;每个视频在10-20M左右&#xff0c;每月产生10G左右的视频素材&#xff0c;想看看怎么存储。 问题解析 作为个人站&#xff0c;没必要花太多钱&#xff0c; 有几种方案可以实施 免费方式…

网站维护业务

您当前的位置&#xff1a;>>>首页-->网站建设-->网站维护业务 网站维护业务 发布日期&#xff1a;2007年10月1日 来源&#xff1a;中亚网络服务部 网站维护   互联网技术的瞬息万变&#xff0c;决定了网站必须时时更新。一个好的网站&#xff0c;是…

网站部署之--- 起始页错误

An error occurred while starting the application. 1在IIS中找到应用程序池 2点进去找到对应的网站 3有点有个高级设置 4找到加载用户配置文件 设置成TRUE 转载于:https://www.cnblogs.com/mamiyiya777/p/9364752.html

3GPP网站查找协议的使用方法

1.首先打开3GPP网页&#xff0c;选择Specifications>>Specification Numbering 2.可以看到种通信技术的发行版本的序号&#xff0c;4G是36&#xff0c;5G在38里面 3.点开你要查找的协议版本号&#xff0c;就能看到协议下的各个分支的具体内容&#xff0c;有关物理信道的在…

Day04 使用PolarDB和ECS搭建门户网站

一.准备工作 本场景将提供一台基础环境为CentOS的ECS&#xff08;云服务器&#xff09;实例和已经创建好的PolarDB数据库实例。我们将会在这台服务器上安装WordPress&#xff0c;帮助您快速搭建自己的云上博客。 参考&#xff1a;https://developer.aliyun.com/article/773856…

如何才能做到网站高并发访问

文章架构简图&#xff1a; 高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”。 如果把来访用户比作来犯的"敌人"&#xff0c;我们一定要把他们挡在800里地以外&#xff0c;即不能让他们的请求一下打到我们的指挥部&#xff08;指挥部就是数据…

SVN利用钩子中的post-commit同步版本库到网站目录

这些钩子会在不同的点触发事务 # start-commit 提交前触发事务 # pre-commit 提交完成前触发事务 # post-commit 提交完成时触发事务 # pre-revprop-change 版本属性修改前触发事务 # post-revprop-change 版本属性修改后触发事务 svn同步版本库到网站目录就是利用p…

制作一个餐饮网站的头部

样式如下&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html> <head><title>餐饮网站header部分</title><meta charset"UTF-8"><meta http-equiv"x-ua-compatible" content"IEedge"><me…

JSON.parseObject(String str)和JSON.toJSONString()的区别?

在刚刚毕业步入之后的工作过程中&#xff0c;看到公司的代码频繁的使用JSON&#xff0c;在学校的时候基本只有了解&#xff0c;也没有很多的去使用过&#xff0c;在看了一段时间代码后&#xff0c;总结了JSON中最常使用的几个方法&#xff01; 一、JSON格式 什么是JSON? JSON …

介绍一个GWT的网站 和 decode javascript.encode using java +FCKEditor 在 jsp中的使用说明

http://www.gwtpowered.org/ 有超多的GWT组建&#xff0c;比如&#xff1a;超好的日期输入[插图][演示]可排序的table&#xff1a;[插图][演示]还有很多其他的&#xff0c;大家自己去寻找需要的组件。自己再修改&#xff0c;扩展&#xff0c;汉化变成自己的超级GWT组件吧&#…

利用压缩网页来提升网站浏览速度 [摘]

网站的访问速度是由多个因素所共同决定的&#xff0c;这些因素例如应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是应用程序本身的响应速度&#xff0c;因此当你为网站性能所苦恼时&#xff0c;你第一个需要着手进行处理的…

基于ssm的校园门户网站源码+开题报告+需求分析+mysql数据库+前端html文件

下载地址&#xff1a;https://download.csdn.net/download/biyesheji250/28740242 项目介绍: 基于ssm的校园门户网站源码开题报告需求分析mysql数据库前端html文件 系统说明: 南京晓庄学院本科毕业论文&#xff08;设计&#xff09;开题报告 所属系(院)&#xff1a;信息工程…

一、一步步构建高并发分布式网站架构(1.1)

1.1 分什么布 我尽量不把这类文章写成软件工程专业的死板教学用书。但是每章第一节的确都是构建一个健全系统不可或缺的概念知识。 其实在前言中&#xff0c;我就已经叨叙了为什么要使用分布式架构。简而言之&#xff0c;就是要采用“分而治之”的思想&#xff0c;将网站这个…