创建安全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. 移动端利用chrome浏览器在PC端进行调试方法

    由于最近工作中遇到需要在电脑上调试手机端的功能和样式,之前也没有遇到过,所以就各种百度和试验.最后终于功夫不负有心人,成功了.(那一刻心情真滴很鸡冻啊~~~~~~~~~).所以暂时记录下来.以免鸡冻过 ...

  2. hadoop体系架构

    1.1          Hadoop 概念:hadoop是一个由Apache基金会所开发的分布式系统基础架构.是根据google发表的GFS(Google File System)论文产生过来的. ...

  3. python3爬虫-通过selenium获取到dj商品

    from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.c ...

  4. 深入虚拟内存(Virtual Memory,VM)

    我们应该知道物理内存(Physical Memory)指的是硬件上的内存,即 RAM.它通常指的是插在主板上的内存条,给进程提供临时数据存储的设备.因为 CPU 可以直接从物理内存中读取数据和指令,所 ...

  5. goalng nil interface浅析

    0.遇到一个问题 代码 func GetMap (i interface{})(map[string]interface{}){ if i == nil { //false ??? i = make( ...

  6. 20145207《Java程序设计》实验五(网络编程与安全)实验报告

    <Java 程序设计>实验五(网络编程与安全)实验报告 目录 改变 网络编程与安全实验要求 实验成果 课后思考 改变 修改了之前仅仅是贴了图片,连代码都没粘的状态.不过这篇博客我只能做到写 ...

  7. 学习和使用STL

    STL是一个标准规范,它只是为容器.迭代器和泛型算法等组件定义了一整套统一的上层访问接口及各种组件之间搭配运用的一般规则,而没有定义组件底层的具体实现方法. STL主要包括下面这些组件:I/O流,st ...

  8. anaconda 及python pip安装 类库等问题收集

    在win7下 通过anaconda安装jieba 报如下错误: 问题1:TypeError: parse() got an unexpected keyword argument 'transport ...

  9. SpringBoot日记——登录与拦截器篇

    之前的文章我们把登录页写了出来,但是想要让登录现实他的基本功能,要如何做呢?本篇文章就来帮你实现第一步,让登录页对账号密码做校验,并且完成登录跳转. LoginController 1. 要实现登录, ...

  10. 【SIKIA计划】_05_Unity5.3开发2D游戏笔记

    一.界面基本操作 01.Project基本分类[Audios]音效[Material]材质[Prefabs]预制[Scenes]场景[Scripts]脚本[Sprites]精灵 02.Project丶 ...