Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.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
Php 如何使我的URL API更安全_Php_Iphone_Api_Url - Fatal编程技术网

Php 如何使我的URL API更安全

Php 如何使我的URL API更安全,php,iphone,api,url,Php,Iphone,Api,Url,我已经实现了一个PHP URL API,我正在从我的iPhone应用程序调用它,以便访问服务器上的某些数据。我不确定如何使它只允许我的应用程序调用API。到目前为止,我的解决方案非常简单,就是在URL中传递一个密钥,但如果有人想要,它很容易被捕获,然后被不想要的用户使用。我该怎么办?谢谢你的建议 需要用户名和密码怎么样? 一个简单(但并非完美)的方法可能是。要求用户名和密码如何? 一个简单的(但不是完美的)方法是。通过HTTPS进行通信。我会让应用程序与服务器进行初步检查。如果服务器以某种方式响

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

需要用户名和密码怎么样?

一个简单(但并非完美)的方法可能是。

要求用户名和密码如何?

一个简单的(但不是完美的)方法是。

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

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


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

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

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


顺便说一下,在代码中输入敏感用户名和密码时要小心。如果有人反编译你的可执行文件,他们可能会看到它们。选择更具动态性的操作,例如在与服务器进行初步检查后获取密码。

您使用密钥的方法是正确的,但使用该密钥创建一个散列,并使用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散列。重要的部分是从提交中删除一些“关键”数据以生成散列。这还验证了数据在传输过程中没有被更改或篡改,因为它起着某种校验和的作用


随机数据是为了确保每个请求都有不同的散列,因此更难检测模式。此方法应足以阻止偶然的黑客攻击。

您使用密钥的方法是正确的,但使用该密钥创建一个哈希,并使用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散列。重要的部分是从提交中删除一些“关键”数据以生成散列。这还验证了数据在传输过程中没有被更改或篡改,因为它起着某种校验和的作用


随机数据是为了确保每个请求都有不同的散列,因此更难检测模式。此方法应足以阻止偶然的黑客攻击。

如果您想在HTTP请求中发送一些机密,至少应该使用SSL来保护它,而不是使用HTTPS。如果您想在HTTP请求中发送一些机密,至少应该使用SSL来保护它,而不是使用HTTPS。