创建安全Web应用程序的主题非常广泛。它需要研究以了解安全漏洞。您还需要熟悉Windows、.NET框架和ASP.NET的安全设施。最后,有必要了解如何使用这些安全特性来对付威胁。

即使您没有安全方面的经验,也应采取基本措施来保护Web应用程序。以下列表提供了适用于所有Web应用程序且应遵循的最低安全性准则:

一般Web应用程序安全建议

以最少的特权运行应用程序

了解您的用户

防止恶意用户输入

安全访问数据库

创建安全错误消息

安全地保密

安全使用Cookies

防范拒绝服务威胁

有关帮助您设计,开发,配置和部署更安全的ASP.NET Web应用程序的全面详细的安全指南,请参阅Microsoft模式和实践Web站点上提供的安全模块。

一般Web应用程序安全建议

如果恶意用户可以使用简单的方法访问您的计算机,即使最复杂的应用程序安全性也会失败。请遵循以下准则:

经常备份,并保持备份物理安全。

保持Web服务器计算机的物理安全,以便未经授权的用户无法访问,关闭或接受它。

使用Windows NTFS文件系统,而不是FAT32。 NTFS提供比FAT32更多的安全性。有关详细信息,请参阅Windows文档。

使用强密码保护Web服务器计算机和同一网络上的所有计算机。

安全的IIS。有关详细信息,请参阅Microsoft TechNet安全中心网站。

关闭未使用的端口并关闭未使用的服务。

运行监控入站和出站流量的病毒检查程序。

建立并实施一项政策,禁止用户将密码记录在易于查找的位置。

使用防火墙。有关建议,请参阅Microsoft安全站点上的Microsoft防火墙指南。

从Microsoft和其他供应商安装最新的安全修补程序。例如,请参阅Microsoft TechNet安全中心网站,其中列出了所有Microsoft产品的最新安全公告。其他供应商有类似的网站。

使用Windows事件日志记录并经常检查日志中是否存在可疑活动。这包括重复尝试登录系统以及针对Web服务器的大量请求。

运行具有最小权限的应用程序

当应用程序运行时,它在本地计算机上和远程计算机上具有特定特权的上下文中运行。有关配置应用程序标识的信息,请参阅配置ASP.NET进程标识。若要以最少的特权运行,请遵循以下准则:

Configuring ASP.NET Process Identity.

不要使用系统用户(管理员)的身份运行应用程序。

在具有最低实际权限的用户的上下文中运行该应用程序。

设置应用程序所需的所有资源的权限(访问控制列表或ACL)。使用最不允许的设置。例如,如果在应用程序中实用,则将文件设置为只读。有关ASP.NET应用程序标识所需的最低ACL权限的列表,请参阅ASP.NET必需访问控制列表(ACL)

将Web应用程序的文件保存在应用程序根目录下的文件夹中。不允许用户选择为应用程序中的任何文件访问指定路径。这有助于防止用户访问服务器的根目录。

了解您的用户

在许多应用程序中,用户匿名访问站点(无需提供凭据)。如果是,则应用程序通过在预定义用户的上下文中运行来访问资源。默认情况下,此上下文是Web服务器计算机上的本地ASPNET用户(在Windows 2000或Windows XP上)或NETWORK SERVICE用户(在Windows Server 2003上)。要限制对经过身份验证的用户的访问,请遵循以下准则:

如果您的应用程序是Intranet应用程序,请将其配置为使用Windows集成安全性。这样,用户的登录凭据可用于访问资源。有关更多信息,请参阅ASP.NET模拟。

切勿回显(显示)未经过滤的用户输入。在显示不受信任的信息之前,编码HTML以将可能有害的脚本转换为显示字符串。

永远不要在数据库中存储未过滤的用户输入。

如果您想接受来自用户的一些HTML,请手动筛选它。在过滤器中,显式地定义您将接受的内容。不要创建试图过滤掉恶意输入的过滤器;很难预测所有可能的恶意输入。

不要假设从HTTP请求头(在HttpRequest对象中)获得的信息是安全的。对查询字符串、cookie等使用安全措施。请注意,浏览器向服务器报告的信息(用户代理信息)可能被欺骗,以防在应用程序中发生重要情况。

如果可能,请勿将敏感信息存储在可从浏览器访问的位置,例如隐藏字段或Cookie。例如,不要在cookie中存储密码。

注意:视图状态以编码格式存储在隐藏字段中。默认情况下,它包含消息身份验证代码(MAC),以便页面可以确定视图状态是否被篡改。如果敏感信息存储在视图状态,则通过将页面的ViewStateEncryptionMode属性设置为true进行加密。

安全地访问数据库

数据库通常具有自己的安全性。安全Web应用程序的一个重要方面是为应用程序设计一种安全访问数据库的方法。请遵循以下准则:

使用数据库的固有安全性来限制谁可以访问数据库资源。确切的策略取决于您的数据库和您的应用程序:

如果在您的应用程序中可行,请使用集成安全性,以便只有经过Windows身份验证的用户才能访问数据库。集成安全性比将显式凭据传递到数据库更安全。

如果您的应用程序涉及匿名访问,请创建权限非常有限的单个用户,并通过以此用户身份进行连接来执行查询。

不要通过连接涉及用户输入的字符串来创建SQL语句。而是创建参数化查询并使用用户输入来设置参数值。

如果必须在某个地方存储用户名和密码作为数据库登录凭据,则将它们存储在Web.config文件中,并用受保护的配置保护该文件。有关详细信息,请参阅使用受保护的配置加密配置信息。

有关安全访问数据的更多信息,请参阅保护数据访问和保护ADO.NET应用程序。

创建安全错误消息

如果您不小心,恶意用户可以从显示的错误消息中推断出有关您的应用程序的重要信息。请遵循以下准则:

不要编写错误消息来回显可能对恶意用户有用的信息,例如用户名。

配置应用程序不向用户显示详细错误。如果要显示用于调试的详细错误消息,请首先确定该用户是否是Web服务器的本地用户。有关详细信息,请参见如何:显示安全错误消息。

使用customErrorsconfiguration元素可以控制谁可以从服务器查看异常。

为容易出错的情况(如数据库访问)创建自定义错误处理。有关更多信息,请参阅ASP.NET页面和应用程序中的错误处理。

安全地保存敏感信息

敏感信息是你需要保密的任何信息。典型的敏感信息是密码或加密密钥。如果恶意用户可以获取敏感信息,那么受秘密保护的数据就会被泄露。遵循以下准则:

如果应用程序在浏览器和服务器之间传输敏感信息,请考虑使用安全套接字层(SSL)。有关如何使用SSL保护站点的详细信息,请参阅http://..microsoft.com的Microsoft知识库中的文章Q307267“HOW TO:使用Windows 2000中的安全套接字层保护XML Web服务”。

使用受保护的配置来保护配置文件(如Web.config或Machine.config文件)中的敏感信息。有关更多信息,请参阅使用受保护的配置加密配置信息。

如果您必须存储敏感信息,请不要将其保留在网页中,即使是您认为人们无法看到它的表单(例如服务器代码中)。

使用System.Security.Cryptography命名空间中提供的强加密算法。

安全使用Cookies

Cookie是保持用户特定信息可用的有用方法。但是,由于cookie被发送到浏览器的计算机,因此很容易受到欺骗或其他恶意攻击。请遵循以下准则:

不要在cookie中存储任何关键信息。例如,不要在cookie中存储用户的密码,即使是临时的。通常,不要在cookie中保存任何可能损害应用程序的东西(如果被欺骗)。相反,在cookie中保留对服务器上信息所在位置的引用。

将Cookie的有效期设置为最短的实际时间。尽可能避免永久性Cookies。

考虑加密cookie中的信息。

考虑将cookie上的Secure和HttpOnly属性设置为true。

防范拒绝服务威胁

恶意用户可能会破坏应用程序的间接方式是使其不可用。恶意用户可能会使应用程序太忙而无法为其他用户提供服务,或者只是导致应用程序崩溃。请遵循以下准则:

使用错误处理(例如,try-catch)。包含finally块,在发生故障时释放资源。

配置IIS以使用进程限制,这可以防止应用程序耗尽不成比例的CPU时间。

在使用或存储之前测试用户输入的大小限制。

在数据库查询上放置大小保护措施。例如,在ASP.NET网页中显示查询结果之前,请确保没有不合理数量的记录。

对文件上传设置大小限制,如果这些是您的应用程序的一部分。您可以使用以下语法在Web.config文件中设置限制,其中maxRequestLength值以千字节为单位:

您还可以使用RequestLengthDiskThreshold属性来减少大型上载和表单帖子的内存开销。

文章:https://docs.microsoft.com/en-us/previous-versions/aspnet/zdh19h94%28v%3dvs.100%29

Web应用程序的基本安全实践的更多相关文章

  1. 提升 web 应用程序的性能(二)

    最佳实践 本章将略述能帮助您提升 web 应用程序性能的最佳实践. 减少 HTTP 请求数 每个 HTTP 请求都有开销,包括查找 DNS.创建连接及等待响应,因此削减不必要的请求数可减少不必要的开销 ...

  2. 渐进式Web应用程序的深入概述

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://www.grapecity.com.cn/blogs/wijmo-depth-ove ...

  3. Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net

    Atitit.提升软件Web应用程序 app性能的方法原理 h5 js java c# php python android .net 1. 提升单例有能力的1 2. 减少工作数量2 2.1. 减少距 ...

  4. Python 项目实践三(Web应用程序)第一篇

    一 Djangao入门 当今的网站实际上都是富应用程序(rich application),就像成熟的桌面应用程序一样.Python提供了一组开发Web应用程序的卓越工具.在本章中,你将学习如何使用D ...

  5. Python 项目实践三(Web应用程序)第三篇

    接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数 ...

  6. Python 项目实践三(Web应用程序)第四篇

    接着上节继续学习,本章将建立用户账户 Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方.在本章中,你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目.你还将学习 ...

  7. Python 项目实践三(Web应用程序) 第三篇

    接着上节的继续学习,现在要显示所有主题的页面 有了高效的网页创建方法,就能专注于另外两个网页了:显示全部主题的网页以及显示特定主题中条目的网页.所有主题页面显示用户创建的所有主题,它是第一个需要使用数 ...

  8. 入门实践丨如何在K3s上部署Web应用程序

    在本文中,我们将使用Flask和JavaScript编写的.带有MongoDB数据库的TODO应用程序,并学习如何将其部署到Kubernetes上.这篇文章是针对初学者的,如果你之前没有深度接触过Ku ...

  9. 构建 iOS 风格移动 Web 应用程序的8款开发框架

    使用 HTML5,CSS3 和 JavaScript 开发移动应用经过实践证明是一种可行的方式.这里收录了几款 iOS 风格的手机应用程序开发框架,帮助您使用擅长的 Web 技术来开发移动应用程序.这 ...

随机推荐

  1. laravel5.5源码笔记(七、数据库初始化)

    laravel中的数据库也是以服务提供者进行初始化的名为DatabaseServiceProvider,在config文件的providers数组中有写.路径为vendor\laravel\frame ...

  2. Lint Code 1365. Minimum Cycle Section

    这题可以看作POJ 1961 最小循环节的一个简化版本.某补习班广告贴里给出的两个指针的参考解法简直大误. 受POJ 1961的启发,把数组看作字串,观察可知,如果字串全部由循环节构成(包括最后一段是 ...

  3. mssqlserver的md5函数

    参考:https://www.cnblogs.com/JuneZhang/p/6396896.html?utm_source=itdadao&utm_medium=referral 简单说明: ...

  4. 2017-2018-1 20155222 《信息安全系统设计基础》第10周 Linux下的IPC机制

    2017-2018-1 20155222 <信息安全系统设计基础>第10周 Linux下的IPC机制 IPC机制 在linux下的多个进程间的通信机制叫做IPC(Inter-Process ...

  5. JavaWeb总结(一)

    在学习Web应用程序客户端界面设计时,我们已经知道组成一个基本的Web应用程序需要Web服务器.Web客户端浏览器.HTTP协议以及静态HTML文件. Web服务器:接收客户端请求,然后向客户端返回一 ...

  6. 【python】logging日志模块写入中文编码错误解决办法

    一.问题: 使用python的logging模块记录日志,有时会遇到中文编码问题错误. 二.解决办法: 在logging.FileHandler(path) 中添加指定编码方式 encoding='u ...

  7. R实战:grid包

    grid包是一个底层的绘图系统,能够灵活地控制图形输出的外观和布局,但是grid包不提供创建完整图形的高级绘图系统,例如,ggplot2和lattice,而是提供绘制开发这些高级绘图的基础接口,例如: ...

  8. window.location.hash 页面跳转,精确定位,实例展示:

    window.location.hash 页面跳转,精确定位,实例展示: (1).index.phtml,页面用于传参 <script id="bb_list_template&quo ...

  9. Struts 2 访问Servlet API的方式

    与Servlet API解耦的访问方式 与Servlet API耦合的访问方式 (tips:耦合既依赖) 1.    与Servlet API解耦的访问方式 2.     与Servlet API耦合 ...

  10. c# 缓存详解

    如果说要对一个站点或者应用程序经常优化,可以说缓存的使用是最快也是效果最明显的方式.一般而言,我们会把一些常用的,或者需要花费大量的资源或时间而产生的数据缓存起来,使得后续的使用更加快速. 如果真要细 ...