强化Asp.Net Core Web应用程序和API的完整指南

敬礼,哈布罗夫派!“ C#ASP.NET Core Developer”课程开始之前,我们已经为您准备了一份有用的指南翻译










每次.Net Core更新时,Microsoft证明.Net Core是可用于开发功能强大的桌面移动Web应用程序的功能最强大,功能最全,最完整的框架。与桌面或移动应用程序不同,Web应用程序在公共地址上运行,这是Web应用程序的安全性非常重要的原因之一。尽管Asp.Net Core在设计时考虑到了安全最佳实践,但是在发布Asp.Net Core之前和之后,仍应注意一些漏洞。应用程序。



在本文中,我们将研究Asp.Net Core Web应用程序及其可能的解决方案中的几个安全漏洞 让我们列出一些重要的开始出于安全考虑,我们的.Net核心应用



  1. 使您的登录更安全
  2. 仅传输加密的敏感数据
  3. 记得在退出时清除cookie
  4. 一律使用SSL
  5. 切勿在数据库中明确存储敏感数据
  6. 审核跟踪和日志记录非常重要
  7. 切勿将原始技术错误暴露给最终用户
  8. 跨站点脚本(XSS)
  9. 尝试隐藏.Net Core的版本
  10. 跨站请求伪造(CSRF)
  11. LINQ可以防止SQL注入
  12. 反序列化期间添加检查
  13. 始终保持最新版本的框架和库


1.使您的登录更安全



登录页面是任何应用程序的前门。考虑像管理面板这样的应用程序。如果未经授权的人可以访问您的应用程序,则他们可以控制整个系统。因此,您的第一步应该始终是使登录更加安全。





这里有一些保护应用程序入口点的技巧。



使用复杂的帐户



切勿使用诸如admin之类的用户名诸如12345之类的密码或您的姓名或个人信息。任何人都可以利用此漏洞,并且该漫游器将能够在极短的时间内获取此类凭据。保护用户免受登录攻击蛮力攻击是最常见的攻击类型,它使用各种算法来暴力破解用户名密码组合







为了猜测登录凭证。另外,大量的登录尝试可能会使您的服务器超载,这可能导致DoS(拒绝服务)和应用程序的实际用户停机。



蛮力攻击花费较少的时间来猜测简单的用户名密码,但是它们也可以使用琐碎的蛮力攻击来猜测复杂的组合。



那么,如何保护Asp.Net应用程序免受暴力攻击呢?



以下是一些防止暴力攻击的提示



  • 在您的登录页面上使用验证码,因为机器人尚无法处理验证码。
  • IP .
  • , admin user, .
  • , (A-Z a-z), (0-9) (!, @,., #, $,%, ^, &, * ..).


如何执行以上建议?



对于初学者Asp.Net Core开发人员而言,上述准则似乎很难实施,但是请不要担心,这里有一个出色的HackerSpray可以帮助您保护工作免受暴力攻击。您需要做的就是配置它。



始终使用.NET核心身份



Asp.Net Core具有许多内置库和工具来保护您的应用程序。授权还具有Microsoft的出色实现,它使我们可以根据安全最佳实践对登录和注册进行完全自定义。



2.仅以加密形式传输敏感数据



切勿将您的敏感信息(例如密码信用卡凭据)显式发送到服务器进行验证。黑客可以通过在将数据发送到服务器之前对其进行拦截来窃取这些数据



始终在客户端使用md5SHA256之哈希算法作为密码,在客户端使用AESDES之类的加密算法,例如使用jQuery





3.记得在退出时清除Cookie



登录Asp.Net Core应用程序时,我们将一些必要的数据保存在Session中,以保持用户的登录状态,直到用户注销为止。在某些应用程序中,当用户勾选表示希望保持登录页面登录状态的复选框时,我们设置会话超时,有时没有设置



同时,将AspNetCore.Session cookie添加到浏览器,以跟踪已登录的用户。







因此,当我们注销时,由于黑客,我们还需要从浏览器中删除由我们的应用程序创建cookie。可能使用此信息进行未经授权的登录。这也称为会话固定攻击



4.始终使用SSL



SSL代表安全套接字层使用非常复杂的密钥来加密客户端和服务器之间的通信。



你可以简单地告诉Asp.Net核心应用程序的Starup.cs来始终使用安全cookie政策。





5.切勿在数据库中明确存储敏感数据



几乎每个用于存储用户数据的Web应用程序都需要一个数据库黑客在大多数情况下都会通过攻击来窃取该用户数据。因此,假设您将用户的凭据(例如密码和账单说明)详细而干净地存储在数据库中。事实证明,任何人未经授权访问您的数据库都可以出于个人私利目的使用此数据。



因此,请始终使用哈希加密将敏感数据存储在数据库中





6.审计跟踪和日志记录非常重要



审核跟踪活动日志对于了解应用程序中发生的事情非常重要。如果有人生成大量失败的登录尝试,则管理员应该收到一封电子邮件,通知他。



例如,无论用户创建应用程序用户的新实例还是更改现有用户的角色,其所有操作都应反映在Asp.net Core应用程序的日志中







7.切勿将原始技术错误暴露给最终用户。



一些异常可能会揭示有关您的应用程序的重要信息,甚至有时会最终用户显示几行代码攻击者很聪明,他们可以使用您的异常提供的信息来入侵您的应用程序。



因此,在将应用程序部署到生产环境之前,请确保已创建一个页面以向用户显示所有类型的异常错误,并将错误正确地保存在应用程序的日志中







8.跨站点脚本(XSS)



XSS(跨站点脚本)攻击中,黑客通过输入字段发送恶意脚本来窃取用户凭据和其他敏感数据。



假设我们有一种将产品添加到应用程序的表单。黑客添加了一个新产品,并在产品描述字段中仅插入了一段JavaScript代码。当我们的应用程序在产品页面上显示带有说明的产品时,黑客的恶意脚本也将运行,并且它将接收所需的数据。



我在Cloudflare的XSS文章中找到了下面的图像。这将帮助您更轻松地提交XSS。







那么,如何保护我们的Asp.Net Core应用程序免受跨站点脚本攻击?



您可以按照以下提示保护Web应用程序:



  • 在客户端和服务器端都使用正则表达式,并且仅将经过验证的数据存储数据库中
  • 使用Razor进行HTML加密有助于处理此类脚本。
  • XXS也可以通过URL加密来完成,因此请检查URL参数并使用UrlEncoder对其进行加密


这是Microsoft撰写的一篇很棒的文章,内容涉及保护您的应用程序不受XSS攻击。



9.尝试隐藏您的.Net Core版本



服务器收到的每个HTTP响应中,响应于浏览器发送的请求,我们始终收到有关应用程序开发版本的信息。此类信息使攻击者更容易工作,节省了时间,并使攻击者可以针对特定版本的.Net通过隐藏有关.Net Framework版本的信息



,有必要为黑客创造更多障碍,并使他们的工作更加困难这是隐藏.Net Core版本的方法







  • 从响应标题中删除X-Powered-By。
  • <a href="https://www.nuget.org/packages/NWebsec.AspNetCore.Middleware/">NWebsec.AspNetCore.Middleware


安装AddServerHeader = false以删除服务器:Kestrel标头。



您可以使用以下简单的代码段删除X-Powered-Byweb.config



<httpProtocol>
 <customHeaders>
   <remove name="X-Powered-By" />
 </customHeaders>
</httpProtocol>


10.跨站点伪造请求(CSRF)



你知道属性的目的,[ValidateAntiForgeryToken]在你的.Net核心Web的API也许你也注意到了代码,asp-antiforgery="true"在你的cshtml文件吗?



首先,我们需要了解CSRF(跨站请求伪造或XSRF),然后我们将尝试了解上述标记和属性的目的。



假设您正在使用银行帐户中的电子银行向您的朋友汇钱,突然之间,您从一个头像漂亮的女人那里获得了FaceBook链接当您打开此链接时,它要求您单击此处以赚取$ 1000... 您只需单击,并且由于您已登录并有权使用您的电子银行,所以此恶意链接运行脚本并将资金从您的帐户发送到黑客的帐户。



下图清楚地说明了CSRF。







如何保护您的应用程序免受CSRF的侵害?



asp-antiforgery="true"创建一个防伪令牌,并[ValidateAntiForgeryToken]在服务器端验证该令牌是否有效,并保护您免受跨站点请求伪造的侵害



11. LINQ可以防止SQL注入



SQL注入是多年来损害用户数据的最常用技术之一。



在这种方法中,黑客在输入字段中放置了一些条件字符或特殊字符,这会导致整个请求更改执行。



这是什么是SQL注入的一个好例子





如何保护您的Asp.Net Core应用程序免受SQL注入?



这里有一些提示:



  • 使用实体框架核心
  • 始终使用参数化查询。
  • 始终验证服务器端输入。
  • 使用存储过程。


12.在反序列化期间添加检查



反序列化与序列化相反,序列化是将对象转换为字节流的过程。序列化总是在服务器端执行,以传输或存储对象,并且我们反序列化从各种来源在应用程序中接收的数据。





因此,我们对许多有害电流持开放态度。



为了保护您的应用程序免受攻击者的侵害,我们需要在反序列化之前和之后验证数据。



13.始终保持最新版本的框架和库



始终更新项目中使用框架和库切勿在项目中使用过时的库,因为攻击者会不断在其中发现漏洞



检查项目中使用的NuGet软件包的更新,并定期进行更新。





结论



没有什么是100%安全的,但是我们必须通过遵循最佳实践来使我们的应用程序尽可能地安全。尽管.Net Core被认为是最安全的平台之一,但我们仍然需要监视应用程序中的活动并在发生任何恶意活动时迅速采取措施。



感谢您阅读我的文章,希望它能激发您考虑使Asp.Net Core应用程序更安全的想法



如果您想在下面的评论部分中留下您的反馈,我们将非常高兴。



以下是一些您可能会感兴趣的文章:








了解有关该课程的更多信息






:






All Articles