Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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
Security 如何仅从一个URL访问我的服务器上的API调用_Security_Api - Fatal编程技术网

Security 如何仅从一个URL访问我的服务器上的API调用

Security 如何仅从一个URL访问我的服务器上的API调用,security,api,Security,Api,我不知道标题是否足够清楚,无论如何我需要做的是非常简单的:我有一些内容,你可以通过我的服务器上的API调用访问;此内容与用户相关,因此当您请求访问它时,必须先等待所有者授权。由于这些内容可能会嵌入到博客文章或表单帖子中,我希望只能从用户授权的URL访问这些内容 我想到的唯一方法是以某种安全的方式检查请求来自何处:这种方法的问题是,任何人都可以创建一个假请求,使用有效的URL,但实际上来自未授权的URL 我正在寻找一种方法来解决这个问题,即使这不涉及检查实际的URL,而是使用其他方法或其他任何方法

我不知道标题是否足够清楚,无论如何我需要做的是非常简单的:我有一些内容,你可以通过我的服务器上的API调用访问;此内容与用户相关,因此当您请求访问它时,必须先等待所有者授权。由于这些内容可能会嵌入到博客文章或表单帖子中,我希望只能从用户授权的URL访问这些内容

我想到的唯一方法是以某种安全的方式检查请求来自何处:这种方法的问题是,任何人都可以创建一个假请求,使用有效的URL,但实际上来自未授权的URL

我正在寻找一种方法来解决这个问题,即使这不涉及检查实际的URL,而是使用其他方法或其他任何方法。如果这还不够清楚,请随时提问。

关于会话:

如果您生成一个安全令牌,大多数语言都有库来做这样的事情,您可能需要在服务器上的会话中持久化它。当您呈现将访问其他内容的页面时,您可以将该令牌添加到您希望能够访问它的页面上的link/form post/ajax请求中

然后,如果该令牌与用户会话中的值不匹配,则将该令牌与该值进行匹配,并返回某种类型的错误。此解决方案依赖于会话的安全性

不举行会议:

如果您没有会话来绕过服务器持久性,那么可以使用AmazonS3用于安全性的技巧。您可以创建类似于json字符串的内容,该字符串为接下来的30秒5分钟提供授权,只要合适。它需要包含一个时间戳,以便值发生变化。您可以在服务器上使用一个密钥,将该密钥与JSON字符串组合以创建哈希值

您的请求必须包含JSON字符串作为一个请求参数。您需要对其进行base64编码或其他方式,以避免遇到http上不允许的特殊字符。第二个参数是散列操作的输出

当您收到请求时,您将解码JSON字符串,使其与之前完全相同,并使用您的密钥对其进行散列。如果该值与发送到请求的值匹配,则表示这两个值是您发送到最终请求内容的页面的值

警告:

您需要确保使用最新的算法和经过适当审核的安全库来完成这些工作,不要试图编写自己的。可能有其他的解决方法,这取决于最终的情况,但我认为这应该是相对安全的。此外,我不是安全专家,如果你处理非常敏感的信息,我会咨询一位安全专家