安全PHP的RESTful API(Security PHP RESTful API)

2019-10-21 03:24发布

我开始开发一个简单的PHP的RESTful API。 阅读一些教程后,关于REST的特点之一是,

“......无国籍是关键。从本质上讲,这是什么意思的是,处理请求所需的状态被包含在请求本身中,无论是作为URI,查询字符串参数,身体或头部的一部分”

因此,这意味着我的PHP服务器将不再需要有$ _SESSION? 你推荐什么样的方式? 在URL中使用令牌(有效期很短的时间限制),似乎并不有点不安全? 例如www.myapi.com/1233asdd123/get_user/12。

非常感谢。

Answer 1:

如果你是任何形式的Web开发人员,你会听到这句话大概1000次:“HTTP是一个无状态协议”。 这意味着,每个会话与服务器和客户端之间交换的身份标记的工作。

当您使用PHP内置的会话,服务器实际上做的正是这样,即使你没有意识到这一点:它会产生一个SESSION_ID并把它传递给客户端。 客户端通过了SESSION_ID令牌上正常一个cookie; PHP允许包括会话令牌也对URL,作为一个GET参数,但我个人建议禁止该功能 (默认情况下在PHP 5.3+禁用)。

在你的情况,是的,你会不会使用PHP的会话。
您在数据库中存储所有会话令牌和相关的会话创建一个表。

令牌应该具有短寿命(例如,30分钟),需要经常刷新。 刷新是很重要的,不仅延长了会话的生命(每次刷新为您提供了一个额外的30分钟左右),也有利于对会话密钥的盗窃战斗。 在我们创造了一些REST服务器,会话令牌生活30分钟,网友给出的10分钟会议开始后的第一部申请新的令牌。 当客户端发送一个新的令牌,旧立即失效。

您可以将令牌传递到任何方式的服务器,而是将其添加为GET参数是不是有两个原因一个理想的解决方案:1。GET参数经常写在服务器的访问日志和2.用户经常复制/粘贴URL和分享,并能暴露他们的会话令牌。
对于API服务器,最好的方法是包括在HTTP请求的报头中的一个会话令牌。 例如,你可以设置你的授权头: Authorization: SessionToken 123123123其中123123123是你的令牌和SessionToken是一个字符串告诉服务器使用您的授权方法(你可以自由选择自己的名字,只要它不是一个默认的方法,如Basic ;是一致的,虽然)!

API服务器的安全性通常是通过使用SSL获得。 基本上,如果你有一个API服务器,则必须使用HTTPS(SSL)保护。
有方法来实现安全性也没有使用SSL,但他们需要签署每个请求,并真正复杂的实施和使用 - 和他们增加的开销可能比SSL的一个大。



Answer 2:

一个非常普遍的做法是使用URL中的一个关键值:

www.myapi.com?key=ABCD1234

这不是比邮寄字符串较少/更安全。 SSL加密确保了整个有效载荷不能由一个人在这方面的中间人截获。

更多信息 :

您也提到了临时访问(会话令牌)。 这是常见的在系统登录和使用的凭证(如上面的溶液),将获得的响应临时会话令牌。 然后,会话令牌是用来代替的登录信息查询服务。 它减少凭证的论述中拦截的情况下,如果有人设法窃取会话令牌,这将是只有几分钟的工作。 最好有虽然不是必须的。



文章来源: Security PHP RESTful API
标签: php rest