我正在寻找保护我在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';
}
?>
上面调用http://example.com/api.php?type=combobox时会返回以下json:
[{"id":"Option 1","text":"Option 1"},{"id":"Option 2","text":"Option 2"}]
这个json可以使用ajax在组合框中使用,如下所示:
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>
在实践中,我有一个服务器,它提供一个Web应用程序,它有这个组合框和数百个其他的东西,并调用api服务器来查询mysql等。因为那些ajax调用是从用户的浏览器发生的并且正在填充组合框和数据表,我不能只是将Web应用程序服务器的IP锁定到api服务器。我可以获得用户会话并使用它做一些事情。 问题是,我想给第三方访问权限安全地查询此api返回。
我想也许我可以在登录后抓住php会话并将其传递给api服务器,然后仅在此会话处于活动状态时才将内容提供给浏览器。但这并没有解决我向第三方提供一些数据馈送的问题(不会与Web应用程序建立会话)。
我并不想在这里重新发明轮子,我愿意使用任何框架或方法来正确安全地完成任务。
我想解决方案将涉及查询api服务器:json.php?type = combobox&amp; apikey = xxxxxxxxrandomxxxxxxxxx apikey是某人不能从源代码中获取并在另一台机器上运行的东西?