保护对远程php脚本的调用

时间:2011-09-23 13:43:57

标签: php security

  1. 我在服务器上有一个更新数据库的PHP脚本。

  2. 我希望能够从另一台服务器或远程调用此脚本 我的localhost PC使用GET,或使用AJAX浏览器,

  3. 但我不希望任何人能够调用此脚本,除非 允许的。

  4. 到目前为止,我只是在脚本中添加了一段代码来验证GET中的某个引脚,即

    //myscript.php
    
    if( isset($_GET['pin']) && $_GET['pin'] === '1234' )
    {
       //update the DB...
    

    通过这种方式,远程呼叫者必须知道该引脚,即

    file_get_contents(http://remoteserver.com/myscrip.php?pin=1234); //will work
    file_get_contents(http://remoteserver.com/myscrip.php?pin=5678); //will NOT work
    

    这看起来很简单,我想知道它是否安全。

    还有哪些其他可能更安全的替代品(可能不会太复杂)?

    例如,我读到了使用随时间变化的哈希,但它是否值得,怎么可能呢?

4 个答案:

答案 0 :(得分:3)

您可以使用密码保护文件夹(如果您使用的是cpanel或plesk,可以轻松完成)并使用curl访问该网址。

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERPWD, $username . ':' . $password);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

答案 1 :(得分:2)

您的解决方案是安全的,但只能达到一定程度,因此它取决于其他人不称之为的重要性。例如,如果有人监控到该服务器的网络流量,他们将拥有密码,因为它永远不会更改。请记住,它是通过互联网以明文形式发送的。所以我个人不会让这个PHP脚本更新我的瑞士银行账户。

一种选择是根据日期和/或时间获得算法密码,以便每次都有所不同。

另一个解决方案是使用脚本check the IP address of the request,如果没有对服务器的物理访问,这将更难以入侵。

答案 2 :(得分:2)

您可以使用Basic Authentication

答案 3 :(得分:1)

您的示例的一个问题是它将由浏览器的历史记录收集器收集。因此,如果您在家中输入此GET,并且第二天您的孩子开始输入“rem ...”,则浏览器将显示URL和您的唯一凭据。如果更新你的数据库不是一个破坏性的东西(如果它发生一两个额外的时间,它不会是最糟糕的),并且你是相对谨慎和纪律(每次清晰的历史),那么这不是太糟糕。

由于您使用的是PHP,因此应该查看PHP's preferred way