tms*_*ont 13 javascript security api
我有一个JavaScript应用程序.
它是用jQuery构建的.
它用于$.get()从服务器提取JSON数据,并使用数据加载拼图.
我想将JavaScript应用程序分发给客户端,并使其易于安装.
我希望它只是给他们一个JavaScript块,他们可以放入他们的页面,它将与我的API交互.
我没有传递敏感数据,我的任何API都在保护数据库不受SQL注入等的影响.
我只是想尝试防止未经授权使用我的API,我想不出用JavaScript做到这一点的方法,因为任何拥有DOM检查器的人都可以从任何变量中获取任何凭据,或者可以监控任何服务器流量POST或GET数据...
是否有可能在另一方验证推荐人?
我知道这不是防弹的,但它不是敏感的数据.我只想尽可能减少未经授权的使用..
有任何想法吗?
注意:我知道混淆API密钥或某些东西是徒劳的,我想知道除了传统的密钥之外我还可以使用什么其他控件来识别API的调用者.我可以完全控制API本身,所以我可以在这方面做任何事......
小智 19
使用JavaScript,几乎任何身份验证系统都会有漏洞,因为代码直接在浏览器中运行,任何人都可以看到(网络调用也可以).所以你可以尝试一些事情,具体取决于你的情况.
如果您将此应用程序分发给一小部分客户端,并且您确切知道它们将从何处访问它,则可以使用IP白名单.这确实是完全保护API的唯一方法.然而,这种方法非常麻烦,因为每个新客户端都需要更新API白名单,并考虑到你在这里谈论的内容可能不是你想要的(但我之所以提到它只是因为它是可能的).
另一种方法是访问令牌.这是Facebook等网站常用的方法.有两种方法可以做到这一点.一种是给每个客户一个秘密密钥.您可以为每个人提供相同的密钥,但这不是很安全.为每个人提供不同的密钥,不仅可以跟踪使用情况,还可以在必要时撤消访问权限.
访问令牌的第一种方法是将其放在JS客户端中.但是,这意味着任何查看源代码的人都可以访问您的密钥,并使用它来发出请求.
第二种方法是将密钥存储在客户端运行的网站的SERVER上.然后,此服务器可以使用该密钥进行服务器到服务器调用,以获取临时会话令牌.人们仍然可以通过前端访问临时会话令牌,但他们必须首先访问此站点才能获得它(这允许您将处理此事务的责任转移给网站运营商)和令牌最终会到期.然而,这意味着需要一些服务器端代码,而应用程序不仅仅是一个拖放的东西.
对于上面给出的方法,您还可以查看OAuth之类的内容,以避免重新发明轮子.
使用IP的另一个可能的事情是设置一个特定IP可以达到白名单的频率或每天多少次的硬性上限.虽然你可能会遇到真正喜欢这些谜题的用户的问题,但这可以防止一些潜在的滥用.