本教程的早期版本由Melissa Anderson编写。 介绍 MongoDB,也称为Mongo,是许多现代 Web 应用程序中使用的开源文档数据库。它被归类为NoSQL 数据库,因为它不依赖于传统的基于表的关系数据库结构。相反,它使用具有动态模式的类似 JSON 的文档。 MongoDB 默认不启用身份验证,这意味着任何有权访问安装数据库的服务器的用户都可以不受限制地添加和删除数据。为了保护此漏洞,本教程将引导您创建管理用户并启用身份验证。然后,您将进行测试以确认只有该管理用户有权访问数据库。 先决条件 要完成本教程,您将需要以下内容: 要完成本教程,您需要一台运行 CentOS 8 的服务器。该服务器应具有具有管理权限的非 root 用户和配置为firewalld. 要进行设置,请遵循我们的 CentOS 8 初始服务器设置指南。 MongoDB 安装在您的服务器上。本教程使用 MongoDB 版本4.4进行了验证,但它通常也适用于旧版本的 MongoDB。要在您的服务器上安装 Mongo,请按照我们关于如何在 CentOS 8 上安装 MongoDB 的教程进行操作。 第 1 步 – 添加管理用户 自3.0版本发布以来,MongoDB 守护进程被配置为仅接受来自本地 Unix 套接字的连接,并且不会自动向更广泛的 Internet 开放。但是,默认情况下仍禁用身份验证。这意味着可以访问安装了 MongoDB 的服务器的任何用户也可以完全访问数据库。 作为保护此漏洞的第一步,您将创建一个管理用户。稍后,您将启用身份验证并以此管理用户身份连接以访问数据库。 要添加管理用户,您必须首先连接到 Mongo shell。因为身份验证被禁用,您可以使用该mongo命令执行此操作,而无需任何其他选项: mongo Mongo shell 提示上方会有一些输出。因为您还没有启用身份验证,这将包括一个警告,指出未为数据库启用访问控制,并且对数据和数据库的配置的读写访问不受限制: ..
Category : 教程系列
介绍 该charts_flutter库是一个“用 Dart 原生编写的材料设计数据可视化库”。您可以在 Flutter 应用程序中使用此库将数据显示为条形图、折线图、散点图、饼图等。 在本文中,您将使用 2008 年到 2015 年之间的《魔兽世界》订阅者数量数据,并使用charts_flutter. 先决条件 要完成本教程,您需要: 下载并安装Flutter。 下载并安装Android Studio 或 Visual Studio Code。 建议为您的代码编辑器安装插件: Flutter和Dart为 Android Studio 安装的插件。 Flutter 为 Visual Studio Code 安装的扩展。 本教程已通过 Flutter v1.22.2、Android SDK v31.0.2 和 Android Studio v4.1 验证。 步骤 1 — 设置项目 为 Flutter 设置环境后,您可以运行以下命令来创建新应用程序: flutter create charts_flutter_example 导航到新的项目目录: cd charts_flutter_example 使用flutter ..
作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。 介绍 网站的性能部分取决于用户浏览器必须下载的所有文件的大小。减少这些传输文件的大小可以使您的网站更快。对于那些在按流量计费的连接上支付带宽使用费的人来说,它还可以使您的网站更便宜。 gzip是一种流行的数据压缩程序。您可以将 Nginx 配置为用于动态gzip压缩它提供的文件。然后,这些文件在检索时由支持它的浏览器解压缩,不会有任何损失,但好处是在 Web 服务器和浏览器之间传输的数据量较少。好消息是压缩支持在所有主要浏览器中无处不在,没有理由不使用它。 由于压缩的一般工作方式和gzip工作原理,某些文件比其他文件压缩得更好。例如,文本文件压缩得非常好,通常会缩小两倍以上。另一方面,JPEG 或 PNG 文件等图像的性质已经被压缩,使用二次压缩gzip产生很少或没有结果。压缩文件会占用服务器资源,因此最好仅压缩将受益于减小大小的文件。 在本教程中,您将配置 Nginx 以使用gzip压缩。这将减少发送给您网站访问者的内容大小并提高性能。 先决条件 要学习本教程,您需要: 一台 Ubuntu 20.04 服务器,具有 sudo 权限的普通非 root 用户。您可以按照此初始服务器设置教程学习如何准备您的服务器。 按照我们的教程如何在 Ubuntu 20.04 上安装 Nginx,在您的服务器上安装 Nginx。 步骤 1 — 创建测试文件 在这一步中,我们将在默认的 Nginx 目录中创建几个测试文件。稍后我们将使用这些文件来检查 Nginx 的默认gzip压缩行为,并测试配置更改是否具有预期效果。 为了推断网络上提供的文件类型,Nginx 不会分析文件内容;那将是非常缓慢的。相反,它查找文件扩展名以确定文件的MIME 类型,这表示其用途。 由于这种行为,我们的测试文件的内容是无关紧要的。通过适当命名文件,我们可以让 Nginx 认为,例如,一个完全空的文件是一个图像,另一个是样式表。 创建一个test.html在默认 Nginx 目录中命名的文件,使用truncate. 此扩展名表示它是一个 HTML 页面: ..
介绍 SSH 或安全外壳是一种加密协议,用于管理服务器并与服务器进行通信。在使用 Linux 服务器时,您可能经常将大部分时间花在通过 SSH 连接到服务器的终端会话中。 虽然登录 SSH 服务器有几种不同的方式,但在本指南中,我们将重点介绍设置 SSH 密钥。SSH 密钥提供了一种极其安全的登录服务器的方式。因此,这是我们向所有用户推荐的方法。 SSH 密钥如何工作? SSH 服务器可以使用多种不同的方法对客户端进行身份验证。其中最基本的是密码认证,它易于使用,但不是最安全的。 尽管密码以安全的方式发送到服务器,但它们通常不够复杂或不够长,无法抵御重复的、持续的攻击者。现代处理能力与自动化脚本相结合,使暴力破解受密码保护的帐户成为可能。尽管还有其他方法可以增加额外的安全性(fail2ban等),但事实证明 SSH 密钥是一种可靠且安全的替代方法。 SSH 密钥对是两个加密安全的密钥,可用于向 SSH 服务器验证客户端。每个密钥对由一个公钥和一个私钥组成。 私钥由客户端保留,应绝对保密。私钥的任何泄露都将允许攻击者登录到配置了相关公钥的服务器,而无需额外的身份验证。作为额外的预防措施,可以使用密码在磁盘上加密密钥。 相关的公钥可以自由共享而不会产生任何负面影响。公钥可用于加密只有私钥才能解密的消息。此属性用作使用密钥对进行身份验证的一种方式。 公钥上传到您希望能够使用 SSH 登录的远程服务器。该密钥被添加到您将登录的用户帐户内的一个特殊文件中,称为~/.ssh/authorized_keys. 当客户端尝试使用 SSH 密钥进行身份验证时,服务器可以测试客户端是否拥有私钥。如果客户端可以证明它拥有私钥,则会产生一个 shell 会话或执行请求的命令。 第 1 步 – 创建 SSH 密钥 为您的服务器配置 SSH 密钥身份验证的第一步是在您的本地计算机上生成一个 SSH 密钥对。 为此,我们可以使用一个名为 的特殊实用程序ssh-keygen,它包含在标准的 OpenSSH 工具套件中。默认情况下,这将创建一个 3072 位的 RSA 密钥对。 在本地计算机上,键入以下内容生成 ..
PHP 是 Rasmus Lerdorf 于 1994 年创建的一种通用编程语言。最初旨在促进使用动态组件构建网页,PHP 自首次发布以来已经经历了许多变化和改进。这些变化,再加上 WordPress(一种用 PHP 编写的免费开源内容管理系统)的流行,已帮助它成为最流行的网络编程语言之一。 流行的 PHP 框架包括 Laravel、Symfony、Zend、Slim 等。对于依赖管理,PHP 开发人员通常依赖Composer,这是现代 PHP 应用程序中依赖管理的事实标准。 要了解有关 PHP 的更多信息,请参阅我们与该语言相关的教育材料的综�..
作者选择Creative Commons接受捐赠,作为Write for DOnations计划的一部分。 介绍 在React 中,路由器帮助创建并在构成 Web 应用程序的不同 URL 之间导航。它们允许您的用户在保留用户状态的同时在应用程序的组件之间移动,并且可以为这些组件提供唯一的 URL 以使其更易于共享。使用路由器,您可以通过简化站点导航来改善应用的用户体验。 React Router是最流行的 React 路由框架之一。该库采用直观的组件设计,可让您为应用程序构建声明性路由系统。这意味着您可以准确地声明哪些组件具有特定路由。使用声明式路由,您可以创建人类可读的直观路由,从而更轻松地管理您的应用程序架构。 在本教程中,您将安装和配置 React Router,构建一组路由,并使用<Link>组件连接到它们。您还将构建动态路由,从可在组件中访问的 URL 收集数据。最后,您将使用Hook来访问数据和其他路由信息,并创建位于由父路由呈现的组件内部的嵌套路由。 在本教程结束时,您将能够向任何 React 项目添加路由并从路由中读取信息,以便您可以创建响应 URL 数据的灵活组件。 先决条件 你需要一个运行Node.js的开发环境;本教程在 Node.js 版本 10.22.0 和 npm 版本 6.14.6 上进行了测试。要在 macOS 或 Ubuntu 18.04 上安装它,请按照如何在 macOS 上安装 Node.js 和创建本地开发环境或如何在 Ubuntu 18.04 上安装 Node.js 的使用 PPA 安装部分中的步骤进行操作。 使用Create React ..
Snap 是基于 Linux 的操作系统的应用程序打包和部署系统。Snap 包括强大的沙盒和安全功能,例如文件系统隔离、自动更新和集成依赖项管理。 Snap 应用程序,称为snaps,可以使用命令行程序下载和安装,类似于APT或YUM等其他包管理系统。 有关 snap 的更多信息,您可以按照我们关于如何在 Ubuntu 18.04 上打包和发布 Snap 应用程序的指南进�..
作者选择Creative Commons接受捐赠,作为Write for DOnations计划的一部分。 介绍 在本教程中,您将使用React JavaScript 库创建带有 props 的包装器组件。包装组件是围绕未知组件并提供默认结构来显示子组件的组件。此模式可用于创建在整个设计中重复使用的用户界面 (UI) 元素,例如模态、模板页面和信息图块。 要创建包装器组件,您将首先学习使用rest 和 spread 运算符来收集未使用的 props 以传递给嵌套组件。然后,您将创建一个组件,该组件使用内置children组件将嵌套组件包装在JSX 中,就像它们是HTML元素一样。最后,您将组件作为 props 传递以创建灵活的包装器,这些包装器可以在一个组件的多个位置嵌入自定义 JSX。 在本教程中,您将构建组件以以卡片的形式显示动物数据列表。在创建灵活的包装组件时,您将学习拆分数据和重构组件。在本教程结束时,您将拥有一个工作应用程序,该应用程序将使用高级 prop 技术创建可重用组件,这些组件将随着应用程序的增长和变化而扩展和适应。 注意:第一步设置一个空白项目,您将在该项目上构建教程练习。如果您已经有一个工作项目并想直接使用 props,请从第 2 步开始。 先决条件 你需要一个运行Node.js的开发环境;本教程在 Node.js 版本 10.20.1 和 npm 版本 6.14.4 上进行了测试。要在 macOS 或 Ubuntu 18.04 上安装它,请按照如何在 macOS 上安装 Node.js 和创建本地开发环境或如何在 Ubuntu 18.04 上安装 Node.js 的使用 PPA 安装部分中的步骤进行操作。 ..
介绍 React 中的响应式路由涉及根据用户设备的视口为用户提供不同的路由。CSS 媒体查询通常用于实现此目的,但这会限制您使用 CSS 道具显示或不显示不同的元素。通过响应式路由,您现在可以直接根据不同用户的屏幕尺寸为他们提供 React 应用程序的完整独立视图。 在本教程中,我们将向您展示如何在 React 应用程序中实现路由和响应式路由。按照本教程,您将构建一个用户仪表板应用程序,该应用程序根据用户设备屏幕的大小为用户提供不同的路由。 先决条件 要完成本教程,您需要: Node.js 安装在本地,您可以按照如何安装 Node.js 和创建本地开发环境来完成。 本教程已通过 Node v14.2.0、npmv6.14.5、reactv16.3.2、react-router-domv5.2.0 和react-mediav1.10.0 验证。 步骤 1 — 设置项目 要启动您的项目,请使用npx并create-react-app创建一个新的 React 应用程序: npx create-react-app responsive-routing 然后,导航到新的项目目录: cd responsive-routing 接下来,安装成功构建此演示所需的必要模块。这些模块是react-router-dom和react-media。您可以通过运行以下命令来安装这些: npm install [email protected] [email protected] 现在,您可以通过运行以下命令来启动应用程序: npm start 注意:虽然路由不需要,但本教程使用Bulma CSS 框架进行样式和布局。 您可以使用以下终端命令添加 Bulma: npm install [email protected] 并通过将以下内容添加到您的index.js: 索引.js import ‘bulma/css/bulma.css’; ..
介绍 如果您计划使用 JavaScript 进行编码,则需要了解对象的工作原理。对象是 JavaScript 中最重要的元素之一,对对象的深入理解总是有用的。 了解如何在 JavaScript 中正确克隆对象很重要。可以创建对象的浅拷贝和深拷贝。对象的浅拷贝引用原始对象。因此,对原始对象所做的任何更改都将反映在副本中。深拷贝是原始对象所有元素的副本。对原始对象所做的更改不会反映在副本中。在本文中,您将使用Lodash 库创建对象的深层副本。 先决条件 要完成本教程,您将需要以下内容: 您的机器上安装了最新版本的 Node。要安装 Node,请按照此如何安装 Node.js教程中概述的步骤操作。 了解如何使用 npm 安装模块和包以及如何配置package.json文件。这篇文章如何使用带有 npm 和 package.json 的 Node.js 模块可以帮助你解决这个问题。 对 JavaScript 编码的基本理解,您可以在名为“如何用 JavaScript 编码”的系列中找到 步骤 1 – 通过重新分配对象创建浅拷贝 如果您创建一个接收对象并更改它的函数,您可能希望创建该对象的副本并更改该副本,而不是更改原始对象。 初始化一个新对象并将其分配给变量testObject。这个对象应该具有的信件a,b以及c作为键和1,2和3为值,分别。 在 JavaScript 中创建对象: let testObject = { a: 1, b: 2, c: 3 }; 现在,尝试通过将 分配给testObject名为 的新变量来创建此对象的副本以进行操作testObjectCopy: let testObject ..