OWASP Top 10注入的简介

93 阅读4分钟

IT行业的安全就像锁住你的房子或汽车一样,它不能阻止坏人,但如果它足够好,他们可能会转移到更容易的目标。- Paul Herbka

我们完全同意。确保你的网络应用程序的安全是至关重要的。因此,我们在这里为您提供最新的OWASP十大安全威胁,请您留意。

OWASP代表开放网络应用安全项目--一个开放的社区,致力于使组织能够开发、购买和维护可以信任的应用程序和API。

我们赞同OWASP的思想,鼓励企业摆脱渗透和打补丁的心态,并支持Contrast Securities的Jeff Williams在2009年OWASP AppSec DC主题演讲中所说的:"我们永远不会以黑客的方式获得安全--这需要企业文化的改变",以正确解决应用安全问题。因此,这篇文章不仅是针对应用安全社区的,而且也是为了向开发者伸出援手。

OWASP Top 10 - 2017提到了以下安全威胁:

  1. 注入
  2. 破解认证
  3. 敏感数据暴露
  4. XML外部实体(XEE)
  5. 破损的访问控制
  6. 安全配置错误
  7. 跨站脚本(XSS)
  8. 不安全的反序列化
  9. 使用已知有漏洞的组件
  10. 记录和监控不足

这是即将发表的许多文章中的一篇,旨在详细介绍这些威胁。今天我们先来看看代码注入。

注入是对任何Web应用程序最古老和最危险的攻击之一。在这种攻击中,攻击者只是发送恶意数据,以使应用程序处理它并做一些它不应该做的事情。注入缺陷是非常普遍的,特别是在传统的代码中。其核心原因是。用户提供的数据没有经过应用程序的验证、过滤或净化。

其他一些潜在的原因包括:

  • 在解释器中直接使用动态查询。

  • 直接在解释器中使用非参数化的调用,而没有实现上下文感知的转义(简称自动转义)。在这里阅读更多关于转义所有用户提供的输入的信息。

  • 在对象关系映射(ORM)搜索参数中使用敌意数据以提取额外的敏感记录。

  • 敌意数据被直接使用或串联,这样的SQL或命令在动态查询、命令或存储过程中同时包含结构和敌意数据。

下面是OWASP的例子,一个SQL查询消耗了不信任的数据:

String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";

当攻击者在他们的浏览器中修改'id'参数值来发送:' or '1'='1 ,这个查询就会被利用。比如说。 http://example.com/app/accountView?id=' or '1'='1 这可以导致数据库表返回所有的行。

为了保证你的应用程序免受注入攻击,这里有一些OWASP的技术建议需要注意:

防止注入需要将数据与命令和查询分开。

  • 首选是使用安全的API,完全避免使用解释器或提供一个参数化的接口,或迁移到使用对象关系映射工具(ORMs)。***注意:*即使在参数化的情况下,如果PL/SQL或T-SQL将查询和数据连接起来,或用EXECUTE IMMEDIATE或exec() 执行敌对数据,存储过程仍然可以引入SQL注入。

  • 使用积极的或 "白名单 "的服务器端输入验证。这不是一个完整的防御措施,因为许多应用程序需要特殊字符,如文本区域或移动应用程序的API。

  • 对于任何残留的动态查询,使用该解释器的特定转义语法转义特殊字符。***注意:*SQL结构,如表名、列名等不能被转义,因此用户提供的结构名是危险的。这是报告编写软件中的一个常见问题。

  • 在查询中使用LIMIT 和其他SQL控制,以防止在SQL注入的情况下大量泄露记录。

代码注入可能是非常致命的,因为它可能导致数据丢失或损坏、缺乏责任感、拒绝访问或有时可能导致主机完全被接管。