验证安全问题

时间:2012-12-04 16:07:34

标签: api http authentication https security

我是初学网站开发人员,我对我开发的API的安全性有所怀疑。这是一个简单的Web服务,需要身份验证才能访问/修改数据。

我想知道通过HTTP验证用户的最佳做法是什么。

目前我的应用程序的工作方式如下:

用户通过API请求(POST)进行身份验证,该请求需要用户名和密码。响应包含有关用户的信息和将来将用于进一步请求的TOKEN。

我的担忧:我不知道auth请求是否应该是POST。这听起来更像是一个GET,因为POST应该创建一些东西(至少这是Ruby on Rails中的惯例)。然后,即使使用POST或GET,在传输信息期间信息仍然是“可见的”。我听说过一些关于HTTPS的问题 - 这是如何解决这个问题的?

令牌在用户创建时生成 - 并且在时间上保持不变。这不好吗?是否应该在“注销”后再次生成令牌?我见过API在令牌上使用API​​_KEY进行身份验证。这有什么作用?

我有一些GET请求来检索有关某些内容的信息。通过此请求,我将从身份验证请求中检索到的令牌作为参数传递。这个可以吗?我的意思是令牌是敏感信息。

我在哪里可以找到有关我的这些问题的更多信息(书籍,文章,w / e)?

2 个答案:

答案 0 :(得分:1)

GET的问题更多的是物理安全性而不是网络安全性 - 我知道我在工作中或在家中与他人一起定期登录网站 - 我当然不希望我的凭据作为附加到URL中查询字符串。

使用HTTPS(SSL)将保护您的postdata,因为信息在通过线路发送之前已经过加密。加密算法使用一些非常聪明的数学来生成其解密令牌,以确保它不会受到中间人攻击的影响。

答案 1 :(得分:1)

HTTP会加密您网站的所有流量,因此会隐藏任何get和post请求。它要求您购买HTTPS证书(价格便宜),并获得非共享IP来托管(不是那么便宜)。 (如果有人谈论自签名证书 - 嗯,这是可能的,但如果外部人员想要与您的服务通话,则不明智。)

拥有持久的登录令牌可能很糟糕,这取决于您想要什么样的不可否认性。如果有人可以在2年前登录,并继续使用令牌,您怎么知道它仍然是原始请求者?代币应该过期并有办法重新请求。

API密钥通常用于在带外交换的共享密钥(通常从托管商的网站获取)。使用自定义身份验证方案和标头,必须为每个请求计算和检查。这不需要HTTPS - 共享密钥用于生成身份验证标头,但不会随之发送,因此秘密不随每个请求一起传送。当然,您需要编写此代码,并找出您希望该过程的内容。我通常会避免这种情况,除非你知道你在做什么 - 你需要对请求进行规范表示,签名,然后将其用作标题。这并不复杂,但也不简单。