Analityka Ochrona Prywatności

F-Droid zawsze unika śledzenia użytkowników tak bardzo, jak to tylko możliwe. Nigdy nie będziemy wymagać konta, dlatego włożyliśmy wiele wysiłku, aby utrudnić śledzenie użytkowników nawet serwerowi f-droid.org. Uznajemy również, że dane dotyczące użytkowania mają wartość. Mogą być wykorzystane do pokazania poziomu popularności i dostarczenia programistom aplikacji informacji zwrotnych na temat tego, co lubią użytkownicy.

Po latach całkowitego odchodzenia od danych, w tym wyłączenia liczenia pobrań na f-droid.org, rozpoczęliśmy eksperyment ze śledzeniem użytkowania bez śledzenia użytkowników. Opieramy się na pracach Tor Project i Guardian Project. Udostępniliśmy dostęp do logowania na stronach https://search.f-droid.org i https://mirror.f-droid.org/ w celu przeprowadzenia pierwszej próby. (Uwaga: szukanie na f-droid.org mogłoby działać w pełni po stronie klienta przy użyciu JavaScript; w takim przypadku te wyszukiwania nigdy nie trafią w search.f-droid.org i dlatego nie będą rejestrowane).

Jedynym zastrzeżeniem jest to, że Nginx nie pozwala na stosowanie niestandardowych formatów czasowych, tak jak Apache, więc logi internetowe będą zawierać dokładną datę i godzinę każdego trafienia. Strefa czasowa jest wyzerowana. Surowe logi nie będą publikowane i zostaną oczyszczone przed wprowadzeniem do jakiegokolwiek systemu analitycznego, takiego jak Matomo/Piwik. Ponadto, Nginx nie zezwala na stosowanie niestandardowych formatów logów błędów, więc błędy będą miały pełne informacje. Logi błędów nie będą zatem wykorzystywane w analityce bez pełnej higieny i będą przechowywane tylko przez krótki okres czasu.

Nasza konfiguracja

Nasze serwery uruchamiają Debiana, więc daje to polecenia dla tego kontekstu. Po pierwsze, upewnij się, że Nginx jest skonfigurowany z rozszerzeniem “geoip”. Dzięki temu Nginx może zamieniać adresy IP na kody krajów, dzięki czemu kody krajów są rejestrowane zamiast adresów IP.

# apt-get install libnginx-mod-http-geoip geoip-database

Następnie włącz niestandardową konfigurację rejestrowania /etc/nginx/nginx.conf:

geoip_country /usr/share/GeoIP/GeoIP.dat;
log_format privacy '0.0.0.0 - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "-" $geoip_country_code';

access_log /var/log/nginx/access.log privacy;

Dzięki temu dane z dziennika dostępu wyglądają następująco:

# tail /var/log/nginx/access.log
0.0.0.0 - - [12/Apr/2019:07:01:37 +0000] "GET /android-free/repository/ HTTP/1.1" 200 949 "-" "-" PL
0.0.0.0 - - [12/Apr/2019:07:02:27 +0000] "GET /robots.txt HTTP/1.1" 200 24 "-" "-" US
0.0.0.0 - - [12/Apr/2019:07:02:27 +0000] "GET /android-free/repository/ HTTP/1.1" 200 949 "-" "-" US
0.0.0.0 - - [12/Apr/2019:07:04:08 +0000] "GET / HTTP/1.1" 200 278 "-" "-" BR
0.0.0.0 - - [12/Apr/2019:07:06:41 +0000] "GET /android-free/repository/ HTTP/1.1" 200 949 "-" "-" US
0.0.0.0 - - [12/Apr/2019:07:11:45 +0000] "GET /android-free/repository/ HTTP/1.1" 200 949 "-" "-" FR
0.0.0.0 - - [12/Apr/2019:07:16:32 +0000] "GET / HTTP/1.1" 200 278 "-" "-" CA
0.0.0.0 - - [12/Apr/2019:07:16:49 +0000] "GET /android-free/repository/ HTTP/1.1" 200 949 "-" "-" GB
0.0.0.0 - - [12/Apr/2019:07:19:42 +0000] "GET / HTTP/1.1" 200 278 "-" "-" VN
0.0.0.0 - - [12/Apr/2019:07:20:20 +0000] "GET /robots.txt HTTP/1.1" 200 24 "-" "-" US
0.0.0.0 - - [12/Apr/2019:07:21:51 +0000] "GET /android-free/repository/ HTTP/1.1" 200 949 "-" "-" US
0.0.0.0 - - [12/Apr/2019:07:26:57 +0000] "GET /android-free/repository/ HTTP/1.1" 200 949 "-" "-" DE
0.0.0.0 - - [12/Apr/2019:07:32:01 +0000] "GET /android-free/repository/ HTTP/1.1" 200 949 "-" "-" SE
0.0.0.0 - - [12/Apr/2019:07:32:23 +0000] "GET /android-free/repository/sys-img/android/sys-img-9.0.0_r33-sdk.xml HTTP/1.1" 200 904 "-" "-" US
0.0.0.0 - - [12/Apr/2019:07:37:04 +0000] "GET /android-free/repository/ HTTP/1.1" 200 949 "-" "-" DE
0.0.0.0 - - [12/Apr/2019:07:38:55 +0000] "\x03\x00\x00/*\xE0\x00\x00\x00\x00\x00Cookie: mstshash=Administr" 400 173 "-" "-" RU
0.0.0.0 - - [12/Apr/2019:07:39:12 +0000] "GET / HTTP/1.1" 200 278 "-" "-" EC