freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

7个API安全最佳实践
chr0m3 2022-03-01 13:40:29 179816
所属地 浙江省

一、序言

API是对公网暴露的系统入口,是直面网络攻击的最前线,如果不能将其做到坚不可摧,那它很容易会在qiang林弹雨的网络攻击中倒下
那怎样的API才算得上坚不可摧呢?下面我将分享一些自己在实际的工作的安全心得,希望对大家有启发!

二、API安全最佳实践

1、注重用户认证:

用户的认证和授权是非常关键的,如果未做好相关工作,很容易出现认证绕过、任意用户登陆、登陆或者注册接口爆破等问题
那怎样才能做好用户认证接口呢

  • 通过验证码、短信验证码和接口调用速度来限制关键接口的爆破

  • 清晰的设计密码找回、密码修改等敏感接口的流程和token,避免被攻击者绕过

  • 使用强随机数和强加密算法生成token,避免使用静态token

  • 后台对密码强度进行校验,限制用户设置弱密码

2、权限控制

水平越权和垂直越权属于业务逻辑漏洞,目前还没有很好的工具能对该类漏洞进行有效检测,越权漏洞的数量是和系统业务的复杂度成正比的
越权不是技术问题,而是设计问题,当一个系统的业务复杂度不断升高时,它的权限系统也要随之进行升级,和业务高度耦合的而又精简的权限框架能有效的减少越权漏洞出现

批量操作的权限校验往往会被开发者忽略,因为批量操作需要对数组进行循环鉴权,这也是越权漏洞的一个突破点

3、避免注入攻击:

注入攻击是很经典的攻击类型,常见的sql注入、命令注入和xxe等都属于注入攻击
这类漏洞的防护相对会简单一些

  • 保证每个进入系统的参数都被校验,可以使用 spring validate 来做参数格式校验

  • 尽量使用成熟框架,比如mybatis等,可以有效降低sql注入发生概率

在使用 spring validate 时,如果需要使用正则对一个复杂的参数进行校验,应该尽量避免redos漏洞的出现
尽管使用框架,但排序、筛选字段和超复杂的查询还是容易出现sql注入,因为某些开发者会使用sql拼接来完成复杂的sql查询

4、避免信息泄露

信息泄露造成的后果往往都是严重的,核心数据的泄露更是非常致命。

  • 做好输出数据的控制,比如使用一个实体类来定义每个API输出的数据,避免多余的字段被输出到了前端

5、访问频率限制

关键接口要做好访问频率限制,比如:发送短信验证码、登陆、修改密码和注册等,一般都是某些重要资源消耗型接口

  • 某些接口可以做多层限制,比如第1次发验证码直接发,第2次开始需要图像验证码,第15次开始限制ip

6、设置安全头

安全头可以大大提升系统整体的安全性,减少攻击风险

  • Content-Security-Policy 可以在一定程度上防护xss攻击

  • X-Frame-Options 可以阻止点击挟持攻击

  • Strict-Transport-Security 可以强制通讯使用https

  • X-Content-Type-Options 可以限制MIME嗅探

  • Content-Security-Policy 可以管理网站允许加载的内容

7、注意容器和组件漏洞

前面6个措施有效的增加了API的安全性,但是如果某些攻击是在程序还未执行到API入口就完成攻击了呢
那一定是容器和组件漏洞,比如fastjson 、struts、甚至 tomcat、weblogic
这些框架和容器的某些版本都是存在一定可以执行RCE的CVE的

  • 尽量将项目使用的第三方组件升级到最新修正版

  • 使用sca产品对项目的组件进行检测

三、结束语

通过上述的措施,可以大大提升API的安全能力,但是无法彻底的解决安全问题,因为安全是一个多维度、多角度、多层次的复杂问题,没有任何一个产品和工具能彻底的解决安全的问题
安全需要开发者和安全工程师一起努力,掌握更多的安全知识和攻击场景,才能将安全能力做到更高的水平

# web安全 # API安全评估核查 # 安全架构 # JAVA安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 chr0m3 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
chr0m3 LV.1
这家伙太懒了,还未填写个人描述!
  • 2 文章数
  • 3 关注者
主动式IAST、被动式IAST、DAST有什么不一样
2022-03-01
文章目录