技术项目失败的原因有百万种。商业模式计算错误、需求估计过高或成本膨胀,等等。但在我的职业生涯中,我看到不少拥有绝妙想法和良好潜力的项目因看似微小的错误和疏忽而失败。我认为这个原因是最痛苦的,至少对我这个开发人员来说是这样。在本文中,我想分享我的经验,并分析后端开发人员在 Web 应用程序中面临的问题和挑战。我将重点介绍经常被忽视的关键点,并解释如何以最高效率解决这些障碍。我相信这将帮助您最大限度地降低风险并显著提高项目成功的机会。
无论听起来多么明显,这一点都至关重要:永远不要在源代码中存储机密或敏感信息。违规可能会导致财务损失和其他严重问题。永远不应存储在代码中的敏感信息包括:
不要将此类信息存储在项目代码中,而是使用环境变量。对于更安全的系统,请考虑使用强大的秘密存储解决方案,例如
如果你认为在应用程序代码中存储敏感信息不是一个严重的问题,那么请考虑一下:仅在 2022 年,GitHub 就检测到
解决方案:立即检查你的项目
如果您已经有一个项目,现在担心代码中的机密,那么有一些方便的解决方案可以让您高枕无忧。手动检查可能很耗时,因此自动化是关键。有用的工具包括:
这些工具只是几个例子;其他流行的选择包括
令人惊讶的是,这个话题很少被讨论,一些开发人员甚至没有意识到使用第三方解决方案可能会给他们的公司带来法律问题和重大问题。不相信我?想象一下这种情况:一家小公司的开发人员在
如果项目使用的库的许可证明确禁止商业使用,也会出现严重问题。如果根本没有许可证,情况也不会好转:事实上,没有许可证会带来严重问题,因为任何代码都默认受版权保护。许可证授予用户在特定条件下使用代码的权利,但如果没有许可证,即使代码是公开的,也没有法律依据使用该代码。
值得注意的是,许可问题可能会根据您所在的司法管辖区以不同的方式影响您:这个问题对于签署了国际版权协议的国家尤其重要。例如,伯尔尼保护文学和艺术作品公约是该领域的主要国际条约之一,目前有大约 180 个成员国。因此,未经明确许可使用代码将意味着违反版权法,并可能在世界许多地方引发法律纠纷。然而,这并不意味着你应该搬到一个“舒适”的国家,只是为了违反所有书面和不成文的规定。让我们互相尊重,如果有人不希望他们的开发被用于某些目的,那么最好不要这样做,即使从人性的角度来看也是如此。
解决方案:使用自动检查和更新
如您所见,许可和版权问题很复杂。为了提前保护您自己和您的公司,最好检查您使用的库和软件的许可证。对于库来说,这并不太难;现代包管理器已经有了用于此目的的工具。例如,在 PHP composer 中,您可以使用命令 `
并且,在更新依赖项时不要忘记调用这些命令(最好自动执行这些检查),因为连接库的许可证可能会在新版本中发生变化。
在 Web 开发中,一个项目通常有多个版本,例如开发 (dev)、质量保证 (QA)、准备和生产。我经常遇到这样的情况:互联网上的任何人都可以访问网站或 Web 项目的开发/QA 和准备版本。令人担忧的是,测试版本有时比主版本更能被搜索引擎索引,这通常会损害产品。
这里的主要问题是测试版本可能包含错误或敏感信息,甚至可能泄露信息。此外,测试版通常比最终产品更容易受到黑客攻击。这意味着它们的可用性增加了攻击者获得敏感数据、内部代码甚至服务器本身访问权限的风险。如果您正在为移动应用程序之类的东西开发后端,情况尤其如此,因为未经授权访问 API 的测试版本可能非常危险。
除了安全风险之外,重复网页还会对搜索引擎排名产生负面影响。Google 等搜索引擎可能会将这些重复内容视为不良内容,从而可能降低项目原始网页的排名,甚至将其从索引中完全删除。
解决方案:从一开始就制定安全策略
不要吝惜域名。如果您需要可在线访问的测试版本,请为其购买单独的域名。这种简单但有效的措施可以降低安全风险,因为攻击者通常会先检查子域名。将您的测试版本托管在主资源的任何子域名上会使其成为一个容易攻击的目标。
限制对所有测试版本的访问。确保开发、QA、暂存和其他版本不可公开访问。例如,将它们配置为仅通过 VPN 访问。这可以降低未经授权访问的可能性,即使测试域被恶意行为者知道。
保护测试版本不被索引。即使您的测试版本只能通过 VPN 访问并托管在单独的秘密域中,也要使用“robots.txt”文件或“noindex”元标记保护它们不被搜索引擎索引。这一步至关重要,因为搜索引擎有时会以意想不到的方式找到并索引这些页面。
很多开发人员往往会忽略一些安全规则,尽管这些规则至关重要,而且是通过艰苦的教训建立起来的。其中一条规则就是始终隐藏项目的真实 IP 地址。如果可以通过域名确定服务器的 IP 地址,则可能导致以下几个问题:
DDoS 攻击:攻击者知道您项目的真实 IP 地址,可以对您的服务器发起分布式拒绝服务 (DDoS) 攻击。例如,
识别潜在漏洞:除了业余黑客,真正的黑客也可以扫描开放端口和网络暴露的软件来发现和利用漏洞。即使是像 MongoDB 这样的知名服务也曾因配置错误而发生过重大数据泄露。只需隐藏真实 IP 地址,就可以避免许多此类问题。
解决方案:让潜在攻击者的生活更加复杂
通过隐藏服务器的真实 IP 地址,攻击者可以更难攻击您的系统。使用内容分发网络 (CDN) 或 DDoS 保护服务可以非常有效。热门选项包括
虽然这些工具可以显著增强安全性,但还需要牢记以下几点注意事项:
电子邮件标头 IP 泄露:如果您使用主服务器发送电子邮件,真实 IP 地址可能会暴露在电子邮件标头中,从而使您的安全努力付诸东流。
IP 历史记录和 Whois 请求:类似以下服务
DDoS 保护和 API 端点:对用作 API 端点的域使用 DDoS 保护时要小心谨慎。保护系统可能会引入用户验证步骤,这些步骤可能会通过将 JSON/XML 响应替换为 HTML 代码来破坏客户端应用程序的运行。
传出 API 请求:当您的服务器向第三方 API 发送请求时,可能会无意中泄露其 IP 地址。使用代理服务器处理此类请求会有所帮助,因为更改代理比处理攻击后果更容易。
重要的是要记住,隐藏项目的真实 IP 地址并不是万能的。尽可能关闭软件从外部网络使用的端口至关重要。更改标准端口是一种有争议的做法;一些专家认为,它会使您的设置复杂化而没有显著的好处。通常,将软件配置为通过 Unix 套接字而不是网络 TCP 连接进行交互是更好的选择(如果您的项目和软件都在同一台服务器上运行)。这种方法不仅可以提高交互速度,还可以通过消除对开放端口的需求来增强安全性。
对于位于独立服务器上的数据库管理系统 (DBMS) 或其他内部服务,请确保访问仅限于您严格控制的特定 IP 地址。此设置可防止未经授权访问关键系统,增加额外的安全层,并最大限度地降低外部攻击和数据泄露的风险。
这条建议很简单,但又常常被忽视:定期更新项目的依赖项和服务器软件。过时且易受攻击的代码是攻击者的梦想,他们可以轻松利用它。
解决方案:自动更新
您不需要手动更新所有内容;许多自动化工具可以提供帮助。例如,
自动更新安全证书也很重要。如果您使用
\同样的原则也适用于服务器软件。如果你使用 Linux,尤其是基于 Debian/Ubuntu 的发行版,
这里提供的提示只是后端开发人员需要记住的一小部分。我选择强调一些关键但讨论较少的话题,而不是常见的话题,例如
为了更深入地了解 Web 应用程序安全性,请考虑探索
我认为开发者社区应该既知识渊博,又乐于分享见解和经验。因此,我邀请大家分享他们的观察和评论,这对所有从事后端开发的人来说都很有价值!