零、序言

ASP.NET Core正迅速成为开发人员选择的 web 应用框架,目前在平台流行度中名列前茅。当 ASP.NET Core web 应用成为恶意攻击的目标时,也不例外。随着越来越多的 web 开发人员编写代码来创建这些 ASP.NET Core web 应用,培训开发人员编写安全代码的需求也在增加。

使用安全代码开发的 ASP.NET Core 应用可以抵御攻击并帮助降低其被利用的风险。有了修复代码中安全缺陷的正确指导,ASP.NET Core web 应用可以防止或停止安全问题。

本书介绍了用 C#编写的代码示例,以及修复通过安全代码检查或安全测试发现的各种 ASP.NET Core web 应用漏洞的步骤。您将找到一些实用的示例和不同的方法来解决配方样式格式的不安全代码引入的安全漏洞。

本书以一章介绍安全编码的基础知识开始,但随后的内容采用 OWASP Top 10(2017 版)模式。OWASP Top 10 实际上是 web 应用最常见风险的标准文档。

本书中的每一章(从第 2 章开始,注入缺陷)代表了每种类型风险的问题解决内容。第 12 章中,杂项漏洞重点关注之前在 OWASP 前 10 名中的各种其他漏洞,以增加覆盖范围。最后一章讨论了安全编码的最佳实践。

在本书结束时,您将能够识别 ASP.NET Core web 应用中不同类型的漏洞,并掌握如何在代码中修复这些漏洞。

这本书是给谁的

本书面向使用 ASP.NET Core 框架开发 web 应用的开发人员和软件工程师。本书是初学者和有经验者的理想之选,它将指导初学者学习编写安全代码的必要基础,并指导经验丰富的人将其作为逐步 ASP.NET Core 安全编码方法的快速来源。

这本书对于希望通过代码保护 ASP.NET Core 应用的详细信息的应用安全工程师来说也是非常好的,它将帮助他们理解如何修复他们每天执行的安全测试发现的问题。

这本书涵盖的内容

第一章安全编码基础是关于每个 ASP.NET Core 开发人员都必须知道的基本安全编码模式。

第 2 章注入缺陷探讨了各种注入缺陷的解决方法,如 SQL 注入、NoSQL 注入、命令注入、LDAP 注入和 XPath 注入。

第 3 章已破坏的身份验证介绍了漏洞的解决方法,这些漏洞主要集中在凭据保护不足、用户枚举、密码要求弱以及会话到期时间不足等方面。

第 4 章敏感数据公开展示了如何在我们的 ASP.NET Core web 应用中实现 HTTPS,启用 HST,确保应用了最新版本的 TLS,并保护加密密钥以防止数据泄漏

第 5 章XML 外部实体介绍了补救恶意 XML 外部实体的方法。本章解释了一个关于 XXE 注入的不安全代码片段示例。将讨论如何修复 XXE 注入的说明。

第 6 章断开的访问控制探索了使用 ASP.NET Core 中内置授权机制的方法,以及实现基于角色的授权以防止未经授权访问 web 应用中的资源的步骤。

第 7 章安全配置错误,讨论了通过关闭代码中的调试、添加安全功能以及通过正确的应用设置阻止不必要的信息泄漏给窥探攻击者来防止安全配置错误的方法。

第 8 章跨站点脚本介绍了修复不同类型 XS 的方法。本章解释反射、存储和 DOM XSS 的不安全代码。本章还解释了如何修复代码中的这些跨站点脚本漏洞。

第 9 章不安全反序列化介绍了如何使用正确配置的库安全地反序列化输入,减轻过时的.NET 类给 ASP.NET Core web 应用带来的风险,并使用更好的反序列化器替代方案来安全地反序列化数据流。

第 10 章使用具有已知漏洞的组件讨论了修复 ASP.NET Core web 应用的方法,这些应用使用具有已知漏洞的组件。

第 11 章日志记录和监控不足,探讨了解决 ASP.NET Core web 应用中日志记录和监控不足的方法,并解释了这些功能的缺失如何使 web 应用面临风险。

第 12 章杂项漏洞讨论了修复 OWASP 前 10 名列表中不再存在的漏洞的方法以及各种 ASP.NET Core web 应用漏洞。

第 13 章最佳实践介绍了最佳实践配方,这些配方具有经过验证的模式,可实现 ASP.NET Core 安全功能。

充分利用这本书

使用本书的 GitHub 存储库中的示例在线银行 web 应用,按照食谱进行操作。每个配方都有一个beforeafter文件夹。您将从before文件夹开始使用每个配方,并以样本网上银行 web 应用的初始版本为起点。after文件夹将作为验证所有步骤是否正确执行的参考。

本书中的所有配方都使用 Windows 进行了测试。除了需要仅在 Windows 中运行的软件和插件的配方外,大多数配方也应该在 Linux 和 macOS 中工作(ASP.NET Core 是一个跨平台的 web 框架)。

如果您使用的是本书的数字版本,我们建议您自己键入代码或通过 GitHub 存储库访问代码(下一节提供链接)。这样做将帮助您避免与复制和粘贴代码相关的任何潜在错误。

在 Twitter 上关注作者(可能会让你受益匪浅 https://twitter.com/securecodeninja )或将其添加为 LinkedIn 中的连接(https://www.linkedin.com/in/romancanlas

**## 下载示例代码文件

您可以从 GitHub 的下载本书的示例代码文件 https://github.com/PacktPublishing/ASP.NET-Core-Secure-Coding-Cookbook 。如果代码有更新,它将在现有 GitHub 存储库中更新。

我们的丰富书籍和视频目录中还有其他代码包,请访问https://github.com/PacktPublishing/ 。看看他们!

下载彩色图片

我们还提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图像。您可以在这里下载:https://static.packt-cdn.com/downloads/9781801071567_ColorImages.pdf

使用的约定

本书中使用了许多文本约定。

Code in text:表示文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。下面是一个示例:AddTransient方法允许我们的自定义验证器CustomerValidator被 ASP.NET Core 发现

代码块设置如下:

  if (result.Succeeded)
  {
    _logger.LogInformation("User logged in.");
    return LocalRedirect(returnUrl);
  }

当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:

var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: true);

任何命令行输入或输出的编写方式如下:

git clone https://github.com/PacktPublishing/ASP.NET-Core-Secure-Coding-Cookbook.git
  1. Bold: Indicates a new term, an important word, or words that you see onscreen. For example, words in menus or dialog boxes appear in the text like this. Here is an example: "Select one record and click its Edit link."

    提示或重要提示

    看起来像这样。

    章节

    在这本书中,你会发现几个经常出现的标题(准备就绪如何做……如何工作……还有更多……另见

    要明确说明如何完成配方,请使用以下部分:

    准备好了吗

    本节告诉您配方中的预期内容,并介绍如何设置配方所需的任何软件或任何初步设置。

    怎么做…

    本节包含遵循配方所需的步骤。

    它是如何工作的…

    本节通常包括对上一节中发生的情况的详细解释。

    还有更多…

    本节包含有关配方的附加信息,以使您更了解配方。

    另见

    本节提供了有关配方的其他有用信息的有用链接。

    联系

    我们欢迎读者的反馈。

    一般反馈:如果您对本书的任何方面有疑问,请在邮件主题中注明书名,并发送电子邮件至customercare@packtpub.com

    勘误表:尽管我们已尽一切努力确保内容的准确性,但还是会出现错误。如果您在本书中发现错误,如果您能向我们报告,我们将不胜感激。请访问www.packtpub.com/support/errata,选择您的书籍,单击 errata 提交表单链接,然后输入详细信息。

    盗版:如果您在互联网上发现我们作品的任何形式的非法复制品,请您提供我们的位置地址或网站名称,我们将不胜感激。请致电与我们联系 copyright@packt.com带有指向该材料的链接。

    如果您有兴趣成为一名作家:如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请访问authors.packtpub.com

    分享你的想法

    一旦您阅读了ASP.NET Core 5 安全编码烹饪书,我们很想听听您的想法!请点击此处,直接进入本书的亚马逊评论页面,并分享您的反馈。

    您的评论对我们和技术界都很重要,将帮助我们确保提供高质量的内容。**