knd*_*knd 83 security api rest web-applications backbone.js
我正在开发使用后端的一些流行的Web框架的宁静的Web应用程序,例如(rails,sinatra,flask,express.js).理想情况下,我想用Backbone.js开发客户端.如何让我的javascript客户端与这些API调用进行交互?我不希望这些API调用是公共的,curl只是通过在浏览器上输入链接来调用.
Eug*_*eck 81
作为第一个原则,如果您的API被JS客户端使用,您必须假设它是公共的:一个简单的JS调试器将攻击者置于一个位置,在那里他可以发送一个逐字节的相同请求.他选择的工具.
也就是说,如果我正确地阅读了你的问题,那就不是,你想要避免的:你真正不希望发生的是,你的API被消费(定期)而不涉及你的JS客户端.以下是关于如何不执行的一些想法,然后至少鼓励使用您的客户:
我相信,您的API具有某种身份验证字段(例如,在客户端上计算的哈希值).如果没有,请看看这个问题.确保使用在会话基础上给予JS客户端的盐(甚至API密钥)(硬编码).这样,未经授权的API消费者就会被迫从事更多的工作.
在加载JS客户端时,请记住一些HTTP头(想到用户代理)和IP地址,并在他们改变时请求重新认证,使用黑名单来处理常见的嫌疑人.这迫使攻击者再次彻底地完成他的作业.
在服务器端,记住最后几个API调用,在允许另一个API调用之前,检查业务逻辑是否允许新的调用:这会使攻击者无法将他的许多会话集中到与服务器的一个会话中:与其他措施相结合,这将使滥用者易于检测.
我可能没有以必要的清晰度说出来:我认为不可能让施虐者完全无法使用你的服务,但是你可以这么做,这可能不值得麻烦.
gvi*_*iew 11
您应该实现某种身份验证系统.处理此问题的一种好方法是定义一些预期的标头变量.例如,您可以进行auth/login API调用以返回会话令牌.对API的后续调用将期望在HTTP标头变量中设置会话令牌,该变量具有特定名称,如"your-api-token".
或者,许多系统使用某种api帐户系统创建预期的访问令牌或密钥(如youtube,facebook或twitter).在这些情况下,您的客户必须以某种方式将这些存储在客户端中.
然后,只需将会话检查添加到REST框架并抛出异常即可.如果可能的话,状态代码(要休息)将是401错误.
现在有一个名为"JSON Web Token"的开放标准,
看到https://jwt.io/&https://en.wikipedia.org/wiki/JSON_Web_Token
JSON Web Token(JWT)是一种基于JSON的开放标准(RFC 7519),用于创建声明一些声明的令牌.例如,服务器可以生成具有声明"以管理员身份登录"并将其提供给客户端的令牌.然后,客户端可以使用该令牌来证明他们以管理员身份登录.令牌由服务器密钥签名,因此服务器能够验证令牌是否合法.令牌设计紧凑,URL安全,尤其适用于Web浏览器单点登录(SSO)环境.JWT声明通常可用于在身份提供者和服务提供者之间传递经过身份验证的用户的身份,或业务流程所要求的任何其他类型的声明.[1] [2] 令牌也可以通过身份验证和加密.[3] [4]
| 归档时间: |
|
| 查看次数: |
77894 次 |
| 最近记录: |