Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安全PHP RESTful API_Php_Rest - Fatal编程技术网

安全PHP RESTful API

安全PHP RESTful API,php,rest,Php,Rest,我开始开发一个简单的PHP RESTful API。在阅读了一些教程之后,关于REST的一个特性是 。。。无国籍是关键。本质上,这意味着 处理请求的必要状态包含在请求中 本身,无论是作为URI、查询字符串参数、正文还是 标题 因此,这意味着我的PHP服务器不需要有$\u会话?你推荐什么样的方法?在URL中使用短时间有效的令牌似乎有点不安全? 例如www.myapi.com/1233asdd123/get_user/12 非常感谢。非常常见的做法是在URL中使用键值: www.myapi.com?

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

。。。无国籍是关键。本质上,这意味着 处理请求的必要状态包含在请求中 本身,无论是作为URI、查询字符串参数、正文还是 标题

因此,这意味着我的PHP服务器不需要有$\u会话?你推荐什么样的方法?在URL中使用短时间有效的令牌似乎有点不安全? 例如www.myapi.com/1233asdd123/get_user/12


非常感谢。

非常常见的做法是在URL中使用键值:

www.myapi.com?key=ABCD1234

它不比发布字符串更安全。SSL加密确保整个有效负载不会被中间人截获

更多信息:


您还提到了一个临时访问会话令牌。在系统中,使用类似于上述解决方案的凭据登录并在响应中获取临时会话令牌是很常见的。然后使用会话令牌而不是登录详细信息来查询服务。它减少了拦截时凭证的暴露,如果有人设法窃取会话令牌,它将只工作几分钟。虽然不是必需的,但很好。

一种非常常见的做法是在URL中使用键值:

www.myapi.com?key=ABCD1234

它不比发布字符串更安全。SSL加密确保整个有效负载不会被中间人截获

更多信息:


您还提到了一个临时访问会话令牌。在系统中,使用类似于上述解决方案的凭据登录并在响应中获取临时会话令牌是很常见的。然后使用会话令牌而不是登录详细信息来查询服务。它减少了拦截时凭证的暴露,如果有人设法窃取会话令牌,它将只工作几分钟。虽然不是必需的,但很好。

如果你是任何类型的web开发人员,你可能已经听过这句话1000次了:HTTP是一种无状态协议。这意味着每个会话都使用服务器和客户端之间交换的令牌

当您使用PHP的内置会话时,服务器实际上正是这样做的,即使您没有意识到:它生成一个会话id并将其传递给客户端。客户端通常在cookie上传递会话标识令牌;PHP允许在URL上也包含会话令牌,作为GET参数,但我个人建议在PHP5.3+上默认禁用

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

代币的寿命应该很短,例如30分钟,并且应该经常刷新。刷新非常重要,不仅可以延长会话的生命周期,而且每次刷新都会给您额外的30分钟左右,还可以帮助您防止会话密钥被盗。在我们创建的一些REST服务器中,会话令牌有效期为30分钟,在会话启动10分钟后发出的第一个请求中,用户将获得一个新令牌。当向客户端发送新令牌时,旧令牌将立即失效

您可以以任何方式将令牌传递给服务器,但将其作为GET参数添加并不是理想的解决方案,原因有二:1。GET参数通常写入服务器和2的访问日志中。用户经常复制/粘贴URL并共享它们,这可能会公开他们的会话令牌。 对于API服务器,最好的方法是在HTTP请求的一个头中包含会话令牌。例如,您可以设置您的授权标题:Authorization:SessionToken 123123,其中123123123是您的令牌,SessionToken是一个字符串,用于告诉服务器使用您的授权方法您可以自由选择自己的名称,只要它不是像Basic这样的默认方法之一;但要始终如一

API服务器上的安全性通常通过使用SSL获得。基本上,如果您有一个API服务器,则必须使用HTTPS SSL对其进行保护。
也有一些方法可以在不使用SSL的情况下实现安全性,但它们需要对每个请求进行签名,而且实现和使用起来非常复杂,而且它们增加的开销可能比SSL的开销更大。

如果你是任何类型的web开发人员,你可能会听到这句话1000次:HTTP是一种无状态协议。这意味着每个会话都使用服务器和客户端之间交换的令牌

当您使用PHP的内置会话时,服务器实际上正是这样做的,即使您没有意识到:它生成一个会话id并将其传递给客户端。客户端通常在cookie上传递会话标识令牌;PHP允许包含会话令牌 同样在URL上,作为GET参数,但我个人建议在PHP5.3+上默认禁用

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

代币的寿命应该很短,例如30分钟,并且应该经常刷新。刷新非常重要,不仅可以延长会话的生命周期,而且每次刷新都会给您额外的30分钟左右,还可以帮助您防止会话密钥被盗。在我们创建的一些REST服务器中,会话令牌有效期为30分钟,在会话启动10分钟后发出的第一个请求中,用户将获得一个新令牌。当向客户端发送新令牌时,旧令牌将立即失效

您可以以任何方式将令牌传递给服务器,但将其作为GET参数添加并不是理想的解决方案,原因有二:1。GET参数通常写入服务器和2的访问日志中。用户经常复制/粘贴URL并共享它们,这可能会公开他们的会话令牌。 对于API服务器,最好的方法是在HTTP请求的一个头中包含会话令牌。例如,您可以设置您的授权标题:Authorization:SessionToken 123123,其中123123123是您的令牌,SessionToken是一个字符串,用于告诉服务器使用您的授权方法您可以自由选择自己的名称,只要它不是像Basic这样的默认方法之一;但要始终如一

API服务器上的安全性通常通过使用SSL获得。基本上,如果您有一个API服务器,则必须使用HTTPS SSL对其进行保护。
也有一些方法可以在不使用SSL的情况下实现安全性,但它们需要对每个请求进行签名,而且实现和使用起来非常复杂,而且它们增加的开销可能比SSL的开销更大。

如果我构建了一个移动应用程序,我可以很容易地添加该授权标头吗?谢谢你的帮助comment@DiogoMendonça到目前为止,我看到的每个库都允许您在每个平台上轻松添加自定义标题。这是一件非常标准的事情!PS:这个工具可能有助于开发:对不起,只是一个问题:用Nonce发送代币更好吗?@DiogoMendonça我恐怕这个问题问错了!如何使用nonce?可能在授权标头中发送类似AccessToken=2abx123vvae、nonce=123133132的内容。为了提高安全性,我想:如果我构建了一个移动应用程序,我可以很容易地添加授权头?谢谢你的帮助comment@DiogoMendonça到目前为止,我看到的每个库都允许您在每个平台上轻松添加自定义标题。这是一件非常标准的事情!PS:这个工具可能有助于开发:对不起,只是一个问题:用Nonce发送代币更好吗?@DiogoMendonça我恐怕这个问题问错了!如何使用nonce?可能在授权标头中发送类似AccessToken=2abx123vvae、nonce=123133132的内容。只是为了增加安全性,我猜:x