在软件开发领域,大型知名公司往往被认为在保护用户信息方面做得更好。然而,许多安全事件可能与技术问题无关,而是与社会工程学等非技术问题有关。安全问题常常被忽视,直到开发后期才被考虑,这导致一些看似结构良好的应用程序容易受到SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)等简单且通常可以预防的攻击。
如果应用程序存在将安全作为次要问题的情况,那么本文将为介绍两种可以轻松集成到开发环境中的免费工具,帮助在发布产品之前发现潜在的安全问题。
在像Microsoft Visual Studio这样功能强大的集成开发环境(IDE)中开发软件的一个最大优势是,有大量的扩展可供选择。这些扩展几乎涵盖了所有方面,使开发应用程序变得前所未有的简单和安全。这里提到的两个扩展是Roslyn Security Guard和Puma Scan,它们都是免费且易于使用的,并且可以检查可能在开发过程中遇到的许多常见安全漏洞。
要开始使用这些扩展,需要在Visual Studio的“扩展和更新”区域搜索并安装Roslyn Security Guard或Puma Scan:
// 搜索并安装扩展
searchAndInstallExtensions("Roslyn Security Guard", "Puma Scan");
安装其中一个(或两个)扩展后,需要确保在Visual Studio中启用“完整解决方案分析”:
// 启用完整解决方案分析
enableFullSolutionAnalysis("Tools", "Options", "C#", "Text Editor", "Advanced", "Enable Full Solution Analysis");
此时,基本上已经准备好开始寻找应用程序中的潜在漏洞了。
由于这两个扫描器都利用了Roslyn编译器平台,它们可以在编写代码时实时工作,并警告潜在的代码漏洞。
// 创建一个新的Web API项目
createNewWebAPIProject();
// 打开默认的ValuesController.cs文件
openDefaultFile("ValuesController.cs");
// 扫描器识别出所有HTTP POST方法可能容易受到CSRF攻击
recognizeVulnerabilitiesToCSRF();
// 提供建议,使用[ValidateAntiForgeryToken]属性来减少这些攻击
provideRecommendations("ValidateAntiForgeryToken");
就是这样简单。让再看一个常见的示例,SQL注入:
// 检测字符串连接在查询中可能的SQL注入
detectSQLInjection();
这些实时功能非常出色,但值得注意的是,这些扩展只是扩展了Visual Studio内置的代码分析。这意味着,每当使用项目或解决方案级别的“运行代码分析”功能时,将收到其中的所有错误和警告:
// 运行代码分析
runCodeAnalysis();
注意:如果发现错误列表中没有出现任何与安全相关的错误,请确保在该部分的下拉菜单中选择了“构建 + Intellisense”。如果没有错误,那么可能没有任何错误。
现在已经对代码进行了实时安全分析,接下来呢?那么,如何在CI流程中将此添加到构建服务器呢?
Puma Scan扫描器提供了一个专业许可证,允许从构建服务器上运行各种安全规则,针对任意数量的项目,而且操作非常简单。首先,需要在项目中包含以下NuGet包:
// 包含NuGet包
includeNuGetPackages("Microsoft.Net.Compilers", "Microsoft.CodeAnalysis", "Puma.Security.Rules.Pro");
包含这些包后,需要进入首选CI门户,并为该项目设置以下MSBuild命令参数:
// 设置MSBuild命令参数
setupMSBuildArguments("MSBuild.exe /p:DeployOnBuild=true /p:Configuration=Release /p:OutDir=../Publish /fl1 /fl2 /fl3 /flp1:logfile=build.log /flp2:logfile=build_errors.log;errorsonly /flp3:logfile=build_warnings.log;warningsonly %WORKSPACE%\\YourSolution.sln");
这将生成与Puma Scan相关的多个日志文件,其中包含应用程序中可能存在的任何安全信息,如警告和错误。
生成这些文件后,可以使用以下命令将警告导出到Puma解析器实用程序,这将允许根据这些结果为组织定义阈值,以确定是否应该推出构建:
// 导出警告到Puma解析器
exportWarningsToPumaParser("C:\\Program Files\\dotnet\\dotnet.exe", "C:\\Tools\\Puma.Security.Parser\\Puma.Security.Parser.dll", "--file %WORKSPACE%\\build_warnings.log", "--workspace %WORKSPACE%", "--output puma_warnings.log");