保护REST API/Web服务的最佳实践
在设计REST API或服务时,是否存在处理安全性(身份验证,授权,身份管理)的最佳实践? 在构建SOAP API时,您可以使用WS-Security作为指导,有关该主题的文献很多。我发现了有关保护REST端点的更少信息。 尽管我了解REST故意没有类似于WS- *的规范,但我希望最佳实践或推荐模式已经出现。 任何有关文件的讨论或链接将非常感激。 如果它很重要,我们将使用WCF和POX/JSON序列化消息来构建使用.NET Framework v3.5构建的REST API/Services。
Github上有一个很棒的清单: 的验证
- 请勿使用
Basic Auth使用标准认证(例如JWT,OAuth)。 - 不要在认证,代币生成,密码存储中重新发明轮子。使用标准。
- 在登录中使用
Max Retry和jail功能。 - 在所有敏感数据上使用加密。
- 使用一个随机的复杂键(JWT秘密)来让暴力破解令牌变得非常困难。
- 不要从有效负载中提取算法。在后端强制执行算法(HS256或RS256)。
- 尽可能缩短令牌到期时间(
TTL,RTTL)。 - 不要在
JWT有效载荷中存储敏感数据,它可以被轻松解码。 - 始终验证
redirect_uri服务器端是否只允许列入白名单的网址。 - 总是尝试交换代码而不是代币(不允许
response_type=token)。 - 使用状态参数和随机散列来防止
OAuth身份验证过程中的CSRF。 - 定义默认范围,并为每个应用程序验证范围参数。
- 限制请求(Throttling)以避免DDoS /强力攻击。
- 在服务器端使用HTTPS以避免MITM(中间人攻击)
- 使用带SSL的
HSTS标头来避免SSL Strip攻击。 - 根据操作使用适当的HTTP方法:
GET(读取),POST(创建),PUT/PATCH(替换/更新)和DELETE(删除记录),如果请求的方法不是,则使用405 Method Not Allowed回应适合请求的资源。 - 根据请求验证内容类型
Accept标题(内容协商)以仅允许您支持的格式(例如application/xml,application/json等),并在406 Not Acceptable响应中回应(如果不匹配)。 - 按照您接受的方式验证发布数据的
content-type(例如,application/x-www-form-urlencoded,multipart/form-data,application/json等)。 - 验证用户输入以避免常见漏洞(例如XSS,SQL注入,远程代码执行等)。
- 请勿在网址中使用任何敏感数据(凭据,密码,安全令牌或API密钥),但请使用标准的
Authorization标头。 - 使用API网关服务启用缓存,
Rate Limit策略(例如配额,尖峰捕捉,并发速率限制)以及动态部署API资源。 - 检查所有端点是否在身份验证后受到保护,以避免身份验证过程中断。
- 应该避免用户自己的资源ID。使用/ me/orders而不是/ user/654321/orders。
- 不要自动增加ID。改为使用UUID。
- 如果您正在解析XML文件,请确保未启用实体解析以避免XXE(XML外部实体攻击)。
- 如果您正在解析XML文件,请确保实体展开未启用,以通过指数实体展开攻击来避免十亿笑/ XML炸弹。
- 使用CDN进行文件上传。
- 如果您处理大量数据,请使用工作人员和队列尽可能在后台进行处理,并快速返回响应以避免HTTP阻止。
- 不要忘记关闭 DEBUG 模式。
- 发送
X-Content-Type-Options: nosniff标头。 - 发送
X-Frame-Options: deny标头。 - 发送
Content-Security-Policy: default-src'none'标头。 - 移除指纹标头 -
X-Powered-By,Server,X-AspNet-Version等。 - 如果您返回
application/json,那么您的响应内容类型为application/json。 - 强制
content-type作为回应。 - 不要传回密码,密码,安全令牌等敏感数据。
- 根据完成的操作返回正确的状态码。 (例如
200 OK,400 Bad Request,401 Unauthorized,405 Method Not Allowed等)。
JWT(JSON Web令牌)
的的OAuth
使用
的输入
的处理
的输出
https://oomake.com/question/731
保护REST API/Web服务的最佳实践的更多相关文章
- [转]在 Azure 云服务上设计大规模服务的最佳实践
本文转自:http://technet.microsoft.com/zh-cn/magazine/jj717232.aspx 英文版:http://msdn.microsoft.com/library ...
- Web前端优化最佳实践及工具集锦
Web前端优化最佳实践及工具集锦 发表于2013-09-23 19:47| 21315次阅读| 来源Googe & Yahoo| 118 条评论| 作者王果 编译 Web优化Google雅虎P ...
- 从Uber微服务看最佳实践如何炼成?
导读:Uber成长非常迅速,工程师团队快速扩充,据说Uber有2000名工程师,8000个代码仓库,部署了1000多个微服务.微服务架构是Uber应对技术团队快速增长,功能快速上线很出色的解决方案.本 ...
- restful api的10个最佳实践
Web API在过去的几年里非常盛行,因为它有着语法简单.规范化和轻量级的优点,因为得到广泛的推崇,很多过往的技术手段都慢慢转换为使用Web API来开发.而Web API通常使用的设计方式是REST ...
- 【转】优化Web程序的最佳实践
自动排版有点乱,看着蛋疼,建议下载中文PDF版阅读或阅读英文原文. Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践.他们为此进行了 一系列的实验.开发了各 ...
- Web前端开发最佳实践(7):使用合理的技术方案来构建小图标
大家都对网站上使用的小图标肯定都不陌生,这些小图标作为网站内容的点缀,增加了网站的美观度,提高了用户体验,可是你有没有看过在这些网站中使用的图标都是用什么技术实现的?虽然大部分网站还是使用普通的图片实 ...
- web前端开发最佳实践笔记
一.文章开篇 由于最近也比较忙,一方面是忙着公司的事情,另外一方面也是忙着看书和学习,所以没有时间来和大家一起分享知识,现在好了,终于回归博客园的大家庭了,今天我打算来分享一下关于<web前端开 ...
- [转] Web 前端优化最佳实践之 Mobile(iPhone) 篇
原文链接:http://dbanotes.net/web/best_practices_for_speeding_up_your_web_site_server_mobile.html Web 前端优 ...
- 【社区公益】送《Web前端开发最佳实践》给需要的人
算起来至今,我进入软件开发行业已经有11年之久.从最初的研究人工智能,到后来的Web开发,控件开发,直到现在纯粹的Web前端开发.虽然没有大的作品问世,但也是勤勤恳恳,踏实做事,低调做人.从来不吹牛逼 ...
随机推荐
- 2018,重新开始学习DotNetCore
学习计划: 1.IdentityServer https://github.com/IdentityServer/IdentityServer4 2.eShopOnContainers https:/ ...
- Google准实时数据仓库Mesa(一)
本文来自网易云社区 作者:王潘安 以下是本人在学习Google的Mesa数据仓库论文的记录,翻译出来给大家分享,翻译水平有限,请多多包涵.因论文比较长,本人将论文按照Mesa不同的模块分开翻译,方便阅 ...
- Django之request对象
在view.py的函数中.我们的函数中第一个参数都是request.在request中有一些信息,比如正在加载这个页面的用户是谁,或者是用什么浏览器之类的.这对于我们网站的管理是很有用处的. requ ...
- 求解热传导方程matlab
这是非稳态一维热传导的方法,也叫古典显格式. 如果是做数学建模,就别用了,这种方法计算量比较大,算的很慢,而且收敛不好. 但是如果实在没办法也能凑合用. 该改的地方我都用???代替了. 给个详细解释h ...
- 【图灵学院01】Java程序员开发效率工具IntelliJ IDEA使用
1. 什么是IDEA? IDEA, Java智能IDE. 2. 为什么要使用? IDEA的优点: 1)智能选取 2)导航模式 3)历史记录 4)重构 5)编码辅助 6)智能排版,控制 7)智能代码,查 ...
- Sessions in BSU
Sessions in BSU 有n项考试.每项考试给定两个时间,你可以任意选择一个时间.每个时间点只能考一场考试,请问在最优情况下最早考完的时间.n<=1e6. 把题目抽象成图论模型:在每项考 ...
- SpringBoot浏览器直接访问html
在resources文件夹或与其并列的文件夹下建立public文件夹,在public文件夹下的html文件可以通过浏览器中输入文件+后缀名的方式直接访问的. 一.public文件夹,就相当于在ecl ...
- 【模板】普通平衡树 Splay
题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 插入xxx数 删除xxx数(若有多个相同的数,因只删除一个) 查询xxx数的排名(排名定义为比当前数小的数的个数 ...
- [HAOI2012]音量调节 BZOJ2748 dp
题目描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量.在演出开始之前,他已经做好一个列表,里面写着每首歌开始之前他想要改变的音量是多少. ...
- linux中脚本权限问题以及win下使用telnet测试linux端口
一个脚本叫up,执行脚本报错如下: -bash: ./up: Permission denied 解决: chmod +rx up 在执行,OK了. /************************ ...