我已经建立了一个非常简单的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,我想通过简单地监视正在发生的事情并从那里获取来开始。
答案 0 :(得分:0)
GDPR并不是说您不能使用IP地址,而是您必须有合理的使用它们的基础,告诉人们您是否使用了IP地址,不要将它们保留的时间过长,并且不要共享他们与第三方。使用它们来防止滥用是一个完全合理的基础,只要您所说的是您做的。
对于速率限制,大多数防火墙将以很少的开销(完全基于IP,而不是ID)来做到这一点。在您自己的应用程序中安全地执行此操作的方法是根据IP和ID的哈希值为命中索引。由于您无法从哈希表中获取原始数据,因此可以安全地保留它们而无需其他警告。