GDPR对谁知道什么是违法行为的罚款实施了数百万美元的罚款。 PHP中是否有一个简单的免费解决方案来处理我的个人网站?我不需要跟踪别人,但我想至少知道谁在访问,例如我想知道浏览器,操作系统,组织。我当然愿意阻止所有欧盟访客但我知道很多人将他们的浏览器设置为英语,因此按语言阻止是无效的。
作为一个不赚钱的非律师和维护者,我认识到我永远不会完全理解GDPR,我永远不会有资金随时更新它。只有大公司才能负担得起花费所需的时间,精力和金钱。所以我需要一个简单的机制来阻止欧盟用户,否则,我将不得不采取保守的方法来收集访问者的数据。
这项GDPR法律威胁因违规行为而导致经济死亡的人,但绝大多数人都不知道其模糊规则究竟需要什么。这是一项法律,它有利于拥有资源的大公司,并且是对小公司和个人的攻击。</ p>
答案 0 :(得分:7)
首先,最好先了解合法利益 - https://ico.org.uk/for-organisations/guide-to-the-general-data-protection-regulation-gdpr/legitimate-interests/when-can-we-rely-on-legitimate-interests/ - 然后询问从用户那里收集个人数据的法律依据是什么?
与您的问题相关,通过nginx和GeoIP数据库确实存在这种可能性。
为nginx安装GeoIP数据库:
apt-get install geoip-database-contrib -y
更新您的nginx配置(在server {} block
之外):
# Block the EU continent from accessing the site
geoip_country /usr/share/GeoIP/GeoIP.dat;
geoip_city /usr/share/GeoIP/GeoLiteCity.dat;
map $geoip_city_continent_code $allow_visit {
default 1;
EU 0;
}
在server {}
阻止内,禁用欧盟用户的记录并返回403:
# Disable logging for EU users
access_log /var/log/nginx/access.log combined if=$allow_visit;
# Block and return 403 error message to EU users
default_type text/plain;
if ($allow_visit = 0) {
return 403 'You are prohibited from visiting this website due to GDPR compliance requirements.';
}
重新启动nginx
service nginx restart
的信用
答案 1 :(得分:1)
对于那些不确定或无法访问和修改服务器配置的人,有一个简单的插件可用于此,这对于许多人来说可能更容易实现。根据网站上提供的安装说明,您只需在页面代码中的开始标记中添加一个JavaScript标记即可。
https://www.ezigdpr.com/products/eu-visitor-blocker
通过在首次加载页面时触发阻止脚本,它可以防止加载任何跟踪脚本,插件或像素。
如果您具有技术能力和访问权限,则还可以考虑在服务器级别关闭IP日志记录。尽管可以争论的是,如果您不知道如何访问它,那么它可能不在GDPR范围内。
您可能还想阅读以下博客文章,其中概述了与阻止欧盟交通有关的各种注意事项和合规陷阱。
https://www.ezigdpr.com/blog/2018/06/05/6/is-it-gdpr-compliant-to-block-eu-visitors
答案 2 :(得分:0)
我使用websiteip2location.com
,这是一个旨在列出所有IP地址的网站。 IP Deny Manager是一个实用程序,可用于大多数使用C-Panel的托管服务。
虽然看起来很细致,但我打算复制欧盟每个国家/地区的每个IP地址范围,并将其粘贴到C-Panel的IP Deny Manager工具中。
我不确定这是否是最好的技术解决方案,但这是我能想到的最好的解决方案。
答案 3 :(得分:0)
MaxMind具有用于几乎每种编程语言都可以检测国家/地区的API。它们也是Apache,Varnish和Nginx的模块。如果您想更精细地检测正确的城市,则必须付费,否则,它完全免费。
请参见https://dev.maxmind.com/geoip/geoip2/downloadable/#MaxMind_APIs
由于这个问题是专门针对PHP的,因此您可以通过首先安装composer软件包来阻止PHP中的欧盟国家/地区:
php composer.phar require geoip2/geoip2:~2.0
然后像这样使用它
const EU_COUNTRY_CODES = [
'AT', 'BE', 'BG', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT',
'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'GB'
];
require_once 'vendor/autoload.php';
use GeoIp2\Database\Reader;
$reader = new Reader('/usr/local/share/GeoIP/GeoIP2-City.mmdb');
$ip = $_SERVER['REMOTE_ADDR'];
// If you're behind a reverse proxy, you may need to do
// $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
// or whatever IP address header your proxy sets when forwarding the request
$record = $reader->country($ip);
if (in_array($record->country->isoCode, EU_COUNTRY_CODES), true){
echo "We detected you where connecting from ";
echo $record->country->name;
echo ". We do not currently allow connections from the EU";
die();
}
答案 4 :(得分:0)
您可以将IP2Location PHP Module与免费的IP2Location LITE DB1数据库一起使用。
从https://lite.ip2location.com/database/ip-country下载BIN数据库文件,然后将BIN文件提取出来。
安装
将以下行添加到您的composer.json文件中。
{
"require": {
"ip2location/ip2location-php": "8.*"
}
}
运行命令:
composer install
PHP代码
require 'vendor/autoload.php';
$EU_COUNTRIES = [
'AT', 'BE', 'BG', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE',
'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE'
];
$db = new \IP2Location\Database('./database/IP2LOCATION-LITE-DB1.BIN', \IP2Location\Database::FILE_IO);
$ip = $_SERVER['REMOTE_ADDR'];
$records = $db->lookup($ip, \IP2Location\Database::ALL);
if (in_array($records['countryCode'], $EU_COUNTRIES)) {
die('You are coming from ' . $records['countryName'] . ' which is part of the EU.<br />Visitors from the EU are not allowed access to this website due to GDPR.');
}
答案 5 :(得分:-1)
尽管有EU GDPR,但请记住,法院的法律管辖权将是您网站上自己的“使用条款”协议所规定的(或应始终如此)。法律中重要的是,网站所有者已做出“真诚努力”,禁止这些会员国访问该网站。
鉴于以下是一个可重复使用的PHP函数,该函数使用“ ip-api.com” API返回IP上的位置数据,并对照当前欧盟成员国的白名单进行检查。白名单易于维护,这很好,因为进出欧盟的国家不断变化。白名单于1018年7月24日汇总在一起,数据经过欧盟官方网站和Wikipedia之间的交叉核对。 ip-api.com API免费供个人使用(用于商业用途的联系方式),也可以从本地服务器运行,无需注册或域要求。
function inEU($ip_input){
// Validate the IP address
if (filter_var($ip_input, FILTER_VALIDATE_IP) === false){
// Not a valid IP address - build error response
$message_string =
'<div style="width:100%; margin-top:50px; text-align:center;">'.
'<div style="width:100%; font-family:arial,sans-serif; font-size:24px; color:#c00; centered">'.
'ERROR: <span style="color:#fd0">Invalid IP Address</span>'.
'</div>'.
'</div>';
echo $message_string;
exit;
}
// Array of country names and country codes of European Union member countries
$eu_members = array(
'Austria','AT', 'Belgium','BE', 'Bulgaria','BG',
'Croatia','HR', 'Cyprus','CY', 'Czech Republic','CZ',
'Denmark','DK', 'Estonia','EE', 'Finland','FI',
'France','FR', 'Germany','DE', 'Greece','GR',
'Hungary','HU', 'Ireland','IE', 'Italy','IT',
'Latvia','LV', 'Lithuania','LT', 'Luxembourg','LU',
'Malta','MT', 'Netherlands','NL', 'Netherlands Antilles','AN',
'Poland','PL', 'Portugal','PT', 'Romania','RO',
'Slovakia','SK', 'Slovenia','SI', 'Spain','ES',
'Sweden','SE', 'United Kingdom','GB','UK'
);
$query_url = 'http://ip-api.com/json/'.$ip_input; // Build query URL for IP to JSON Data request
$ip_data_fetched = file_get_contents($query_url); // Return IP Data JSON as a string
$ip_data_fetched = utf8_encode($ip_data_fetched); // Encode returned JSON string to utf-8 if needed
$ip_data = json_decode($ip_data_fetched); // Decode utf-8 JSON string as PHP object
// Get the Country and Country Code for the IP from the returned data
$country = $ip_data->country; // Country Name (i.e; 'United States')
$countryCode = $ip_data->countryCode; // Country Code (i.e; 'US')
// Check the EU members array for match to either country or country code
$in_EU = false; // Ref for function boolean value returned - set false
$num_members = count($eu_members); // Number of indexes in EU members array (not # of members)
for ($i = 0; $i < $num_members; $i++){
$lc_eu_members = strtolower($eu_members[$i]);
if ($lc_eu_members === strtolower($country) || $lc_eu_members === strtolower($countryCode)){
$in_EU = true;
break;
}
}
return $in_EU;
}
要使用该功能...
if (inEU( $ip )){
// IP address IS in an EU country
}
else {
// IP address IS NOT in an EU country
}
该函数还可以在同一循环中交叉检查返回的位置数据,因此,如果一个变量中有错别字,它将仍然使用另一个变量来查找位置。两者都不可能出错。
可以轻松地将此功能调整为与许多其他IP一起使用,以返回JSON响应的位置API。也可以很容易地将其更改为“仅允许”白名单,而不是“禁止”白名单。
希望这会有所帮助!
答案 6 :(得分:-2)
这是一个重要的问题,尽管不直接是编程问题,但重要的是要知道您是否是一名程序员,因为当今大多数编程都需要通过Internet发送数据。我已经对GDPR进行了相当多的研究,而我在论坛上看到的最大误解是,这些法律术语完全是为了保护欧盟公民访问网站的隐私。错误。再次阅读GDPR。
GDPR与通过互联网以任何方式传输PII数据有关,这与仅在美国已经存在多年的法律相矛盾。对于无法执行的GDPR,这只是众多示例之一。
假设您是美国公民,而您刚收到一封来自欧盟公民的电子邮件。 lam!您已经违反了GDPR。为什么?因为所有电子邮件都具有与任何Internet请求一样的标头,并且标头信息中包含原始IP地址以及其到您的邮件提供商邮件服务器的路由的完整跟踪。根据美国联邦法律,所有电子邮件都必须由电子邮件服务提供商无限期存档,从而违反GDPR法律以符合USFederal法律,因为电子邮件的标头信息是其中的一部分,因此不属于根据美国法律对电子邮件的存档要求是可分离的。
不仅如此!您还意识到,如果电子邮件的实际收件人想要亲自保留该电子邮件的副本,而不是在阅读后立即销毁它,那么它也将违反GDPR。不管刚才描述的其他情况如何,只有一个欧盟公民向该美国公民发送该电子邮件会自动将该美国公民置于违反GDPR的状态……并且由于IP跟踪数据已经存在,他们甚至不必打开电子邮件。在发送的电子邮件甚至到达收件人收件箱之前,由邮件服务提供商获取并记录。
是的...这仅仅是这种疯狂,过分热心,过分理想和对非欧盟公民在各自国家/地区内的权利过度施加的开始。
从本质上讲,欧盟公民要求全世界遵守他们认为最适用于世界其他地区的法律,而不是承认非欧盟国家公民有权制定自己的法律,由本国公民通过自己的政府立法程序进行投票。
这意味着GDPR本身具有歧视性。在美国,歧视是违法的,因此遵守GDPR会对我的非欧盟公民具有歧视性,因此我为了遵守GDPR而违反了本国法律。
现在回复原始OP。在这种情况下,我要做的是“点击包装”我的网站。到达网站后,会向访问者显示一条消息,即如果他们是欧盟公民,则将被禁止访问该网站,并带有两个按钮“我是欧盟公民”和“我不是欧盟公民”。此时,我还没有访问程序或存储访问者IP地址的权限,唯一可用的操作是两个按钮之一。
如果访问者单击“我是欧盟公民”按钮,则会立即将访问者发送回他们来自的引用页面。如果他们单击“我不是欧盟公民”按钮,则允许他们访问该网站。如果他们无论如何都是为了访问该网站而存在的,那么他们正在犯下故意的欺诈行为,仅通过该行为,他们就放弃了其在GDPR中可能拥有的任何和所有权利,现在,他们的IP被保留用于合法有关预先警告和禁止访问网站的要求,以及通常的服务器安全性和网站分析使用的要求。
此外,请确保不要加载任何第三方服务,直到他们确认自己不是欧盟公民,因为这些第三方服务还会收集您访问者的数据,这些数据仍可能被视为违反GDPR如果不是在访问者声明公民身份之前将其加载到初始消息页面中,则由您(而不是第三方)提供。
目前,我想说的是,“点击包装”方法是小型网站所有者可以保护自己免受任何GDPR要求的唯一方法。 GDPR不会为那些通过欺诈手段访问您的网站的欧盟平民提供保护。