您为什么不尝试在自定义标头中发送您的 API_KEY,该标头可以与来自客户端的 php 或 ajax 请求一起触发,这样您的 API_KEY 在 URL 中根本不可见,稍后可以从服务器使用apache_request_headers()
,这是一种更安全的方法,如果您仍然不满意,您可以实现 HMAC http 身份验证,这该死的安全,我敢打赌。
方法1:(没有HMAC)
客户端:
使用jQuery
$.ajax({
url: 'foo/bar',
headers: { 'api_key': 'API_KEY' }
});
使用 PHP
header('api_key':'API_KEY');
通过在请求中添加标头,URL 可以只是
http://website.com/index.php?movie=Titanic
在服务器端:
$headers = apache_request_headers();
if(isset($headers['api_key']))
{
// validate your api_key from database
}
方法 2:(使用 HMAC)
在这种情况下,有一个细微的变化,而不是在您的 url 中发送 API_KEY 作为查询字符串,您必须发送用户 ID 或任何其他唯一标识符,以便与数据库中的 api_key 相关.
在客户端:
按照给出的 HMAC 做https://code.google.com/p/crypto-js/#HMAC
或使用这两种方法的 php 函数hash_hmac()
,您将获得一个哈希值,它是您的 API_KEY 和您的数据的组合,例如。
$hashed_value = hash_hmac('sha1','titanic','API_KEY');
header('hash':$hashed_value);
你的网址http://website.com/index.php?movie=Titanic&uid=xx
在服务器端:
$headers = apache_request_headers();
if(isset($headers['hash']))
{
// then try to recreate your hash in server, like
//using $_GET['uid']= get your API_KEY from DB
$api_key = getApiKey($_GET['uid']);
$hash = hash_hmac('sha1',$_GET['movie'],$api_key);
if($hash==$headers['hash'])
{
// User authenticated
}
}
如果您通过HMAC,您可以找出它的好处。