【问题标题】:Good way to secure GET request?保护 GET 请求的好方法?
【发布时间】:2013-03-20 16:36:43
【问题描述】:

我正在构建一个示例服务器,以便我可以学习 PHP,并且想知道这是否是保护我的数据库的好方法。本质上,我发送的是我自己的 API 密钥。这是否甚至可以做任何有用的事情,或者这很容易克服。

如果这很可怕,解决这个问题的标准方法是什么?

下面是php文件

<?php
//Check if insert function exists
$apiKey = "6dM7V0n5GqYJLTMibQDf2gA2a94h8hbF";

if(function_exists($_GET['insert']) && ($_GET['key'])==$apiKey) {

    $id = $_GET['id'];
    $first=$_GET['first'];
    $last = $_GET['last'];

    //If found, call the function inser with value as a parameter
   $_GET['insert']($id,$first,$last);
}
?>

网络请求看起来像(来自 iOS 应用程序);

    NSURL*url=[NSURL URLWithString:@"http://localhost/Tutorials/index.php?insert=insert&id=9000&first=YOOOO&last=LOOOO&key=6dM7V0n5GqYJLTMibQDf2gA2a94h8hbF"];

    //URL request
    NSURLRequest*request=[NSURLRequest requestWithURL:url];

    //Set the connection
    connection = [NSURLConnection connectionWithRequest:request delegate:self];

    if (connection) {
        webData=[[NSMutableData alloc]init];
    }

【问题讨论】:

  • 以上基本上意味着一旦有人嗅探请求甚至从浏览器的历史记录中检索它,他们可能会完全控制。

标签: php ios api


【解决方案1】:

为了证明它有多不安全,我可以请求这个页面:

http://example.com/yourpage.php?insert=exec&id=rm+-rf+%2F&key=6dM7V0n5GqYJLTMibQDf2gA2a94h8hbF

除非某些配置阻止它,否则这将尽可能多地擦除您的服务器驱动器,因为 PHP 可以访问它(这可能是您的整个网站)

相反,您应该创建一个有效函数列表,并按 ID 引用它们。将函数存储在数组中,并获取 GET 参数指向的索引。

【讨论】:

    【解决方案2】:

    是的,这不安全,你可以强制客户端进入 HTTPS 连接,或者使用某种双向加密,因为这种方式非常不安全。

    看看这里:

    http://tinsology.net/2009/06/creating-a-secure-login-system-the-right-way/

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 2022-10-17
      • 2018-06-04
      • 1970-01-01
      • 2019-01-25
      • 2013-06-25
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      相关资源
      最近更新 更多