当前位置: 首页 > 面试题库 >

从Wordpress网站进行AJAX调用时如何保护API密钥?

阳俊德
2023-03-14
问题内容

我想对已经列出我们公司产品的本地在线商店进行API调用,然后返回其详细信息,标签,照片等的JSON。除了保护我的API密钥之外,不包括敏感信息。

如何保护我的API密钥并向另一个网站发出GET / POST请求?


问题答案:

要向访问您网站的访问者隐藏API密钥,请在您自己的网站上使用PHP脚本充当中继。它接收Ajax请求(没有API密钥);添加您的密钥并发出自己的API请求;然后将响应返回到浏览器。

例如Javascript

var dataString = "item=" + $('#item').val() + "&qty=" + $('#quantity').val(); 
$.ajax({type: "POST", url:"/myrelays/getstockdata.php", data: dataString, success: function(data){ your function to handle returned data } });

getstockdata.php脚本(一个非常粗糙的框架):

<?php
header('Content-Type: application/json; charset=utf-8');

$api_key = 'xyz1234';
$result = array('status'=>'Error','msg'=>'Invalid parameters');

// your code to sanitize and assign (Ajax) post variables to your PHP variables
// if invalid:   exit(json_encode($result));

// make API request with $api_key
$url = 'https://api.provider.com/stockdata.json?key=' . $api_key . '&item=' . $item . '&qty=' . $qty;
$ch = curl_init($url);  
curl_setopt($ch,CURLOPT_FAILONERROR, TRUE);  // identify as error if http status code >= 400
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);  // returns as string
$api_response = curl_exec($ch);
if(curl_errno($ch) || curl_getinfo($ch, CURLINFO_HTTP_CODE) != 200 ) :
    $result['msg'] = 'Item not found or unable to get data. ' . curl_error($ch);
    curl_close($ch);
    exit(json_encode($result));
endif;
curl_close($ch);
$decodedData = json_decode($api_response, true);
// check for success and do any server side manipulation of $decodedData

$result['status'] = 'OK'];
$result['msg'] = '$decodedData';
exit(json_encode($result));
?>

注意:在脚本中,我通常将“ HTML”传递回浏览器。因此,脚本的“ Json”位可能需要更改,例如,可能不需要“ header”(脚本的第一行)。



 类似资料:
  • 我试图保护Spring BootAPIendpoint。我希望只传递api密钥和秘密作为头的一部分来调用api。我尝试了这个链接中发布的代码。但是在头中使用授权调用api时拒绝访问。使用API key和secret保护Spring Boot API我想知道我应该作为头部的一部分传递什么,这样我就可以从API获得成功的响应。我做了以下步骤:我在application.properties中添加了以下

  • 如何在客户端存储和保护私钥。 有什么方法可以保护JavaScript中的API密钥吗?。 我不能只是将它以纯文本形式放在那里,因为它可以被看到代码的其他人使用。那么,是否会有一个API保持秘密的实现呢?

  • 我的应用程序由几个PHPendpoint组成,这些endpoint可以通过AJAX访问。问题是它们也可以通过向同一endpoint发出HTTP请求的任何人访问。我可以添加这个答案中指定的和的检查,但是这些检查可以被欺骗。我可以添加一个需要与请求一起发布的密钥,但是任何查看javascript和/或控制台的人都可以看到这个密钥。这里的解决方案是什么?

  • 我想保护Spring Boot API,使它只对具有有效API密钥和秘密的客户机是可访问的。但是,由于所有数据都是匿名的,程序内部没有身份验证(使用用户名和密码的标准登录)。我试图实现的只是所有API请求都可以仅用于特定的第三方前端。

  • OAuth 2.0 资源所有者密码授权 允许一个客户端发送用户名和密码到令牌服务并获得一个表示该用户访问令牌。 (OAuth 2.0) 规范 建议仅对“受信任”的应用程序使用资源所有者密码授权。一般来说,当你想要验证一个用户并请求访问令牌的时候,使用交互式 OpenID Connect 流通常会更好。 不过,这个授权类型允许我们在 IdentityServer 快速入门中引入 用户 的概念,这是我

  • 问题内容: 我的ajax调用输出始终显示0,因为输出不知道为什么 在我有这段代码 我的ajax调用是在javascript中 我没有使用插件就在wordpress中进行ajax调用,但是没有得到我正在传递的内容,即使输出$ abc仍然显示0。 问题答案: 在后端,WordPress本身定义了全局ajaxurl变量。 该变量不是由WP在前端创建的。这意味着,如果要在前端使用AJAX调用,则必须自己定