像诺克斯堡一样安全:如何保护网站免受黑客攻击
已发表: 2021-10-05在本文中,我们提供了有关如何保护网站免遭黑客入侵和用于非法活动的指南。
在线安全是互联网无限蓝天中的一面巨大的红旗。 虽然“在线安全”这个词可能首先让人想到在线骚扰和用户保护,但缺乏网站安全对企业的损害也很严重。 削减安全支出的网站所有者以声誉为代价,因此遭受经济损失。
内容:
- 为什么每个网站所有者都需要投资于安全性
- 我们在谈论什么漏洞?
- 注射缺陷
- 敏感数据暴露
- 跨站脚本 (XSS) 攻击
- 损坏的身份验证
- 安全配置错误
- 损坏的访问控制
- 不安全的反序列化
- 日志记录和监控不足
- XML 外部实体 (XXE)
- 使用具有已知漏洞的组件
- 如何创建一个安全的网站
- 保护一个网站需要多少钱?
为什么每个网站所有者都需要投资于安全性
一些网站所有者有这样的想法:我的网站上没有什么可以窃取的。 我不保留任何用户数据或付款详细信息。 我不需要昂贵的顶级安全性。
然而,这太天真了。 即使您的网站没有托管任何个人或财务数据,也有多种原因可能导致您的网站遭到黑客入侵。 以下是黑客可能对任何未受保护的服务器的用途列表:
- 索要赎金。 即使您不在服务器上保留任何用户数据,黑客也可以接管它们并向您索要钱财以取回它们。
- 用作 SMTP(简单邮件传输协议)中继。 SMTP 是一种用于批量发送电子邮件的协议,例如时事通讯。 黑客可以使用您的服务器发送垃圾邮件或勒索软件。
- 挖掘比特币。
- 作为僵尸网络的一部分在 DDoS 攻击中使用。
- 更改或删除您网站上的数据。 想要这样做的原因可能会有所不同。
而这只是皮毛。 例如,除了第三方(黑客和其他犯罪分子)构成的威胁外,管理您网站的员工可能犯的错误也构成了威胁。 事实上,内部安全与外部安全同样重要,甚至更重要。
那么如何保护我的网站免受黑客攻击呢? 你问。
好吧,您必须考虑并处理许多漏洞。
我们在谈论什么漏洞?
业内最负盛名的关注网络安全的实体之一是开放 Web 应用程序安全项目,简称 OWASP。 OWASP 基金会监视并定期更新其广泛存在的网络安全问题列表。 以下是截至撰写本文之日的列表中的常见安全问题(排名不分先后)以及有关如何减少网站危险的一些提示。
注射缺陷
注入缺陷与数据库有关,是由糟糕的输入验证引起的。 当您的系统接受用户输入但未能正确过滤该输入时,它会使系统易受攻击——黑客可以利用这一点将他们的代码注入您的系统(因此得名)。 这种注入的代码可能会导致您的网站执行您不希望它执行的命令,使其显示敏感数据,甚至将网站控制权交给黑客。
最流行的注入漏洞类型涉及 SQL 数据库,但注入漏洞并不仅限于它们。 XPath 查询、LDAP 语句和 XML 脚本也容易受到注入攻击。
如何使网站免受注入缺陷的影响? 两个最佳实践包括使用 SQL 查询清理和参数化查询。 有一些 API 允许您这样做。
如果您不想手动实现这些东西,您可以使用 ORM(对象关系映射)工具作为您首选的编程语言。 我们使用 ActiveRecord 是因为它与 Rails 生态系统紧密相连。
上面的选项都不是完全万无一失的,但现在它已经接近可靠的保护了。
敏感数据暴露
敏感数据是可用于以一种或另一种方式利用个人的任何数据:
- 姓名
- 社会安全号码
- 驾驶执照号码
- 信用卡信息
- 用户名和密码
- 出生日期
- 健康信息
- 娘家姓
- 父母的名字
它甚至可以包含任何可以回答安全问题的信息,比如您的银行账户。 谁会想到您的第一只宠物的名字会被视为敏感数据,对吗?
保护网站免受敏感数据的暴露是很困难的,因为这种暴露很难预测和检测。 但是,您可以采取一些预防措施。 敏感数据,如果存储在网站上,绝不能以纯文本形式存储; 它必须使用最新技术加密,并且只能通过安全通道传输。
如果您的网站促进任何交易或通常处理敏感数据,则需要使用 SSL 加密。 这是可用的最新和最好的加密技术。 SSL 加密可帮助您在浏览器和服务器之间或服务器之间安全地传输数据。 此外,许多用户会在您网站的地址中寻找 HTTPS 以查看它是否安全。 该标头是您获得 SSL 证书时获得的。
通常还建议将数据存储在云中。 但是,不要假设简单地将其存储在云中就会自动使数据安全。 尽管如此,必须实施所有保护措施,并且您必须定期监控和更新安全性。
跨站脚本 (XSS) 攻击
XSS 漏洞在某种程度上类似于注入缺陷,因为它们允许黑客通过注入非本机代码来影响您的网站页面。 在 XSS 的情况下,我们谈论的是 JavaScript 注入。 黑客注入的 JavaScript 可以改变页面内容,插入恶意网站链接,并将原本隐藏的数据发回给黑客,导致敏感数据泄露。
Ruby on Rails 和 React 具有内置的 XSS 保护。 反 XSS 和反注入措施的另一种选择是使用 Content-Security-Policy HTTP 响应标头。
损坏的身份验证
从名称可以看出,该漏洞最初称为“破坏的身份验证和会话管理”,它处理用户身份验证和会话管理期间的漏洞。 这包括暴露登录凭据和会话 ID 的许多问题:
- 弱会话 ID
- 显示在 URL 中的会话 ID
- 在登录之间不会更改的会话 ID
- 通过不安全的连接传输会话 ID
会话 ID 直接连接到用户的身份,与凭据相同,因此拦截它们可能会导致用户帐户被劫持。 这会给您的用户带来各种损害,从财务和声誉到与健康有关。
为使您的网站免受身份验证攻击,需要多因素身份验证:例如,需要向用户的移动设备提供固定密码和一次性密码。
Google 采用了双因素身份验证选项:要在网络浏览器中打开您的 Google 帐户,您需要先输入密码。 如果正确,您还需要在手机上打开 Google 应用并选择网络浏览器中显示的号码。
用于破坏身份验证的更明显的网站保护方法包括:
- 强制执行密码复杂性——“您的密码必须至少有 8 个字符长,并且至少包含一个数字、一个大写字母和一个小写字母。”
- 限制帐户被暂停之前的登录尝试(在特定时间或直到用户联系网站管理员)并提醒管理员
安全配置错误
安全配置错误是一个广泛的话题,因为这可能发生在您网站的任何阶段和任何部分:数据库、网络、服务器、框架、存储或其他任何东西。 可以利用配置弱点来访问系统功能。 根据漏洞所在的位置,此类访问可以是部分的,也可以是完整的。 错误配置示例:
- 您尚未禁用默认帐户/密码。
- 有不必要和未使用的功能。
- 对云的访问权限未安全配置。
- 您的错误消息会显示敏感信息,例如用户名、密码或电子邮件地址。
避免错误配置要做的第一件事是删除所有未使用的东西——特性、示例、框架等。下一步是确保所有环境的配置相同并定期检查其性能。 一个深思熟虑的架构是必须的。
损坏的访问控制
访问控制是对用户可以做什么和不能做什么的控制。 如果未正确执行,则意味着用户可能会以不可预测的方式执行可能影响您网站的操作。 利用损坏的访问控制的一种方法是查看和编辑其他用户的配置文件和数据。 另一个是无需付费或赚取即可访问高级功能。 另一种是从非管理员帐户(或更糟的是,根本没有帐户)访问管理页面。
确保您的网站访问控制有效的最佳方法是手动测试。 没有任何自动化测试工具可以保证访问控制按预期工作。
滥用跨域资源共享 (CORS) 机制也可能导致访问控制中断,该机制可以提供对其他受限 API 的访问。 因此,建议尽可能少地使用 CORS。
不安全的反序列化
序列化是将对象转换为二进制代码的过程。 从逻辑上讲,反序列化正好相反。 两者都是在 Web 开发中定期执行的过程,这使得实施保护以防止在攻击中使用它们变得很重要。
好消息是反序列化不是普通用户或您的员工可能会意外执行的操作。 这在一定程度上也是坏消息——反序列化攻击总是蓄意的,因此是恶性的。 它们还会导致最严重的问题,例如运行远程代码、未经身份验证进入网站以及发起 DoS(拒绝服务)攻击。
保护您的网站免受此类攻击的最简单方法是禁止用户生成的序列化对象。 如果无法做到这一点,下一个最佳选择是使用加密签名进行完整性检查。
使用 JSON、YAML 或 XML 会使黑客更难利用反序列化弱点,因为这些格式不是二进制的。
日志记录和监控不足
这个漏洞看起来很明显:如果你不监控你的网站,不记录所有错误和失败的登录或执行访问控制功能的尝试,你基本上是在诱使黑客攻击你的网站。 在任何类型的战争中,数字或现实生活中,第一次攻击通常不是为了获胜,而是为了看看你所面对的是什么。 如果有一个简单的方法,你就使用它。 未能记录和监控此类探测将导致您的系统完全错过攻击或在攻击已经发生并造成损害后检测到它。
日志记录对于电子商务网站尤为重要,因为它们处理用户的金钱和财务凭证。
为了使您的网站更安全,请正确记录所有失败的尝试,并确保这些日志在本地服务器之外存储和备份。 针对此类故障采用自动警报系统,并在可能的情况下暂停持续产生此类故障的帐户。 拥有实时警报系统至关重要,这样您就可以立即对可能的违规行为做出反应。
XML 外部实体 (XXE)
我们已经多次提到 XML(可扩展标记语言)。 它是一种灵活的语言,易于使用和广泛使用。 XML 处理器解析来自 XML 文档的数据。 如果您的网站是基于 XML 的并且未经验证就接受 XML 上传,则它可能容易受到攻击。
为了保护您网站的完整性,建议采取以下措施:
- 禁用 DTD(文档类型定义)处理。
- 限制或阻止 XML 上传,或者,如果无法做到,则强制加入白名单——积极的服务器端输入验证。
- 定期升级您的 XLM 处理器和库。
- 防止敏感数据的序列化。
- 在适用的情况下,使用 JSON 或类似的简单格式。
- 实施 Web 应用程序防火墙 (WAF) 和 API 安全网关。
使用具有已知漏洞的组件
没有什么是完美的,您在软件中使用的任何组件都必然存在一些已知或未知的漏洞。 为响应已发现和已识别的漏洞,更新软件以覆盖这些漏洞或减轻利用漏洞可能造成的任何损害。 一些弱点会造成轻微损害,但其他弱点可能会影响您的业务。
为防止网站因已知漏洞而被黑客入侵,定期检查更新并更新您网站上使用的所有组件非常重要。 在组件繁重的软件和网站中,这可能是一项乏味的任务。 这就是安全专家建议定期检查和删除不必要和未使用的库、功能、文件和其他组件的原因。 而且,当然,只能使用来自官方来源的组件。 不要被那些通常免费分发付费软件的网站所诱惑——它可以被修改以入侵您的网站。
如何创建一个安全的网站:底线
用外行的话来说,所有技术含量高的信息,如果您想创建一个安全的网站,以下是要遵循的安全提示:
- 寻找可靠的网络主机。
- 定期更新您网站上使用的所有软件、框架和库。
- 从您的网站中删除任何不必要的功能和组件。
- 设置系统以验证浏览器和服务器端的输入。
- 监视错误消息中显示的信息。
- 为用户设置密码强度检查器。
- 始终为您的服务器和管理页面使用强密码,并定期更改它们。
- 投资 SSL 证书/使用 HTTPS 协议。
- 为失败和错误设置适当的日志记录。
- 记录审计交易(特别是如果您的网站是电子商务网站)。
- 密切监视日志。
- 使用云服务器,但仍然保护您的数据。
- 始终使用最新技术加密敏感数据。
- 让您的安全团队密切关注新出现的安全更新以及新威胁,以便能够及时应对攻击。
保护一个网站需要多少钱?
这是一个没有明确答案的问题。 安全成本在很大程度上取决于您的站点使用的技术堆栈。 此外,还有更新成本,这取决于您需要更新多少个组件、更新它们的频率以及每个更新的成本。 这些成本需要由您的开发人员单独计算。
我们强烈建议从开发之初就考虑安全性。 将安全问题留到最后可能(并且很可能会)导致需要对站点的核心进行更改,这可能比从一开始就构建安全性更昂贵。
结论
如果您自己是开发人员、拥有开发公司或拥有内部开发团队,您可以在他们之前设置所有这些任务。 但是,如果您身边还没有技术专家,并且您想知道如何与外包提供商一起创建安全的网站,我们建议您找一家不仅可以构建网站而且可以提供支持的开发公司。 预测每个漏洞几乎是不可能的,但是及时对任何漏洞做出反应的能力可以使您的网站免于遭受最糟糕的命运。
Mind Studios 的开发人员在最佳安全实践方面经验丰富,并紧跟最新趋势。 如果您对如何保护您的网站免受黑客攻击有任何疑问,请联系我们进行免费咨询。
由 Svitlana Varaksina 和 Artem Chervichnik 撰写