ASP.NET安全性(共9篇)
ASP.NET安全性 篇1
1、引言
ASP.Net技术是一种用于创建Web应用程序的编程模型。运行时可以和.Net Framework类库集一起配合用于创建动态Web页。大多数ASP.NET Web应用程序都涉及数据访问。许多应用程序都会收集数据并将其存储在数据库或文件中, 要存储的数据通常基于来自用户的信息。由于原始数据可能来自不受信任的来源, 信息是以持久格式存储的, 并且希望确保未经授权的用户不能直接访问数据源, 因而需要特别注意与数据访问有关的安全问题。本文主要探讨从连接字符串、使用集成安全性连接到SQL Server/Microsoft Access数据库、XML文件等操作, 来提高Web应用程序中的数据访问的安全性。
2、连接字符串
在数据库的各种应用程序开发中, 连接数据库是数据库应用程序中最重要的一步。由于连接字符串可能包含敏感数据, 如数据库名、登录名、密码等, 因此连接字符串应当遵循以下若干准则:
(1) 将连接字符串存储在Web.config文件中
要避免通过声明SqlDataSource控件或其他数据源控件的属性的方式来设置连接字符串, 而应当将连接字符串存储在站点的Web.config文件中。这种做法有两个有点: (1) 数据源控件可以从配置文件中引用连接字符串的名称, 而不是包括连接字符串作为控件属性; (2) 由于连接字符串的管理集中进行, 在连接字符串信息更改时无需重新访问各页, 因此更易于管理站点。
(2) 加密连接字符串
使用ASP.NET IIS注册工具 (Aspnet_regiis.exe) 可以加密连接字符串。Aspnet_regiis.exe工具位于%systemroot%Microsoft.NETFramework版本号的文件夹中。在Windows命令行, 使用以下选项运行:
-pe选项, 向其传递字符串"connectionStrings"以加密connectionStrings元素。
-app选项, 向其传递应用程序的名称。
下面的代码示例演示如何为名为SampleApplication的应用程序加密Web.config文件的connectionStrings节。
当该命令完成时, 可以查看Web.config文件的内容。connectionStrings配置节将包含加密信息而不是明文形式的连接字符串, 这样就保证在使用数据源控件时连接字符串的安全。
(3) 不要以纯文本形式存储连接字符串
为了确保与数据库服务器之间的连接的安全性, 应当使用受保护的配置来对配置文件中的连接字符串信息进行加密。
ASP.NET应用程序中存储敏感信息的主要位置之一是Web.config文件。为了帮助保护配置文件中的信息, ASP.NET提供了一项称为“受保护配置”的功能, 可以使用受保护配置来加密Web应用程序配置文件 (如Web.config文件) 中的敏感信息 (包括用户名和密码、数据库连接字符串和加密密钥) 。对配置信息进行加密后, 即使攻击者获取了对配置文件的访问, 也可以使攻击者难以获取对敏感信息的访问, 从而改进应用程序的安全性。
例如, 未加密的配置文件中可能包含一个指定用于连接到数据库的连接字符串的节, 如下面的示例所示:
可以通过使用ProtectedConfigurationProvider类对Web.config文件的内容进行加密和解密, 使用受保护配置对连接字符串值进行加密的配置文件不以明文形式显示连接字符串, 而是以加密形式存储它们, 在对页进行请求时, .NET Framework对连接字符串信息进行解密, 并使其可供应用程序使用。
3、连接数据库
连接Sql Server数据库应该遵循以下安全性原则:
(1) 使用集成安全性连接到SQL Server
使用集成安全性, 而不要使用显式的用户名和密码连接到SQL Server实例, 这有助于避免危及连接字符串的安全以及泄漏用户ID和密码。因此要确保运行ASP.NET的进程的标识是默认进程帐户或受限用户帐户。如果不同的网站连接到不同的SQL Server数据库, 那么使用集成安全性可能并不实际。例如, 在Web宿主网站中, 通常会为每个客户分配一个不同的SQL Server数据库, 但所有用户均以匿名用户的身份使用Web服务器。在这种情况需要使用显式凭据来连接到SQL Server实例。
(2) SQL Server数据库权限
为用来连接到应用程序所使用的SQL Server数据库的用户ID分配最低特权。
(3) 限制SQL操作
数据绑定控件可以支持各种数据操作, 包括在数据表中选择、插入、删除和更新记录等。将数据控件配置为仅执行页上或应用程序中所需的最低功能。例如, 如果控件不应该允许用户删除数据, 则不要在数据源控件中包括删除查询, 也不要在控件中启用删除功能。
(4) SQL Server Express Edition
在将某个进程附加到SQL Server Express Edition数据库 (.mdf文件) 时, 该进程必须具备管理权限。通常情况下, 这种做法使得SQL Server Express Edition数据库不适合用在成品网站上, 因为ASP.NET进程不会 (也不应当) 使用管理特权运行。因此, SQL Server Express Edition数据库只能用于下面的情况中:
(1) .在开发Web应用程序时用作测试数据库。在准备好部署应用程序时, 可以将数据库从SQL Server Express Edition转移到SQL Server的成品实例中。
(2) .如果正在运行可以使用模拟功能的网站并且可以控制所模拟的用户的特权, 那么可以使用该版本。实际上, 此策略仅当应用程序运行于局域网 (而非公共网站) 上时才可行。
(3) .将.mdf文件存储在站点的App_Data文件夹中, 因为该文件夹的内容不会返回给直接的HTTP请求。还应在IIS中将.mdf扩展名映射到ASP.NET, 并在站点的Web.config文件中使用以下元素将该扩展名映射到ASP.NET中的HttpForbiddenHandler处理程序:
(5) Microsoft Access数据库
Microsoft Access数据库 (.mdb文件) 所包括的安全功能比SQL Server数据库少。对于商务网站, 尽量不要使用Access数据库。但是, 如果确实需要在Web应用程序中使用.mdb文件, 请遵循以下准则:
(1) .将.mdb文件存储在站点的App_Data文件夹中, 因为该文件夹的内容不会返回给直接的HTTP请求。还应在IIS中将.mdb扩展名映射到ASP.NET, 并在站点的Web.config文件中使用以下元素将该扩展名映射到ASP.NET中的HttpForbiddenHandler处理程序:
(2) .为读写.mdb文件的用户帐户添加适当的权限。如果网站支持匿名访问, 这通常是本地ASPNET用户帐户或NETWORK SERVICE帐户。由于Access必须创建一个.ldb文件以支持锁定, 因此用户帐户必须对包含.mdb文件的文件夹具备写权限。
(3) .如果数据库采用密码保护, 那么不要使用AccessDataSource控件来建立与数据库的连接, 因为AccessDataSource控件不支持凭据的传递。在这种情况下, 应使用ODBC提供程序和SqlDataSource控件, 并在连接字符串中传递凭据。
4、XML文件
如果将数据存储在XML文件中, 则应将XML文件放在网站的App_Data文件夹中, 因为该文件夹的内容不会返回给直接的HTTP请求。并且需要防止恶意用户输入, 如果应用程序要接受用户输入, 则需要确保输入中不包含可能危及应用程序的恶意内容。恶意用户输入可用于发动下面两类攻击:
·脚本注入攻击
脚本注入攻击尝试向应用程序发送可执行的脚本, 意欲使其他用户运行该脚本。典型的脚本插入攻击是向数据库中存储脚本的页发送脚本, 以使查看数据的其他用户在不经意间运行该代码。
·SQL注入攻击
SQL注入攻击尝试创建SQL命令以取代或扩充应用程序内置的命令, 从而危及数据库 (可能还有运行数据库的计算机) 的安全。
对于所有用户输入, 请遵循以下准则: (1) 尽可能使用验证控件, 以限定用户输入可接受的值。 (2) 在运行服务器代码之前, 请始终确保IsValid属性的值为true。如果值为false, 则意味着一个或多个验证控件未通过验证检查。 (3) 应始终执行服务器端验证 (即使浏览器也执行客户端验证) 以防止用户跳过客户端验证环节。对于CustomValidator控件尤其应如此;不要使用“仅客户端验证”逻辑。 (4) 始终在应用程序的业务层再次验证用户输入。不要依赖于调用进程来提供安全的数据。例如, 如果正在使用ObjectDataSource控件, 则可向执行数据更新的对象添加冗余验证和编码。
若要避免脚本注入攻击, 请遵循以下准则: (1) 采用HtmlEncode方法对用户输入进行编码, 该方法可将HTML转换为文本表示形式 (例如, 将<b>转换为<b>) , 这有助于防止在浏览器中执行标记。 (2) 在使用参数对象将用户输入传递给查询时, 可以为数据源控件的预查询事件添加处理程序并在这些事件中进行编码。例如, 如果处理SqlDataSource控件的Inserting事件, 可以在该事件中, 在执行查询之前对参数值进行编码。 (3) 若正在使用带绑定字段的GridView控件, 则可将BoundField对象的HtmlEncode属性设置为true。这会使GridView控件在行处于编辑模式下时对用户输入进行编码。 (4) 对于可以进入编辑模式的控件, 就使用模板。例如, GridView、DetailsView、FormView、DataList和Login控件可以显示可编辑的文本框。但是, 除GridView控件之外, 这些控件不会自动验证用户输入或对用户输入进行HTML编码。因此, 要为这些控件创建模板, 在模板中包括输入控件 (例如TextBox控件) 并添加验证控件。此外, 在提取控件的值时, 应对其进行编码。
若要避免SQL注入攻击, 请遵循以下准则: (1) 不要通过将字符串 (尤其是那些包括了用户输入的字符串) 串联在一起来创建SQL命令, 而应当使用参数化查询或存储过程。 (2) 如果要创建参数化查询, 则可使用参数对象来建立参数的值。
5、缓存与加密视图状态数据
在启用了客户端模拟并根据客户端标识检索数据源中的结果时, 应避免在Cache对象中存储敏感信息。如果启用了缓存, 则单个用户的缓存数据会被所有用户看到, 并且敏感信息可能公开给有害源。如果identity配置元素的impersonate特性设置为true且对Web服务器上的应用程序禁用匿名标识, 则说明启用了客户端模拟。
数据绑定控件 (例如GridView控件) 有时需要保存被视为敏感内容的信息。例如, GridView控件可能要在DataKeys属性中维护一个键的列表, 即使该信息并不显示。在往返行程之间, 控件会将该信息存储在视图状态中。因此要对视图状态信息进行编码, 并与页的内容一起存储, 未经授权的源无法解码和查看视图状态信息。如果必须在视图状态中存储敏感信息, 可以要求页对视图状态数据进行加密。若要加密数据, 请将页的ViewStateEncryptionMode属性设置为true。
6、总结
尽管遵循编码和配置最佳做法可以提高应用程序的安全性。但还有一点也很重要, 那就是应经常执行Microsoft Windows和Internet信息服务 (IIS) 的最新安全更新以及Microsoft SQL Server或其他数据源软件的所有安全更新, 以使Web服务器始终保持在最新状态。
摘要:数据访问在Web程序中占有十分重要位置, 其安全性也决定着整个Web系统的安全。文章就基于ASP.NET数据访问的安全性问题进行了详细的阐述, 主要探讨从连接字符串、使用集成安全性连接到SQL Server/Microsoft Access数据库、XML文件等操作, 来提高ASP.NET Web应用程序中的数据访问的安全性。
关键词:ASP.NET,数据访问,安全性
参考文献
[1]KAUFFMAN J, THANGARATHINAM T.ASP.Net数据库入门经典[M].4版.肖奕, 译.北京:清华大学出版社, 2007.
[2]LIBERTY J, HURWITZ D.Programming ASP.Net中文版[M].3版.瞿杰, 赵立东, 张昊, 等, 译.北京:电子工业出版社, 2008.
[3]GALLO A, BARKOL D, VAVILALA R K.ASP.Net AJAX实战[M].苏金国, 陈波, 刘晓兵, 等, 译.北京:人民邮电出版社, 2008.
ASP.NET安全性 篇2
前言
Internet已经成为人们生活、工作、学习越来越离不开的平台脚丫论文网Web技术已经不在局限于单纯地提供信息服务,代写论文而是日益成为1个操作平台,为用户提供强大的服务功能。例如网上电子商务、社会信息数据库等。网络实现了远程通讯,人们能够通过计算机网络进行电子邮件的发送,召开网络会议,网上购物,甚至坐在家里就可以上大学(网上教育)。网络有巨大的潜力待我们去开发与探索。因此,基于B/S体系架构创建这个校友网站,紧跟行业发展,满足人们生活、学习的需要。
校友录名为“校友录”或者“同学录”,其实不只是局限于同学这个圈子,朋友、同学、同事、老师与亲人等等都可以。它的目标受众是组织,只要是1个社会组织或者群体,不管大小都可以在网上申请1个校友录。用户人群的范围扩大到学生、同事、企业、家庭、军队、企事业单位的部门等等。因为每1个人都从属于1定的组织或团体,所以每1位网民都有成为校友录用户的可能。这就为在校或已毕业的广大校友们提供1份交流思想的场所,通过提供完善的校友录服务和规范校友录的管理,建立起校友间的沟通渠道,以达到增进校友之间、校友与母校之间的感情,方便校友联系的目的,从而增强学校的凝聚力。
ASP.NET安全性 篇3
油田企业通过建立ASP.NET系统, 搭建统一的数据库平台, 并且对各个通信站点的信息进行统一管理。另外公司员工还可以通过油田的局域网远程访问系统的数据库。通过对ASP.NET系统的性能优化, 可以使员工在前线的各个站点工作时, 都可以方便、及时的对信息进行修改与查询。并且用户在登录系统之后, 就可以及时查询有关部门的信息, 比如:系统拓宽图、电路、油田设备信息、占用资源信息等等。并且通过ASP.NET系统还可以按照不同的组合条件把查询的结果打印出来, 从而可以有效分析系统数据库。ASP.NET对数据库的访问主要是通过ADO。ADO是一种标准的数据库应用程序的接口, 因此比较适合子啊web环境下来访问系统数据可, 同时也是ASP内置数据库访问的控件。ASP可以有效使客户端的程序通过ODBC来存取获取操纵服务器的数据。因此利用网络来传输油田企业中的各种信息, 可以使信息的查询、传输以及修改工作更加准确、方便。ASP.NET性能比较简单、高速, 并且占用的资源较少 (访问数据库系统的流程图如下) 。
利用ASP.NET系统可以组合HTML、组件以及脚本命令还创建功能强大的web应用系统。ASP可以利用远程服务器或者本地服务器来访问数据库以及各个站点的处理信息。同时脚本命令都是在服务器上运行的, 因此就有效地减少了对客户端的需要, 并且还可以使脚本不容易出现复制的情况。而对于用户来说, 脚本命令是隐形的, 有效优化了ASP.NET的性能, 提高了数据库的安全性。
二、ASP.NET系统的安全性
(1) ASP.NET的安全体系。每一个ASP.NET应用程序都需要根据目录以及各种子文件都可以由于自己的配置文件。而配置文件都是基于XML格式的文本文件, 一般情况下, 可以用来保存一些常量或者安全设置。并且每一个子文件的配置继承文件夹的配置, 需要覆盖相同的选项。这样油田企业就可以有效缓存数据以及页面的输出。但是在使用ASP.NET缓存过程中, 如果高周转率就说明存在问题, 尤其是当项在到期前被进行移除工作时。但是对于在web中没有进行设置的属性, 如果配置文件被更改, ASP.NET就可以及时、有效检测出新配置并且动使它起到作用, 不需要重新驱动服务器。另外, ASP.NET通过配置文件来保护各个级别的配置文件, 同时还可以拒绝游览器直接访问数据库, 有效提高了ASP系统的安全性。
(2) ASP.NET需要身份验证。当配置文件受到用户请求的同时, ASP.NET系统首先查看资源使如何受到保护的。因为绝大多数的Web站点的资源都可以用匿名进行访问保护, 或者直接用标准的本地或活动目录证书进行有效保护。其次ASP通过标准的访问控制列表都需要查看用户油田企业的资源是否有访问的权限。如果检查失败, ASP NET可以及时拒绝它。如果一个ASP.NET资源被请求, 配置文件对请求进行了身份验证并且授权的同时, 下一步需要ASP.NET提供自己的身份验证并授权。
三、结语
经上述论证, ASP.NET可以灵活潜入到油田企业当中, 从而使企业网站的建设更加灵活, 面向用户更加具有交互性。随着ASP.NET的性能不断优化, 可以十分方便的访问各种数据库的系统。因此, 基于ASP.NET的性能优化及其安全性在油田企业中的应用, 大大提高了企业的工作效率。这也是油田企业开发各种信息管理系统也是一种生存和发展的有效方式。
摘要:随着计算机与信息技术的快速发展, ASP.NET技术油田企业不断成熟与完善, 目前人们普遍使用计算机来代替手工劳动, 从而提高了油田企业的工作效率。本文主要介绍了ASP.NET的性能优化特点以及安全性在油田企业中的应用。
关键词:ASP.NET,数据库,油田企业
参考文献
ASP.NET笔试题 篇4
属性:
(1) 通过名称标识
(3) 通过简单名称或成员访问来访问
(3) 可以为静态成员或实例成员
(4) 属性的get访问器没有参数
(5) 属性的set访问器包含隐式value参数
索引器:
(1) 通过签名标识
(2) 通过元素访问来访问
(3) 必须为实例成员
(4) 索引器的get访问器具有与索引器相同的形参表
(5) 除了value参数外,索引器的set访问器还具有与索引器相同的形参表
2. 请叙述const与readonly的区别。
答:每一个class至多只可以定义一个static构造函数,并且不允许增加访问级别关键字,参数列必须为空。为了不违背编码规则,通常把static数据成员声明为private,然后通过static property提供读写访问。
const关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值不能被修改。常数声明引入给定类型的一个或多个常数。
const数据成员的声明式必须包含初值,且初值必须是一个常量表达式。因为它是在编译时就需要完全评估。
const成员可以使用另一个const成员来初始化,前提是两者之间没有循环依赖。
readonly在运行期评估赋值,使我们得以在确保“只读访问”的前提下,把object的初始化动作推迟到运行期进行。
readonly关键字与const关键字不同:const字段只能在该字段的声明中初始化。readonly字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly字段可能具有不同的值。另外,const字段是编译时常数,而readonly字段可用于运行时常数。
readonly只能在声明时或者构造函数里面初始化,并且不能在static修饰的构造函数里面。
3. 您需要创建一个ASP.NET应用程序,公司考虑使用Windows身份认证。所有的用户都存在于AllWin这个域中。您想要使用下列认证规则来配置这个应用程序:
a、匿名用户不允许访问这个应用程序。
b、所有雇员除了Tess和King都允许访问这个应用程序。
请问您应该使用以下哪一个代码段来配置这个应用程序?( A )
A.
B.
C.
D.
E.
4. 您要创建一个显示公司员工列表的应用程序。您使用一个DataGrid控件显示员工的列表。您打算修改这个控件以便在这个Grid的Footer显示员工合计数。请问您应该怎么做? ( C? )
A.重写OnPreRender事件,当Grid的Footer行被创建时显示合计数
B.重写OnItemCreated事件,当Grid的Footer行被创建时显示合计数
C.重写OnItemDataBound事件,当Grid的Footer行被创建时显示合计数
D.重写OnLayout事件,当Grid的Footer行被创建时显示合计数
5. 您要创建ASP.NET应用程序用于运行AllWin公司内部的Web站点,这个应用程序包含了50个页面。您想要配置这个应用程序以便当发生一个HTTP代码错误时它可以显示一个自定义的错误页面给用户。您想要花最小的代价完成这些目标,您应该怎么做?(多选) ( CD )
A.在这个应用程序的Global.asax文件中创建一个Application_Error过程去处理ASP.NET代码错误
B.在这个应用程序的Web.config文件中创建一个applicationError节去处理ASP.NET代码错误
C.在这个应用程序的Global.asax文件中创建一个CustomErrors事件去处理HTTP错误
D.在这个应用程序的Web.config文件中创建一个CustomErrors节去处理HTTP错误
E.在这个应用程序的每一页中添加一个Page指示符去处理ASP.NET 代码错误
ASP.NET安全性 篇5
关键词:ASP.NET,性能优化,安全性
我们用ASP.NET开发网站, 无论我们写的ASP.NET应用程序有多么好, 无论在Web站点中添加了多少很酷的新特性, 如果我们的站点在处理用户请求时哪怕只是让用户等待了几秒钟, 用户也不会对我们的站点留下好印象。事实上, 如果用户等得太久, 他们就会放弃而去访问另一个站点。那么, 如何才能提高站点的响应速度, 这就要考虑到我们在开发过程中如何优化ASP.NET的性能。
一、性能开发及其优化
性能表示系统执行任务的速度和效率。就Web站点的性能而言, 它对整个站点的点击率起着不可忽视的作用。如果一个性能很差的网站长期没有改进, 你就会发现潜在的用户全都跑光了。
1. 利用JIT编译器提高程序执行速度
高性能代码旨在能少做工作就少做工作, 这是不言而明的。
在编译任何ASP.NET的应用程序时, 编译器把源代码转换为Microsoft中间语言 (MSIL) 。要在一个具体环境中执行应用程序, 一个JIT编译器先接受MSIL输出并把指令转换为主机处理的本机指令, 再以即时方式编译代码, 以便应用程序开始执行。但是, JIT编译器不是把程序集中所有的MSIL都在开始执行前转换为本机代码, 只是一次编译一个方法。JIT编译器采用的这种方法有两个性能上的优势。第一个优势:这项技术把编译的成本分摊在一个较长的时间内, 由于执行会比JIT编译器把所有的MSIL都进行编译看起来要快, 这样感觉到应用程序的性能提高了。如果把长时间的暂停或等待时间分成小块, 把它们分散开, 你的用户就不会注意到它们, 用户对你的应用程序的性能也会比较满意。第二个优势:JIT编译器不编译在执行期间用不到的方法。因此不会做没有必要的工作, 无论什么时候省去不必要的处理工作, 你就会发现可以获得真正的性能增益。
2. 减少运行时的工作
在底层, ASP.NET基础结构为了让我们工作轻松, 做了大量的基础工作。虽然把这个体系结构用做一个黑盒很不错, 但有时了解使一切如此无缝的运行的实现细节也是很有益的。掌握了这些额外的信息, 我们经常可以更有效地在运行程序时获得速度上的优势。其实现主要有以下三种方法:
(1) 视图状态的优化
视图状态是性能的无声杀手。自动视图状态管理是服务器控件的功能, 该功能使服务器控件可以在往返过程上重新填充它们的属性值 (不需要编写任何代码) 。但是, 因为服务器控件的视图状态在隐藏的窗体字段中往返于服务器, 所以该功能确实会对性能产生影响。因此, 开发人员应该知道在哪些情况下视图状态会有所帮助, 在哪些情况下它影响配器的性能。例如, 如果将服务器控件绑定到每个往返过程的数据上, 则将用数据绑定操作获得的新值替换保存的视图状态。在这种情况下, 禁用视图状态可以节省处理时间。默认情况下, 为所有服务器控件启用视图状态。若要禁用视图状态, 将控件的Enable View State属性设置为false。
从某种意义上说, 视图状态是有史以来最伟大的事情。毕竟, 视图状态使页面和控件能够在回发之间保持状态。因此, 不必像在传统的ASP中那样编写代码, 以防止在单击按钮时文本框中的文本消失, 或在回发后重新查询数据库和重新绑定Data Grid。但是, 视图状态也有缺点:当它增长得过大时, 某些控件 (例如文本框) 会根据视图状态做出相应判断;其他控件 (特别是Data Grid和Grid View) 则根据显示的信息量确定视图状态。一个糟糕的Grid View容易将浏览器和Web服务器之间连接的有效带宽减少50%以上。ASP.NET 2.0能够提供比ASP.NET 1.x更简单的方法将视图状态保留在会话状态中。
(2) 尽量减少服务器控件的使用
服务器端的控件不仅能生成视图状态, 它们也需要额外的运行时间处理绑定到成员变量。由于它们会使用服务器资源, 即使它们非常易于使用, 但是服务器控件并不总是完成任务的最佳选择, 在许多情况下, 一个简单的呈现或数据绑定代入就可以完成任务。所以, Web页面上服务器端的控件应该保持在最低的数量上。
(3) 把异常减到最少
不要依赖代码中的异常。因为异常大大地降低性能, 所以不应该将它们用作控制正常程序流程的方式。
异常是通知程序执行期间发生的错误的一个非常有用的设备。程序不能忽视异常——它们将会改变程序的执行流。在ASP.NET运行时的托管环境中, 用try和catch设置异常处理代码只对性能有可以忽略不计的影响, 但程序抛出异常时却有性能的损失。如果将try…catch语句使用为if语句, 将抛出更少的异常, 运行得更快。
3. 有效使用内存和缓存
只要可能, 就缓存数据和页面输出。使用ASP.NET缓存机制有两点需要注意。首先, 不要缓存太多项, 缓存每个项均有开销, 特别是在内存使用方面。不要缓存容易重新计算和很少使用的项。其次, 给缓存的项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转, 并且经常导致更多的代码清除和垃圾回收工作。高周转率可能说明存在问题, 特别是当项在到期前被移除时。
不要给每个请求分配过多内存, 因为这样垃圾回收器将必须更频繁地进行更多工作。另外, 不要让不必要的指针指向对象, 因为它们将使对象保持活动状态, 并且应尽量避免含Finalize方法的对象, 因为它们在后面会导致更多的工作。特别是在Finalize调用中永远不要释放资源, 因为资源在被垃圾回收器回收之前可能一直消耗着内存。最后这个问题经常会对Web服务器环境的性能造成毁灭性的打击, 因为在等待Finalize运行时, 很容易耗尽某个特定的资源。
二、安全性
ASP.NET提供了一个很健壮的安全系统, 我们可以轻松地利用这个安全系统消除在ASP中为Web应用程序提供用户级别的安全性而编写的大量代码。这就意味着你需要编写较少的代码可以实现标准化的安全。
1. ASP.NET的配置体系和安全体系
NET框架提供了一个丰富又灵活的配置系统, 使得应用程序开发及管理人员能够在整个应用程序、站点和计算机中定义和使用可扩展的配置数据。其中Machine.Config为整个Web服务器提供配置设置, 每一个ASP.NET Web应用程序根目录以及各级子文件夹都可以有自己的名称为Web.Config的配置文件。配置文件都是基于XML格式的文本文件, 通常用来保存一些常量或者安全设置、SQL连接字符串和其他常规的配置数据等。每一个Web.Config文件只在该文件夹和其子文件夹下起作用, 每个子文件夹的配置继承父文件夹的的配置, 并覆盖相同的选项。对于在Web.Config中没有进行设置的属性, 其取值将继承Machine.Config中属性的设置。如果配置文件被更改, ASP.NET将检测到新的配置并自动使它起作用, 无需重新启动服务器。另外, ASP.NET通过配置IIS来保护各级Web.Config配置文件, 拒绝浏览器直接URL访问。
2. ASP.NET身份验证和授权策略
当IIS收到用户请求时, 它首先查看资源是如何受到保护的。资源可以用匿名访问保护 (大多数Web站点都是如此) , 或者用标准的本地或活动目录证书保护。接下来, IIS通过标准的访问控制列表 (ACL) 查看用户对请求的资源是否有访问权限。如果任一项检查失败, IIS甚至在请求到达ASP.NET之前就拒绝它。
在上述过程中发生了两件事。用户身份验证, 然后被授权。如果一个ASP.NET资源被请求, IIS对请求进行了身份验证并授权, 下一步是由ASP.NET提供它自己的身份验证和授权。这为开发人员自定义的身份验证提供了基础结构, 不必从头开发一个安全基础结构。
ASP.NET在应用程序中为验证用户身份提供了三种方法:
(1) Windows身份验证
Windows身份验证提供了与传统的Windows账号 (或者是活动目录账号或者是本地账号) 相似的集成。该模式的工作方式和正常的IIS身份验证相同。在这种模式下, 要禁用对你站点的匿名访问, 以保护你的站点不被未授权用户侵入。然后要更新Web.Config文件, 指定身份验证模式为Windows身份验证, 并指定ASP.NET应该使用用户被IIS质询时输入的证书作为该应用程序的证书。
Windows身份验证是最快的身份验证模式, 因为它依赖于IIS模式, 因为你不能控制登录页面模式的证书来源——并且该模式要求通过网络访问Windows证书来源, 这就意味着它不十分适合于公共的Web应用程序, 因为你不能控制客户端或网络访问。
(2) Forms身份验证
Forms身份验证允许开发人员生成他们自己的标准登录页面, 并根据Web.Config文件中的条目进行身份验证, 或者使用他们自己的身份验证文件。Forms身份验证是可自定义性最强的身份验证方法。因为你能够控制身份验证文件和方法。
和Windows身份验证不同的是Forms身份验证要求单独访问证书来源 (即使证书存储在Web.Config中) 。应尽量简化身份验证例程, 并去除总想包括在内的外部元素 (像检索个性化设置、用户图片等) 。这些工作只能放在其他时间来作, 它们只会延缓登录进程。
(3) Passport身份验证
Passport身份验证允许你把你的应用程序和Microsoft Passport服务集成在一起。该模式的基本工作方式是当检测一个未进行身份验证的请求时, ASP.NET把登录证书从一个Passport登录窗口 (在Web服务器上安装Passport服务时也安装该登录窗口) 发送到Passport服务。
Passport身份验证是最慢的身份验证方法, 因为为了验证证书, 它要求通过Internet进行Web服务类型的通信。Passport方法也是有前途的, 因为用户只要记住一套证书就能登录到受Passport保护的Web站点中。
三、结束语
对网站来说, 性能和安全性十分重要。ASP.NET提供了若干新的策略和编程方式, 在信息产业高速发展的今天, 只有将这些新的策略和编程方式合理应用到站点的开发中, 以此来提高站点的性能和安全性, 我们的站点才会受到更多的用户的亲睐。
参考文献
[1]Scott Worle著王文龙刘湘宁译:ASP.NET技术内幕[M].人民邮电出版社, 2002
[2]K.scott Allen James Avery著侯译:ASP.NET性能高级编程[M].清华大学出版社, 2003
[3]Patrick A.Lorenz.ASP.NET2.0Revealed[M].Wrox Press, 2004
ASP.NET安全性 篇6
ASP.NET+SQLSERVER常见安全问题
1.数据库泄密
数据库是网站运营的基础, 密码等重要信息若以明文存于库, 一旦被入侵就可对信息进行破坏。
2.绕过注册页隐患
用表单交互时内容可能会反映到地址栏, 若未采取措施, 记下这些内容就可绕过验证直接进入页面。如在浏览器中敲入“bk.aspx?id=3”, 则绕过表单页直接进入“id=3”的bk.aspx页。
3.SQL注入
SQL注入即设计者未判断用户输入的合法性, 攻击者用精心构造的SQL语句插入特殊字符和指令获得未授权的访问。以用户名密码验证为例, 常用代码:SqlConnection c=new SqlConnection (S) ;q="Select*from u where n='"+N+"'and pd='"+pd+"'";SqlCommand d=new SqlCommand (q, c) ;c.Open () ;SqlDataReader R=d.ExecuteReader () ;If (R.Read () ) {//成功}正常输入当然没错, 但若在用户名、密码框输入:“’or’1’=’1”也通过验证。
4.输入恶意脚本
通过向文本框输入恶意脚本实现攻击, 如“”。单击提交会不断弹出网易主页致cpu超负、系统资源耗尽致死机。
5.暴力破解登录密码
开发者在用户密码的验证代码中未考虑到恶意用户会暴力破解密码。
6.文件上传漏洞
文件上传可用fileupload控件轻松实现, 但若缺少对提交文档的检查, 网页木马或带病毒的文件就可能被上传。
ASP.NET+SQLSERVER安全问题对策
1.数据库泄密对策
数据库中重要数据不以明文而是加密后存放。验证数据时, 将输入的信息加密后与库中信息进行比较即可。典型的加密技术是哈希算法 (不可逆) , 代表是MD5、SHA1算法, 在应用中可比较两个数哈希值实现校验, 用这两种算法加密的机制:Using system.web.security;stringm=Forms Authentication.HashPasswordFor StoringInConfigFile (T.Text, "MD5") , s=FormsAuthentication.HashPasswordForStoringInConfigFile (T.Text, "SHA1") ;
2.绕过注册页对策
为防绕过注册页进入系统, 可用Session对象进行验证, 它可把每个用户信息保留供后续页读取。如在登录时用session[“u”]将用户的username提交, 在进入其他页时先验证session[“u”]是否为空来判断用户是否登录可有效阻止该情况出现。代码:Page_Load (object sender, EventArgs e) {if (session[“u”]==“”) Response.Redirect (“log.aspx”) ;}则必须进行正确输入, 否则即使输入“bk.aspx?id=3”也跳到log.aspx。
3.防SQL注入
防SQL注入常用方法:第一, 生成SQL查询前用验证控件对输入进行验证, 过滤掉单引号等危险字符, 确保内容合法。第二, SQL语句中使用参数, 则输入将被视为文本值且parameters集合还具有类型检查及长度验证, 范围外的值抛出异常的优点。代码:s=”select*from u where u=@x and p=@y”;d.Parameters.Add ("@x", SqlDbType.VarChar, 8) .Value=g.Text;d.Parameters.Add ("@y", SqlDbType.VarChar, 8) .Value=h.Text;第三, 用带参数的存储过程。存储过程存于数据库运行于服务器端, 因它已编译, 故执行其比sql语句快且可提高数据操作安全性。代码:CREATE PROCE-DURE t (@U varchar (8) , @P varchar (8) ) AS select count (*) from ad where U=@U and P=@P…SqlCommand d=new SqlCommand ("t", c) ;d.CommandType=CommandType.StoredPro cedure;d.Parameters.Add ("@U", SqlDbType.VarChar) .Value=g.Text;d.Parameters.Add ("@P", SqlDbType.VarChar) .Value=h.Text;if ( (Int32) d.ExecuteScalar () >0) //用户名存在else//不存在。第四, 用哈希加密对重要信息进行加密存放读取。第五, 查询时若只准返回一条记录, 实际超过一条可当错误处理。第六, 不用管理员权限的数据库连接账号而尽量用最低权限帐号。第七, 屏蔽错误信息, 在web.config中指定出错页, 错误发生时跳转:
4.消除恶意脚本
第一, 对输入进行验证、屏蔽“<”、“>”等字符及javascript、vbscript语句;第二, 通过Server.HtmlEncode () 对输入内容编码。
5.暴力破解密码对策
增加随机码校验, 将它与用户名密码组合可增加破解难度;还可设置最多登录数, 若超过阀值就可锁定或跳到指定页。
6.文件上传安全对策
判断上传文件的扩展名、文件中MIME信息中的ContentType判断文件类型实现类型检查;为防更改扩展名绕过这两种验证, 可进一步判断文件头确定真实类型, 因文件头不随扩展名改变而改变。在应用中仅判断前两个字节。以上传pdf文件为例, 代码:using System.IO;if (F.Has File) {File Stream S=new File Stream (F.PostedFile.File me, FileMode.Open, FileAccess.Read) ;BinaryReader R=new BinaryReader (S) ;byte B=R.ReadByte () ;string C=B.ToString () ;B=R.ReadByte () ;C+=f B.ToString () ;R.Close () ;S.Close () ;if (C=="3780") //可上传else//不可}此外取消保存上传文件的文件夹的执行权限, 从权限上禁止恶意代码运行。
本文从开发者角度指出ASP.NET+SQLSERVER方案中易出现的安全问题并给出对策, 对开发安全网站有较强的指导作用。
参考文献
[1]周维霞.基于ASP.NET的网站设计安全问题研究[J].电脑知识与技术, 2009, 5.
[2]李婷.ASP.NET网站中SQL注入攻击及防范[J].科技资讯, 2010, 34.
ASP.NET安全性 篇7
ASP.NET与IIS、.NET框架和操作系统所提供的基础安全服务配合使用, 共同提供一系列身份验证和授权机制。ASP.NET的安全体系结构如图1所示:
二、ASP.NET安全访问技术[2]
(一) 验证 (Authentication)
身份验证是获取用户标识并验证标识的过程。在ASP.NET中主要用到三种验证模式, 且都在IIS身份验证之后。
1、window身份验证:
ASP.NET将依靠IIS对用户进行身份验证。Web客户的权限将与Windows用户和角色的权限相同。如果所请求的资源允许匿名访问, 则不进行身份验证;如果所请求的资源需要用户具有一定的权限, 则IIS将请求发送到ASP.NET程序去处理, 如果身份未通过或未被授权则拒绝访问。通过对Web.config的设置来启用这种认证:
2、表单窗体身份验证:
当用户向拒绝匿名访问的资源发出请求时, ASP.NET将客户端发送的未经验证的请求重定向到登录页面, 原始请求的URL被保存为URL参数以便以后使用。然后用户输入凭证, 提交页面, 应用程序根据数据存储对凭证进行身份验证, 如果应用程序认可了凭证, ASP.NET发出一个Cookie, 里面包括了一个有效身份票据, 然后用户被重定向到用户原始请求页面。当用户在同一个会话中再次请求受限访问页时, 请求头中将包含带有身份票据的Cookie以便再次验证;如果没有通过验证, 则用户被拒绝访问。对web.config文件修改如下:
forms属性指定认证时使用的cookie名和登录页面的URL, timeout设置cookie有效期, path指示发出cookie所用的路径。C r e d e n t i a l s配置段指定认证时的有效用户身份。PasswordFormat指定发送证件给服务器时使用的加密方法, 该属性取值可以是clear (不加密) 、MD5、SHA1。user元素的name和password属性分别为用户名和密码。
3、Passport身份验证:
由Microsoft提供的集中身份验证服务, 该服务为参与站点提供单一的登录程序和成员服务。它将ASP.NET与Microsoft Passport软件开发包 (SDK) 相结合, 将用户重定向到Passport站点, 通过Passport服务来检查用户的证件, 然后生成Cookie返回到客户端。
(二) 授权 (Authorization)
授权旨在确定通过验证的用户可以访问哪些资源, ASP.NET提供了两种授权方式:
1、文件授权[3]
文件授权由FileAuthorizationModule执行, 利用NTFS文件系统的访问控制列表ACL控制用户或组访问受保护的资源, 但验证方式必须是Windows身份验证。这种授权方式主要通过系统管理员对文件的权限设定来实现, 文件权限被存储在ACL中。当通过认证的用户试图访问Web服务器上的文件时Windows将检查相应的ACL, 以确定该角色或身份是否被允许读取该文件。
2、URL授权
URL授权是通过Web.config文件定义用户、角色、操作类型和指定文件或文件夹, 并将用户映射到特定的URL, 然后再利用URLAuthorizationModule确保调用者的凭证与定义的用户和URL映射相匹配的功能。在web.config文件中对授权和角色进行配置, 语法如下:
三、ASP.NET表单验证方案的安全[4]
在ASP.NET应用程序中, 窗体身份验证通常是最佳的选择。
(一) 系统说明
本系统由两个页面构成, 其中success.aspx是登录成功的页面, L o g i n.a s p x用于验证用户登录, 它包含:用户名txtUserName, 密码框txtPassword, 选择加密类型的下拉列表框d l l E n c r y T y p e, 登录按钮b t n L o g i n和显示错误信息的lblMessage。用户账号和加密后的密码保存在数据库UserInfos的Users表中, 包括userName、password、salt几个字段。ASP.NET支持MD5和SHA1两种加密算法。登录时, 首先根据用户的选择对输入的密码加密, 再从数据库中找出与用户名匹配的密码, 将两者进行比较。若一致则认为该用户为合法用户, 通过Session.Add记录用户信息, 显示用户请求界面, 否则将其强制引导回登录界面。
(二) 配置表单身份验证
(三) 选择加密算法对密码加密
ASP.NET可以方便地实现对密码的加密, 本例根据用户选择的加密类型和一个随机salt值来对密码加密, 然后存入数据库。
1、Salt值的函数
private static string CreateSalt (int size)
{R N G C r y p t o S e r v i c e P r o v i d e r r n g=n e w RNGCryptoServiceProvider () ;
Byte[]buf=new byte[size];rng.GetBytes (buff) ;
return Convert.ToBase64String (buff) ;}
2、创建加密函数
根据用户提供的密码、加密类型和salt值生成加密密码, 下面是具体的代码:
private static string CreatePassword (string pwd, string salt, string EncryType)
{string PwdAndsalt=String.Concat (pwd, salt) ;
switch (EncryType)
{case"SHA1":{Password=FormsAuthentication.HashPasswordForStoringInConfigFile
(PwdAndsalt, "SHA1") ;break;}
case"MD5":{Password=FormsAuthentication.
HashPasswordForStoringInConfigFile (PwdAndsalt, "MD5") ;break;}}return Password;}
(四) 通过数据库对用户进行验证
ASP.NET 2.O提供的Session对象用来存储特定用户会话所需的信息, 让后续的网页读取, 避免了在不同页面间传递信息的时候信息显示在地址栏中。[5]
(五) 测试应用程序
假定我们已注册了一个用户, 然后登录, 下面是登录按钮的触发事件代码:
四、结束语
本文讲述了IIS和ASP.NET应用程序的安全机制, 并用实例说明了基于窗体的身份验证的一些实现方法。虽然.NET框架自身有一些安全保护机制, 但对于要建造一个真正安全的ASP.NET应用程序是远远不够的, 我们还需要更深入地研究。
参考文献
[1]蔡群英, 黄镇建《ASP.NET安全策略的研究》.计算机与现代化[J], 2007.6;
[2]罗海涛, 李心广《ASP.NET Web应用程序安全策略》.微计算机信息[J], 2007.9-3;
[3]Mark minasi Christa Anderson Michele Beveridge《Windows Server2003从入门到精通》.电子工业出版社[M], 2004.6;
[4]陈浩《构建安全的ASP.NET Web应用程序》.乐山师范学院学报[J], 2006.12;
ASP.NET安全性 篇8
所谓的“验证”是网站或Windows大门入口警卫, 它只负责验证用户是否具有合法的用户名与密码, 若用户名与密码正确则对用户连接或Request放行, 若不正确则禁止进入网站或Windows操作系统;而“授权”则是指对整个网站或Windows操作系统中个别资源项目的访问权限, 为什么还要多此一举?因为验证只是大门警卫, 它所验证的东西很粗略, 只验证用户名密码, 但问题随之而来, 用户进入网站后是不是就可以为所欲为, 任意访问整个网站机密资料呢?答案当然是否定的, 所以各位可以理解到必须要有更进一步的精密管理机制来限制用户访问权限, 而那正是授权机制的工作。
本文主要讨论ASP.NET2.0网络安全管理中验证机制。ASP.NET2.0网络安全管理验证包括None、Windows、Forms、Passport四种模式, 其中最常用的是Windows和Forms验证模式。
1 Windows验证模式
首先要谈的是Windows验证模式, 如果读者打算使用Windows的验证模式, 一定要将IIS“匿名访问”的选项打勾移除, 并在“集成Windows身份验证”选项打勾。这个模式会使用Windows操作系统内置的帐号来验证, 好处是可以和公司的Windows服务器帐号集成, 坏处是任何一位用户都必须在Windows中建立帐号。想想看, 若我们设计的网站供Internet访问或者有成千上万用户帐号, 根本不可能用这个模式。因为每个联机帐号不但需要CAL的License费用, 且Windows本身内置帐号Schema太过简单, 比如说想存放用户的星座、血型, 这是办不到的;即便办得到, 服务器管理员也会认为这是疯狂的行为。故此模式比较适合独立服务器或者具有AD环境的公司来做Single SignOn单一签入的集成。
2 Forms验证模式
如前面所言, Windows验证模式是验证用户帐号, 但因为必须在Windows创建帐号而非在数据库上, 另外每个用户联机访问授权 (CAL) 必须花钱购买。这样, 对于网页应用程序来讲显得颇为掣肘, 变得非常不实际, 也不实用。
为了克服上述的缺陷, 我们可以使用Forms验证模式来避开上述两个重大限制, 使用Forms验证模式就可不必依赖Windows本身内置的帐号密码, 程序员可以将用户帐号、密码或组存放在SQL Server或其他数据库中 (ASP.NET 2.0提供现成的Membership与Role机制来管理用户帐号及群) , 通过自定义的UI及程序来验证用户身份, 若用户通过验证, 则可以进行下一步的网页访问操作, 若不成功则会被导向默认的网页 (如Login.aspx) 来强制用户一定要输入帐号及密码验证身份, 同时也达到保护网站Security的目的。
Forms验证模式通常配合IIS的匿名访问, 当用户访问网页时, 只需第一次输入帐号密码, 随后个人身份将会储存在Cookies中, 并且后续的Request都是自动加密解密存在于Cookies中的身份。”因此我们可以了解到要使用Forms验证模式: (1) 第一步是要开启ns的匿名访问; (2) 第二步是设置ASP.NET使用Forms验证模式; (3) 第三步是必须通过少许程序来辅助验证.
3 Forms验证模式机制的探讨
Forms验证模式用户第一次浏览网页时会被导向Login.aspx强制进行登录, 那以后访问别的Web Form是否又要被导向Login.aspx再登陆?答案是不必!但为何通过身份验证后就可以任意浏览整个网站, 而不必再次输入帐号密码?一定有人会说:“就像Windows操作系统只要一次输入帐号密码就够了, 网页也是同样的道理!”没错, 是同样的道理, Windows登录AD网域后是有所谓的Session Ticket, 大家都知道:Ticket中文译作“票”, 所以当我们去使用AD网域的资源时, 系统就会拿您登录后所配发的那个数字Ticket去自动验证 (就像火车站需要验票一样) 。其实是执行重复性验证操作, 但这跟ASP.NET又有何关系?其实ASP.NET也是遵循相同原理, 因为ASP.NET也有一个叫Forms-Authentication Ticket, 以此Ticket来进行身份验证。Forms验证模式在用户第一次登录成功后, 就会将此用户的身份加密储存在Http Cookies中, 而该用户后续发出的Request也会自动从Cookies解密用户身份以提供系统验证, 否则每查询一次网页必须再输入一次帐号密码!各位在Internet浏览网站中只要输入一致帐号密码就可以通行也是这个道理, 所以Forms验证模式背后运作机制的就是Http Cookies, 通过Http Cookies来达成身份验证的自动化。而Http Cookies就是ASP.NET所使用的Authentication Ticket。
4 结束语
本文分析了ASP.NET的网络安全管理的验证模式, 特别是对Forms模式进行了较为详细论述, 在实际应用中, 若能结合Cookies的管理和清除技术, 可以构建起一个安全高效的网络应用系统。
摘要:随着ASP.NET网络应用的不断发展, 安全管理功能已经显得非常重要。该文通过对ASP.NET网络安全管理的模式和运行机制的分析, 希望对大家建立起更高效更安全的ASP.NET网络管理环境有所帮助。
关键词:ASP.Net,安全,验证
参考文献
[1]洪石单.ASP.NET范例开发大全[M].北京:清华大学出版社, 2010.
[2]胡百敬.ASP.NET应用系统开发[M].北京:人民邮电出版社, 2006.
ASP.NET安全性 篇9
1 系统的安全机制分析
我院的教学管理信息平台基于Internet开放,其系统安全机制如图1所示。信息系统的程序位于防火墙的DMZ区,处于网络隔离区和屏蔽子网之间,防火墙将它与Internet和单位内部网络(以及SQL Server数据库)隔离开。保护系统的安全主要就是保护SQL Server数据库的安全。实施系统的安全方案时,充分利用SQL Server 2005的安全机制、ASP.NET访问数据库的安全机制、编写程序时的防SQL注入攻击、Web服务器的安全加固等。
2 基于角色的窗体安全认证机制实现程序的访问安全
在系统实现过程中,充分利用ASP.NET提供的基于角色(即Roles)的认证机制实现系统的安全。
2.1 数据库及表的准备
1)教学管理信息平台数据库:gxnzyinfo。2)涉及到的主要数据库表和字段:用户信息表User Info(如表1所示),3个主要字段,用户名,密码,用户角色;角色信息表User Roles(如表2所示),两个主要字段,角色名称,角色所管理的目标目录。
2.2 编写系统登录程序Login.aspx
Login.aspx添加两个Text Box控件,取名UserName Text Box,Password Text Box,再添加一个Button,取名Login Button,点击它进入后台代码。在Login Button_Click方法中添加需要的代码:
2.3 创建(或修改)Global.asax文件
在Global.asax文件中找到(或新建)Application_Authentication Request方法(函数)。文件中要确认已经包含或者使用了System.Security.Principal以及System.Web.Security命名空间,然后修改它,修改后的代码如下:
认证票据(用户名和密码)没有(也不应该)作为cookie的一部分来存储的,因为用户可以修改他们的cookie。本质上,Forms Authentication是用机器码machine key(在machine.config中)来加密票据Forms Authentication Ticket的。我们使用User Data存储用户角色,并且生成一个新的凭证。一旦凭证已经创建,它会被添加到当前上下文中(即Http Context),用它来取回用户角色。
2.4 设置web.config文件,限制对特定目录的访问
要实现安全认证,在Web应用程序根目录下的Web.config文件中找到
上面的name="AMUHOUSE.ASPXAUTH"中,AMUHOUSE.ASPXAUTH这个名称是任意的。要控制用户或者用户组的权限,Web.config应该添加有下面的内容(或者类似的内容):
至此,已经为系统配置了基于角色的安全认证机制了。我们可以先编译程序,然后尝试访问一个机密目录,例如http://localhost/Admin/default.aspx,这时候系统就会被转向到用户登录页面。如果登录成功,并且你的角色对这个目录有访问权限(如:使用zxm用户),就可重新回到这个目录下。如果有用户(或入侵者)企图进入机密目录,可以使用一个Session来存储用户登录的次数,超过一定次数就禁止登录,并且显示"系统拒绝了你的登录请求!"。通过ASP.NET基于角色的窗体安全认证机制,按以上方法就可实现不同角色用户访问不同目录下的程序,大大加强了系统的安全性。
3 防止SQL注入攻击确保数据库的安全
SQL注入攻击是威胁Web系统安全常见问题之一,我院的教学管理信息平台自运行以来就受到过数次SQL注入攻击,严重威胁SQL Server数据库的安全。经过不断的调整和改进,取得较好效果,总体方案如下:
3.1 在系统中严格区分不同帐户的权限
1)严格划分出教学管理信息平台中使用数据库的权限。第一类:对数据库表仅具有SELECT权限,权限最低,如教学资源信息的查询功能程序;第二类:只对某个数据库表的部分字段有UPDATE权限,没有INSERT和DELETE权限,如学生自己修改学生基本信息的部分内容;第三类:只具有对某几个数据库表的INSERT和UPDATE权限,没有DELETE权限,如学生评教信息录入;第四类:对表具有所有操作权限,如系统管理员。
2)创建相对应的数据库用户。根据以上分析,给系统的数据库建立与程序功能相对应的多个数据库用户,并且设置好每个用户所操作的数据库对象。
3)在web.config文件中创建数据库连接串。在Web.config文件中建立数据库连接串,不同的功能使用不同的数据库连接串,连接串与数据库用户一一对应,如图2所示。
通过权限细致的划分,并且禁止sa用户的使用,系统的安全性大大提高,实践证明,经过这种方法处理,原来受到攻击的地方也已得以安全保护。
3.2 采用专门程序严格验证和过滤用户输入的信息
进行SQL注入攻击者往往利用系统与用户交互的过程中,可以在表单输入信息,也可以在URL处输入信息的机会进行SQL语句注入攻击,因此,我们只要严格过滤用户在表单或URL处输入的信息,这样可大大降低SQL注入的风险,详细方法如下:
1)创建(或修改)Global.asax文件。Global.asax文件(也称作ASP.NET应用程序文件)是可选文件,包含用于响应ASP.NET或Http Module引发的应用程序级别事件的代码。Global.asax文件驻留在基于ASP.NET的应用程序的根目录中。在运行时,分析Global.asax文件并将其编译到一个动态生成的.NET Framework类,该类是从Http Application基类派生的。Global.asax文件本身被配置为自动拒绝对它的任何直接URL请求;外部用户无法下载或查看在该文件中编写的代码。正是利用Global.asax文件的这个特点,我们在它下面加上以下代码:
……只要把包含以上程序的Global.asax文件放在站点根目录下,站点内的所有程序文件在运行后,无论是在表单内还是在URL处输入类似delete的关键字都会出现文件error.aspx定义的警告提示,从而防止SQL注入攻击。
3.3 所有对SQL SERVER数据库操作的程序都基于存储过程运行
把SQL语句直接套在ASP.NET程序代码中实现对数据库的操作,就必须给数据库连接用户赋予SELECT、UPDATE、INSERT或DELETE等权限,这样很容易受到SQL注入攻击。如果改为基于存储过程操作数据库,连接数据库的用户只要对存储过程有执行权限就可,不需要具备直接操作数据库表的权限,同时,输入参数经过存储过程的过滤,这样大大增强了系统的安全性。
4 结束语
基于角色的窗体安全认证机制实现程序的访问安全、防止SQL注入攻击实现数据的安全、通过存储过程操作数据库加强数据库的安全,这些都是针对ASP.NET和SQL Server 2005构建的信息系统有效的技术方案,在我院的教学管理信息平台中推广应用后,系统安全性大大加强,这些技术方案具有较强的实用推广价值。
参考文献
[1]Microsoft Corporation.Web安全威胁与对策[EB/OL].http://msdn.microsoft.com/zh-cn/library/aa302418.aspx.
[2]Microsoft Corporation.Web安全解决方案一览[EB/OL].http://msdn.microsoft.com/zh-cn/library/ms994913.aspx.
【ASP.NET安全性】推荐阅读:
强化安全意识、落实安全责任、实现安全目标05-31
用电安全、交通安全、消防安全活动方案09-06
安全座椅安全出行09-18
安全经理安全职责05-27
安全教案乘车安全09-27
安全教案 小班安全11-10
校园安全消防安全01-16
我要安全我会安全我能安全征文作文09-22