如何使 URL API 更安全 [已关闭]

问题描述 投票:0回答:3

我已经实现了一个 PHP URL API,我从我的 iPhone 应用程序调用它,以便访问我的服务器上的某些数据。我不确定如何才能只允许我的应用程序调用 API。到目前为止,我的解决方案非常简单,一直是在 URL 中传递一个密钥,但如果有人愿意,它可以很容易地被缓存,然后被不需要的用户使用。我该怎么办?

php ios url
3个回答
4
投票

您使用密钥的方法是正确的,但使用该密钥创建一个散列,并通过 URL 而不是密钥传递该散列。服务器具有相同的密钥并且可以重新创建相同的哈希值。如果不匹配,则无效。

$key = 'my secret key';
$data_item1 = 'something';
$data_item2 = 'something else';

$random_key = mt_rand(100000,10000000);
$check = sha1($key . $data_item1 . $data_item2 . $random_key);

$submit_data = array(
    'data_item1' => $data_item1,
    'data_item2' => $data_item2,
    'check' => $check,
    'checkid' => $random_key
);

服务器与应用程序具有相同的 $key。然后,它可以获取提交的数据元素并运行相同的 sha1 并比较 sha1 结果。您不需要使用您提交的所有数据项来创建 sha1 哈希。重要的部分是从提交中遗漏一些“关键”数据来生成哈希值。这也验证了数据在传输过程中没有被更改或篡改,因为它起到了一种校验和的作用。

随机数据是为了确保每个请求都有不同的哈希值,因此更难检测模式。这种方法应该足以阻止随意的黑客攻击。


0
投票

需要用户名和密码怎么样?
一个简单(但不完美)的方法可能是基本访问身份验证


0
投票

通过 HTTPS 进行通信。我会让应用程序对服务器进行初步检查。如果服务器以某种方式响应(例如,使用特定的状态代码或响应字符串),则应用程序知道它是合法的。然后,应用程序可以将信息发布到 PHP API,并可能使用用户名和密码进行身份验证(或者,如果您确实想要复杂一点,请让服务器在初步检查时返回密码,并使用该密码对服务进行身份验证)。

通过 HTTPS 进行通信,您可以确保所有内容都是加密的。通过进行初步检查,您可以更加确信有人不会创建假 SSL 证书并将其放在假服务器上以获取您的身份验证详细信息。然后应用程序安全地完成响应。这个系统更复杂,所以这应该更安全。

顺便说一下,在代码中放置敏感的用户名和密码时要小心。如果有人反编译您的可执行文件,他们就可以看到它们。选择做一些更动态的事情,比如在与服务器进行初步检查后获取密码。

© www.soinside.com 2019 - 2024. All rights reserved.