【问题标题】:Tracking API usage and GDPR Compliance跟踪 API 使用情况和 GDPR 合规性
【发布时间】:2019-03-18 08:52:36
【问题描述】:

我设置了一个非常简单的 API,它以 JSON 格式提供数据。

我想跟踪 API 的使用情况,以便查看是否有人通过发出大量请求来滥用服务。

我能想到的唯一方法是跟踪用户的 IP 地址和用户代理,所以一旦我确认他们的 API 密钥有效,我就会做这个简单的事情:

$ua  = $_SERVER ['HTTP_USER_AGENT'];
$ip  = $_SERVER['REMOTE_ADDR'];

// get querystring data but strip out the 'api_key' bit for recording usage in database
// https://stackoverflow.com/questions/17122563/php-remove-single-variable-value-pair-from-querystring
$qs2 = NULL;
foreach ($_GET as $keyv => $value){
    if ($keyv  != 'api_key'){
        $qs2 .= $keyv  . '=' . urlencode($value) . '&';
    }
}

$sql = "INSERT INTO j_un_api_log (fld_date, fld_user_id, fld_ip, fld_ua, fld_qs) VALUES (now(), :user_id, :ip, :ua, :qs)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':user_id', $user_id);
$stmt->bindParam(':ip', $ip);
$stmt->bindParam(':ua', $ua);
$stmt->bindParam(':qs', $qs2);
$stmt->execute();

但是,由于 GDPR (https://eugdprcompliant.com/personal-data/) 立法,该观点认为:

所有 IP 地址都应被视为个人数据,以便 符合 GDPR

我意识到这有偏离主题的风险,但是 - 我认为这与编程有关,因为我不确定如何在这里继续。

如果我有一个条款和条件部分声明我将在每次调用 API 以跟踪使用情况和防止滥用时存储 IP 地址和用户代理,并要求用户在注册时接受条款和条件,这是否意味着我可以存储 IP 地址和用户代理数据吗?

如果我不能,据我所知,除了简单地存储每个呼叫的用户 ID、日期和时间以及查询字符串之外,没有其他方法可以跟踪使用情况。

如果我也无法存储注册用户的 IP 地址和用户代理,那么大概没有办法,例如,阻止正在敲击 API 的麻烦用户。

我意识到我可以构建系统来防止大量使用,但这是一个基本的 API,我想从简单地监控正在发生的事情开始并从那里获取它。

【问题讨论】:

  • 您不能存储IP,但可以存储一个号码。我这样做的方法是从 IP 中删除点并对数字进行一些数学运算。这给了我一个符合规定的几乎唯一的数字(可能会发生重复)。 (据我所知)。编辑;现在我想起来了。如果你在 dot 上爆炸并说 [0] 与 2 相乘, [1] 与 5 相乘, [2] 与 3 相乘,以此类推,然后将数组内爆,您将拥有一个唯一的数字,只有您知道如何向后重新创建一个知识产权。甚至你也很难做到。

标签: php api privacy


【解决方案1】:

GDPR 并没有说你不能使用 IP 地址,但你必须有合理的基础来使用它们,如果你这样做了就告诉人们,你不会保留它们超过必要的时间,并且不要分享他们与第三方。使用它们来防止滥用是完全合理的基础,只要你说的和你做的就是这样。

对于速率限制,大多数防火墙都会以很少的开销来做到这一点(纯粹是在 IP 上,而不是在 ID 上)。在您自己的应用程序中安全地执行此操作的方法是根据 IP 和 ID 的哈希来索引命中。由于您无法从哈希中返回原始数据,因此无需额外警告即可安全地保留。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-29
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多