在本文中,我们将讨论一个重要主题,Python 中的安全性

我们经常从 PyPi 下载和安装软件包,但我们不确定它们可能带来的漏洞。

因此,在本教程中,我们将学习一个名为 Snyk 的很棒的工具,它可以帮助我们找到代码中的漏洞,然后修复它们。所以让我们开始吧!

什么是 Snyk?

Snyk(发音为 sneak)是一个开发人员安全平台,用于保护代码、依赖项、容器和基础设施即代码。所以它的作用是扫描你的代码,通读它并告诉你代码中是否有任何漏洞。现在它不仅可以检查您的代码,还可以检查已安装的依赖项、Docker 容器、基础设施即代码以及其他一些内容。它与许多语言兼容,并带有不同 IDE 支持的插件。因此,它基本上是您代码的语法。

Snyk 入门

首先,您需要在 Snyk 上创建一个帐户。前往https://snyk.io/并注册一个免费帐户。我建议您通过 Github 登录。注册后,您可以登录到您的帐户。登录后,您将能够看到类似的仪表板。

现在您可以访问这个链接并按照说明下载 Snyk CLI。有多种方法可以下载 Snyk CLI。您可以继续使用其中任何一个。

现在,如果您在这里,我假设您已经使用任何可用方法安装了 Snyk CLI。现在我们需要做的是使用 Snyk CLI 对自己进行身份验证。为此,请在终端中运行以下命令:

snyk auth

当您运行该命令时,将在您的默认浏览器中打开一个身份验证页面,如下所示:

只需单击 Authenticate 按钮并等待页面显示成功消息。看到消息后,您可以转到终端,在那里您会找到类似的输出,如下所示:

现在,Synk CLI 已连接到您的帐户。

在 Demo App 中查找漏洞

出于演示目的,我们将使用一个用 Django 编写的名为 PyGoat 的 Web 应用程序。很多漏洞已经被故意添加到应用程序中,所以我们可以围绕它有一个很好的 Snyk 演示。

这是 Github 存储库的链接:https://github.com/purpledobie/pygoat。打开存储库链接,单击 Fork,然后将分叉的存储库克隆到本地计算机。当您浏览存储库时,您会发现 Dockerfile、Infrastructure as Code 文件以及标准 Python 文件。稍后我们将浏览这些文件。您可以从 requirements.txt 文件安装 Python 依赖项。

pip install -r requirements.txt

Snyk 插件

Snyk 有可用于不同 IDE 的插件,例如 Eclipse、VS Code、Jetbrains(PyCharm、IntelliJ 等)。因为,我在 VS Code 上,所以我在我的 IDE 上安装了 Snyk 扩展。你可以为你的 IDE 做同样的事情。

安装扩展程序后,您可能需要再次进行身份验证。一旦通过身份验证,插件将开始自动扫描代码,几秒钟后,它将显示类似以下的结果:

可以看到代码中有很多18个代码安全漏洞和2个代码质量问题。每个问题或漏洞旁边都有一个图标。它可以是 CHML 表示 CriticalHighMedium 和 **Low ** 分别。您可以单击其中任何一个以了解更多信息,它甚至会针对问题或漏洞提出修复建议。

Snyk CLI 命令

我们已经运行了一个 Synk CLI 命令,即 snyk auth 来向 Snyk 验证我们自己。现在让我们看看其他一些重要的命令。

1.snyk test

此命令将扫描代码并向您显示任何漏洞。让我们运行它,看看我们得到了什么输出:

您可以看到它已经完成扫描并发现了相同的漏洞。这些漏洞再次被标记为低、中、高和严重。除此之外,它还为我们提供了解决问题的建议。例如,如果您看到上图,它建议我们将 Django 从版本 3.1.12 升级到 3.2.13 以解决很多问题。让我们升级 Django,然后重新扫描应用程序以查看这些漏洞是否已修复。

让我们首先使用以下命令将 Django 版本升级到 3.2.13:

pip install django==3.2.13

你会得到类似的输出:

现在让我们使用snyk test命令重新扫描代码。

现在,如果您注意到,我们没有 SQL 注入等漏洞。

2.snyk monitor

该命令的作用是扫描代码并将其快照上传到 Snyk UI 或 Snyk 平台。让我们首先运行命令:

该命令已拍摄项目快照并将其上传到 Snyk 平台。然后它为我们提供了一个 URL,我们可以在其中看到有关该项目的许多其他信息。如果你打开 URL,你会看到一个类似的页面:

现在更容易看到应用程序中的漏洞。您还可以通过单击 Retest Now 链接重新测试应用程序。您还可以查看应用程序的 FixesDependencies

3.扫描基础设施即代码

如果您查看该项目,您会发现一个名为 infrastructure 的文件夹。其中,我们有 application-load-balancer 文件夹。因此,该项目可以部署到 AWS 负载均衡器。有一个 Python 文件app.py实际上会生成一个模板,用于在 AWS 上配置负载均衡器。然后在 cdk.out 文件夹中,您可以找到由 Python 代码生成的 LoadBalancerStack.template.json 文件。

为了在部署之前扫描任何错误配置,我们实际上可以使用 Snyk 测试这个文件。相同的命令是:

snyk iac test <template-file-path>

让我们运行并查看输出:

它显示了模板文件中的所有问题和漏洞。

4.扫描 Dockerfile 和 Docker 镜像

在项目中,我们确实有一个 Dockerfile。您可以使用以下命令从 Dockerfile 构建 Docker 映像:

docker build -t pygoat .

您可以在下面看到正在创建的图像:

构建映像后,您可以使用以下命令扫描漏洞:

docker scan pygoat

Snyk 与 Docker 的集成使得扫描变得异常简单。

您将获得如下输出:

输出非常大,无法显示所有内容。但是我们可以看到图像中的漏洞。

Snyk 与 Github 集成

Snyk 可以自动为您解决问题。当您将 Github 存储库链接到 Snyk 时,它将扫描整个项目,如果它有针对任何漏洞的修复,它将创建一个带有修复的 Pull Request。这不是很神奇吗?

由于我们已经使用 Github 登录,因此 Snyk 已经可以访问我们的存储库。我们只需要选择我们想要扫描的存储库。

单击添加项目按钮,然后单击 Github 并选择您的存储库。

添加项目后,您可以在仪表板上找到它。 Snyk 将自动扫描项目。看到问题后,您将看到一个修复此漏洞(针对每个漏洞)或修复这些漏洞(针对修复所有漏洞)按钮。

当你点击它时,你会看到这个页面:

您可以选中复选框来修复要修复的漏洞,然后单击 Open a Fix PR 按钮。单击它后,将在您的存储库中创建一个带有修复程序的 PR。

! zoz100076](https://res.cloudinary.com/dlomjljb6/image/upload/v1/media/blog/uploads/2022/05/20/screenshot-2022-05-20-204526_xbzqfo)

现在您可以自由合并或拒绝拉取请求。

结论

在本文中,我们了解了 Snyk,这是一个可以帮助我们发现漏洞并修复它们的工具。这只是一个基本的概述。还有很多要了解的。

谢谢阅读!您可以在Twitter上关注我或查看我的博客。

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐