OWASP十大安全漏洞
我们都是充满热情的网页开发者,对吧?🤗
我们构建出色、快速、用户友好的应用程序,帮助他人。我们热爱学习新知识,也喜欢使用现代工具!但是……
我们是否足够重视所开发应用程序的安全方面?用户使用我们的系统是否安全?
本文旨在为您简要介绍 OWASP Top 10,这是一份面向开发者和 Web 应用安全领域的标准安全意识文档。开放式 Web 应用安全项目 (OWASP) 是一个致力于提升软件安全性的全球性基金会。OWASP Top 10 文档列出了当今 Web 应用中最常见的 10 个漏洞(没错,我们用 Angular 构建 Web 应用,所以我们必须重视它!)。我们当中许多人也在开发服务器端后端(全栈开发者万岁⚡),因此这封邮件可能包含非常重要的知识。
以下是 OWASP Top 10 中最重要的一些内容总结,作为一名 Web 开发人员,你必须了解这些内容。只需 10 分钟阅读,就能比黑客更聪明!😎
1)注入🧨
该应用程序可能容易受到恶意代码注入攻击,攻击方式包括通过查询参数等多种不同的输入方式。

SELECT * FROM accounts WHERE custID=' + request.getParameter("id") + '
如果上述示例中的id参数未经正确验证或清理,并在服务器端直接用于 SQL 查询,则可能会显示所有帐户,而不是正确的帐户。这主要是服务器端的问题,但作为 Web 开发人员,您应该了解这一点。
2)身份验证漏洞🧨
许多应用程序用户在不同网站上重复使用相同的登录名和密码。这会带来巨大的风险,使黑客能够执行所谓的“撞库攻击”。如果攻击者设法获取了其他系统的数据库(或使用来自公开的知名数据泄露事件的数据),他可以使用自动化方法搜索有效的登录名/密码对,从而获得系统访问权限。黑客也可能使用暴力破解或字典攻击来登录您的系统!😵
但别太担心!我们可以通过一些方法来保护应用程序免受此类漏洞的侵害,例如:
- 多因素认证 MFA(使用短信、电子邮件、指纹等)
- 注册过程中进行密码检查(将密码与数据泄露事件中已知的密码进行比较),
- 强制执行密码复杂度规则(最小长度、特殊字符出现次数限制),
- 限制登录失败次数(例如,连续登录失败 3 次后,禁止登录 1 小时)。
3)敏感数据泄露🧨
登录名和密码、信用卡号、医疗记录等敏感数据需要特殊处理。至关重要的是:
- 切勿以明文形式通过网络(从服务器到浏览器)传输数据(务必使用HTTPS!)。
- 使用HTTP严格传输安全(HSTS)强制执行HTTPS,
- 永远不要使用老旧或安全性较弱的加密算法。
- 切勿以明文形式存储敏感数据(请使用像bcrypt这样的强哈希算法)。
4) XML 外部实体 (XXE) 🧨
从 Angular 开发者的角度来看,它并非十分重要,但在处理企业系统时了解它很有用。根据 OWASP Top 10 的排名,它仍然是第四大漏洞。
攻击者可以通过上传 XML 或在 XML 文档中包含恶意内容来利用易受攻击的 XML 处理器,从而利用易受攻击的代码、依赖项或集成。
5)访问控制失效🧨
试想一下,如果我们没有在客户端(Angular)或更重要的服务器端正确保护应用程序路由,导致普通用户能够访问管理面板,那会是什么情况?务必确保 API 中存在完善的访问控制检查,以确保授权,例如:
- 防止未具有相应角色(管理员、用户、审计员、超级用户)的用户访问系统部分。
- 防止未经实体所有权而访问系统部分(例如允许某些用户查看其他用户的帐户数据)。
6)安全配置错误🧨
从 Angular 开发者的角度来看,这并不十分重要,但在处理企业系统时了解这一点很有必要。根据 OWASP Top 10 漏洞排名,它仍然是第六大漏洞。
在将系统部署到生产环境时,有一些配置工作需要注意。尤其需要注意的是,以下几点可能存在安全风险:
- 默认系统配置(Apache、MySQL 等),
- 默认启用了一些你不需要的功能(只需将其关闭即可)。
- 默认账户及默认密码(用户名:admin,密码:admin 🤦♂️),
- 显示默认错误页面,并注明所使用的服务器软件的确切版本(攻击者可能会针对特定版本寻找一些已知的漏洞)。
7)跨站脚本攻击(XSS) ⚠️重要提示 ⚠️
当攻击者设法在用户浏览器访问网站时执行恶意代码,基本上就意味着游戏结束。然后,他可以窃取例如用户的会话数据(例如会话 ID)并将其发送到他自己的服务器。
如何防止此类攻击(一般而言):
对所有用户输入进行清理,移除特殊字符(假设其中包含恶意代码)。
您可以观看我的一个视频,其中演示了同源策略,这是 Web 的基本安全原则,可以减轻(但不能消除)XSS 的风险,点击此处观看同源策略。
8)不安全的反序列化 ⚠️ 重要 ⚠️
这里有个陷阱!假设你将一个userAuth对象(包含用户名、ID、角色等信息)存储在 cookie 或本地存储中。然后攻击者手动修改了该对象的内容,并将自己的角色设置为 admin。糟糕!如果后端在反序列化(即从请求中的字符串内容创建对象)之前没有验证userAuth对象的内容,就会出现问题。
防止这种情况发生的方法是对本地存储或 Cookie 中的内容使用哈希函数。这将确保对象的完整性(内容未被不受信任的第三方更改)。服务器生成内容的哈希值,并将该哈希值附加到内容上,之后可以使用该哈希值来验证内容是否被更改。之所以可行,是因为只有服务器知道哈希过程中使用的密钥。
9)使用存在已知漏洞的组件 ⚠️ 重要提示 ⚠️
风险极易被忽视。我们构建应用程序时会使用大量的 npm 模块。在构建应用程序的过程中,某些 npm 依赖项可能存在漏洞、不受支持或已过时,从而引入安全漏洞!
如何解决?每次生产环境部署前,务必运行npm audit 命令,确保依赖项安全可靠!此外,在决定是否将某个 npm 模块作为核心依赖项之前,也应该对相关的库/组件进行全面的背景调查,以降低未来的风险。
10)日志记录和监控不足🧨
以下是一些属于此类漏洞的示例:
- 您的系统发生数据泄露,但无人察觉(或过了很久才有人察觉)。
- 可审计事件(登录、登录失败和高价值交易)不会被记录
- 访问控制失败、服务器端输入验证失败不会被记录
- 错误未生成日志消息、日志消息不完整或日志消息不清晰。
- 日志未进行可疑活动监控
遇到这种情况该怎么办?
- 创建内容充足、上下文完整、格式良好的日志。
- 将日志保存足够长的时间,以便进行延迟分析。
- 最重要的是,务必监控你的日志🤓
就是这样!你刚刚学习了OWASP十大漏洞中最重要的部分!
文章来源:https://dev.to/dev-academy/owasp-top-10-security-vulnerability-1jch