在客户机/服务器sid上设计一个加密的限时API

2024-06-28 20:16:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我计划在客户端和服务器端设计一个加密的限时API,服务器端用Django编写,客户端用GUI程序调用API

import requests
c = requests.post("http://127.0.0.1:8000/VideoParser/", data={'videoUrl': videoUrl })

它调用API的方式非常暴露给那些可以使用wireshark和fiddler等网络流量捕获工具的人,而我不希望其他任何人可以使用他们定制的videoUrl调用API,如果人们在客户端最初调用后2分钟使用相同的参数进行post调用,那么调用应该是在这种情况下,如何在客户端和服务器端设计加密的限时API呢?你知道吗


另外,我认为在post data中添加identifier可以阻止他们使用API

import requests
c = requests.post("http://127.0.0.1:8000/VideoParser/", data={'videoUrl': videoUrl, 'identifier':value_of_identifier })

假设在value_of_identifier中有加密的东西,并且它会随着每次调用而改变,但我不知道如何开始,知道吗?你知道吗

最好展示一些代码,我真的不知道如何开始写代码。你知道吗


Tags: of代码importapihttp客户端datavalue
1条回答
网友
1楼 · 发布于 2024-06-28 20:16:47

我认为这将解决你的目标:

  1. 为允许发出请求的每个用户创建一个访问密钥和一个密钥。你知道吗
  2. 将每个密钥的一个副本提供给用户,并在服务器上保留每个密钥的一个副本。你知道吗
  3. 为每个请求添加以下两个参数:时间戳和访问密钥
  4. 要求用户在发送请求时,创建post请求的字符串和timestamp参数,并使用密钥对其进行哈希运算。(任何哈希算法都可以)
  5. 在Post请求中创建一个名为Signature的参数,并使用哈希字符串作为签名的值。你知道吗
  6. 当请求到达服务器时,使用访问密钥检索该用户的密钥,并再次对请求进行哈希处理。这将重新创建签名。在服务器上创建的签名和用户发送的签名必须匹配。

如果两个签名不匹配,则丢弃。这样,任何在网络上监听的人都将拥有url和访问密钥,但如果没有与访问密钥相关联的密钥,就无法创建有效的签名。你知道吗

由于存在时间戳,攻击者将无法重新使用被盗签名。你知道吗

亚马逊使用这种技术。http://docs.aws.amazon.com/general/latest/gr/signature-version-4.html

相关问题 更多 >