2011-12-03 71 views
32

我有一个网站,允许用户查看他们的统计数据(文件数载,他们有多少个文件,配额,访问等类型...)API安全实现PHP

我创建一个部分我现场:api.domain.com

这可以通过卷曲或web浏览器,因为我回一个JSON对象或XML访问(取决于用户首选项)

我的问题是:我应该限制使用用户/通行证进行访问还是应该创建用户文件的散列?

例如:

场景1:

用户创建一个PHP卷曲发送用户,并通过邮寄或卷曲AUTH传递和获取的结果,分析它,等...

对我来说这是安全的,但用户如果他们改变他们的传球,以保持他的剧本

方案2

用户访问像文件:api.domain.com/j355HGssgf3HESAjh45jusf4325GSj5hbsHhdh5HGHFS3732he4548475wbe3447nSNe5XfgjhGJ,然后访问数据

这一个,没有什么保持

+0

+1很好的问题! –

回答

40

这里是我的想法这一点。

如果您向页面发出请求时返回未找到的页面或错误消息(具有良好的200 OK状态),则可能会向机器人或可信任的人员发送关于他们可以获得的内容的线索一次又一次尝试......

另一方面,如果您发送访问被拒绝(如401)或更好的500错误代码来模拟服务器错误,这些机器人或可信任的人可能会去为好。

在这种情况下,我会说用户/密码方法更安全一些。

现在,当你检查你的邮件时,你会信任简单地输入一个大字符串(如情况2)吗?或您的银行账户信息?

37

如果是我,我会给每个帐户创建一个唯一的API密钥的能力,

api.domain.com/?key=<API.KEY> 

更多的安全措施,你可以把它仅接受通过邮寄方式与API密钥连接。如果通过get联络,然后显示一个错误等

然后,如果他们改变通/用户名也不会影响他们的API密钥

+0

但是如果有人偷走了您的api密钥呢?我正在搜索关于这个参数的一些信息,因为我有2个服务器,并且我想通过POST交流一些合理的信息。但我不明白,我可以使用API​​来检索信息,但如果有人嗅到呼叫,可以使用api密钥检索合理的信息。 – Kreker

+1

如果它是敏感信息,我将使用ssl并加密数据,解密另一端。如果你知道一个API密钥已被盗,重新生成一个新的:) –