Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.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
Javascript 安全API服务器的实现_Javascript_Php_Json_Rest_Authentication - Fatal编程技术网

Javascript 安全API服务器的实现

Javascript 安全API服务器的实现,javascript,php,json,rest,authentication,Javascript,Php,Json,Rest,Authentication,我正在寻找用php构建的伪api服务器的安全性 下面是api.php的一个非常基本的形式: <?php if (isset($_GET['type']) ) { switch ($_GET['type']) { case 'combobox' : header('Content-Type: application/json'); $an_array = array(); $an_array[0]['id'] = 'Option 1'; $an_array[0]['text'] = 'O

我正在寻找用php构建的伪api服务器的安全性

下面是api.php的一个非常基本的形式:

<?php
if (isset($_GET['type']) ) {
switch ($_GET['type']) {
case  'combobox'  :
header('Content-Type: application/json');
$an_array = array();
$an_array[0]['id'] = 'Option 1';
$an_array[0]['text'] = 'Option 1';
$an_array[1]['id'] = 'Option 2';
$an_array[1]['text'] = 'Option 2';
echo json_encode($an_array);
break;
default:
echo 'nothing to see here as type was not a valid option';
break;
}
}
else {
  echo 'no type specified';
}
 ?>
可以使用ajax在组合框中使用此json,如下所示:

call.php的内容:

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/css/select2.min.css" rel="stylesheet" />
</head>
  <select class="select2 select2-single" single data-placeholder="Select Types">
  <optgroup label="Types">
  </optgroup>
  </select>


<script>
$(document).ready(function() {
$(".select2").select2({
   width: '300px',
   ajax: {
     url: "http://example.com/json.php?type=combobox",
     dataType: 'json',
     delay: 250,
     multiple: "false",
     dropdownAutoWidth: 'true',
     processResults: function (data) {
       return {
         results: $.map(data, function (obj) {
           return {
             id: obj.id,
             text: obj.text
           };
         })
       };
     }
   }
 });
})
 </script>

$(文档).ready(函数(){
$(“.select2”)。选择2({
宽度:“300px”,
阿贾克斯:{
url:“http://example.com/json.php?type=combobox",
数据类型:“json”,
延误:250,
多重:“假”,
dropdownAutoWidth:“true”,
processResults:函数(数据){
返回{
结果:$.map(数据、功能(obj){
返回{
id:obj.id,
text:obj.text
};
})
};
}
}
});
})
实际上,我有一个服务器,它为一个web应用程序提供服务,这个web应用程序有这个组合框和数百个其他东西,并且正在调用api服务器来查询mysql等。由于这些ajax调用是从用户的浏览器中进行的,并且正在填充组合框和数据表,我不能仅仅将web应用程序服务器的ip锁定到api服务器。我可以获得用户会话并对其进行处理。 问题是,我想让第三方安全地查询这个api返回

我在想,也许我可以在登录后抓取php会话并将其传递给api服务器,然后仅在该会话处于活动状态时向浏览器提供内容。但这并不能解决我向第三方提供一些数据提要的问题(第三方没有与web应用程序的会话)

我不想在这里重新发明轮子,我愿意接受任何建议,使用任何框架或方法来正确和安全地完成这项工作

我猜解决方案将涉及像这样查询api服务器:json.php?type=combobox&apikey=xxxxxxxx随机xxxxxxxx
apikey是不能从源代码中提取并在另一台机器上运行的东西吗?

请澄清您到底想保护什么?例如,我希望您上面看到的json数据只能从登录到我的web应用程序的用户处查看(使用php身份验证)或者第三方拥有我发给他们的钥匙或其他方式。如果有人只是在浏览器中键入url,我不希望这些数据可以公开查看。然后您将看到类似OAuth的实现。可能是
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<link href="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.1/css/select2.min.css" rel="stylesheet" />
</head>
  <select class="select2 select2-single" single data-placeholder="Select Types">
  <optgroup label="Types">
  </optgroup>
  </select>


<script>
$(document).ready(function() {
$(".select2").select2({
   width: '300px',
   ajax: {
     url: "http://example.com/json.php?type=combobox",
     dataType: 'json',
     delay: 250,
     multiple: "false",
     dropdownAutoWidth: 'true',
     processResults: function (data) {
       return {
         results: $.map(data, function (obj) {
           return {
             id: obj.id,
             text: obj.text
           };
         })
       };
     }
   }
 });
})
 </script>