2011-07-12 136 views
2

我一直在寻找让我的REST应用程序更安全的方法。 HTTP基本身份验证似乎是一种方式,但需要在每次请求时在客户端和服务器之间传送用户名和密码。如果我使用curl,但使用Javascript文件,可以正常工作吗?不那么酷。PHP:验证我的REST应用程序

我发现并了解了最近的Digest HTTP身份验证,这似乎是HTTP Basic提供的安全性的一大进步,虽然理解起来更加复杂,但我仍然不完全诚实。

我查看了this question,它是使用Digest方法了解pro和con的答案,但看起来我越想越觉得它变得越来越混乱。

似乎有很多已经可用的解决方案来解决这个问题,但其中大多数现在已接近10岁。

Digest方法是否应该最好在黑暗中单独处理,以获得另一种保护请求的更新方法,或者是否存在已有的已有Digest库?

回答

0

您可以查看Facebook和Twitter等流行API所使用的不同身份验证技术,这些API使用OAuth方法进行身份验证。

其他API(如Google地图(v2)和Bitly允许您使用URL中的API密钥访问其API。因此,每个用户在请求使用像http://api.domain.com/get?key=supersecureapikey

API密钥这两种方法是优秀的,在整个网络的广泛使用,只直接从JavaScript访问的API将公开API密钥/密码。一个选项(我使用的选项)来解决这个问题是让JavaScript调用服务器上的一个文件,它在服务器端执行API调用,从而保证密钥/密码的安全。

+0

@pthurmond我不能评论你的答案,但SSL是**不是**验证方法。它只是加密两台服务器之间的数据传输。这仍然会将该API公开给公众,并且不会解决任何问题。 如果您正在传输敏感数据(您可能需要查看SOAP)或者来自安全页面的请求(因此浏览器不会对非安全数据大惊小怪),您应该只使用SSL作为其余API, – adlawson

+0

好的,指出了一点。你仍然需要一个登录/认证系统。也就是说,如果他们使用某种框架,这至少可以部分地被照顾。我想我的重点更多地放在安全方面。看到他已经拥有一个HTTP认证系统(除非我误解他),他需要做的所有增加安全性的工作都是使用证书和一些快速URL检查将其变为安全的http系统(https)。 – pthurmond

+0

@adlawson:谢谢你的回复。你介意在你的解决方案的设计上展示一些伪代码吗? – Industrial

1

你有没有想过使用HTTPS?你真正需要的是一个签名的域名安全证书,并检查你的代码,确保它以这种方式连接。它将以这种方式使用SSL,并且服务器和浏览器将自动负责加密来回发送的数据,并将对所有通信使用三次握手。