题
如何通过只允许可信域安全的API?
细节
我建立一个REST API。 我需要一种方法来分发API密钥,但只允许他们从他们注册的域名的工作。
主要的问题是需要被嵌入它可以很容易被反编译窃取API密钥Flash文件我的API密钥。 如果Flash,使这个不可能的我可以使用JavaScript来代替。
我听到很多人说使用$_SERVER['HTTP_REFERER']
但是,这是很容易伪造。
- 如何建立一个确保请求从允许的域来的API?
- 如何创建绑定到一个域的API密钥?
- 如何通过只允许可信域安全的API?
相关问题#1:
这些问题都涉及,但并没有完全回答我的问题。 想我只想把他们在这里以供将来参考。
- 谷歌API密钥和域检查
- 如何谷歌地图保护他们的API密钥? 如何使类似的东西?
JavaScript就无法帮助你在这里 - 问题是,键被存储在客户端,这意味着它是不安全的。 你可以把它的肯定是一个攻击者有点困难(比如像你说的检查引荐),但在这一天所有的服务器可以验证的到底是什么,关键是正确的,因为密钥很容易被偷走的不是非常有帮助。
这可以固定的方式是由具有不管你是谁给他们,而不是在客户端运行在服务器上的私钥。 根据您的需求,这可能是不可行的。
一种可能使它有点困难,攻击者是利用网站锁定技术,只允许SWF调用API,如果它是在一个合适的域名。 见http://blog.boogatech.com/as3_tutorial_site-locking_your_flash_project/的一个例子。 但是请注意,这是客户端的安全性-与sitelocking的目标通常是刚刚从玩游戏的其他网站停止人(即使这样也不能阻止最敬业的攻击者)。 在你的情况,你正在处理的服务器的安全性 - 服务器不知道有关SWF,它只知道它正被馈送的参数,因此攻击者可以直接绕过SWF和客户端的安全,并呼吁从别的地方的API 。
我劝你要想想你正试图阻止攻击什么和攻击者(你为什么要扎API密钥域?)。 这将帮助您规划安全试图更好。 举例来说,如果你没有运行的超临界API,你可以决定投入几件事情,使它更难攻击者访问的API是可以接受的,用知识,你不能阻止一个非常专门的攻击者。