Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
ea70d26a38 | |||
1680026bc4 | |||
d5a8172759 | |||
039698264a | |||
7cf1b95461 | |||
799f17eac8 | |||
5c96a7f4cb | |||
32107f0ebc |
107
README.md
107
README.md
@ -1,53 +1,5 @@
|
|||||||
<h1 style="display: flex; align-items: center;"><img src="./assets/icon-addon-2048.png" alt="Rentgen logo" style="margin-right: 1rem;" width="48"/> Rentgen</h1>
|
<h1 style="display: flex; align-items: center;"><img src="./assets/icon-addon-2048.png" alt="Rentgen logo" style="margin-right: 1rem;" width="48"/> Rentgen</h1>
|
||||||
|
|
||||||
<strong>Rentgen</strong> to wtyczka dla przeglądarek opartych o Firefoxa, która automatycznie wizualizuje, jakie dane zostały ~~wykradzione~~ wysłane do podmiotów trzecich przez odwiedzane strony. Wtyczka obrazuje ilość skryptów śledzących na stronie internetowej i pomaga w sformułowaniu maila do administratora strony, który może być podstawą do skargi RODO w Urzędzie Ochrony Danych Osobowych.
|
|
||||||
|
|
||||||
|
|
||||||
**Funkcje Rentgena:**
|
|
||||||
|
|
||||||
- analiza ruchu sieciowego generowanego przez stronę internetową;
|
|
||||||
- wizualizacja danych przekazanych do podmiotów trzecich przez odwiedzaną stronę (historia przeglądania użytkownika oraz jego ciasteczka);
|
|
||||||
- przygotowywanie zrzutów ekranów narzędzi deweloperskich będących dowodem przekazanych danych do podmiotów trzecich;
|
|
||||||
- pomoc w oszacowaniu potencjalnych obszarów roboczych względem zgodności z RODO;
|
|
||||||
- generowanie raportu lub treści maila, którą można wysłać do administratora oraz Urzędu Ochrony Danych Osobowych.
|
|
||||||
|
|
||||||
## Jak zbudować i uruchomić Rentgena ze źródeł
|
|
||||||
|
|
||||||
### Wymagania wstępne
|
|
||||||
|
|
||||||
- System operacyjny: Linux x86_64
|
|
||||||
- Node.js: 16.x
|
|
||||||
- npm: 7.x lub wyższy
|
|
||||||
|
|
||||||
### Proces budowy
|
|
||||||
|
|
||||||
1. Pobierz repozytorium przez `git pull https://git.internet-czas-dzialac.pl/icd/rentgen.git` lub pobierz archwium zip
|
|
||||||
2. Przejdź do głównego katalogu pobranego repozytorium
|
|
||||||
3. Uruchom komendę: `npm install`
|
|
||||||
4. Uruchom komendę: `npm run build`
|
|
||||||
5. Uruchom komendę: `npm run create-package`
|
|
||||||
6. Przejdź do katalogu `web-ext-artifacts`
|
|
||||||
7. Znajdziesz tam archiwum zip: `rentgen-x-x-x.zip` (`x-x-x` oznaczają wersję wtyczki)
|
|
||||||
|
|
||||||
### Kroki do uruchomienia
|
|
||||||
|
|
||||||
1. Uruchom Firefoxa i przejdź do strony `about:debugging`
|
|
||||||
2. Kliknij zakładkę _This Firefox_
|
|
||||||
3. Kliknij przycisk _Load Temporary Add-on..._
|
|
||||||
4. Wybierz archiwum, które zbudowałeś w ostatnim kroku procesu budowy
|
|
||||||
|
|
||||||
## Zgłaszanie błędów
|
|
||||||
|
|
||||||
Link do issue trackera na naszej instancji Discourse: https://forum.internet-czas-dzialac.pl/c/rentgen-issue-tracker
|
|
||||||
|
|
||||||
Nie przyjmujemy zgłoszeń na platformie Microsoft Github.
|
|
||||||
|
|
||||||
Każdy problem zostanie sprawdzony i przeniesiony na wewnętrzną listę problemów na naszej instancji Gitea: https://git.internet-czas-dzialac.pl/icd/rentgen/issues. Korzystamy z Gitea i najprawdopodobniej w przyszłości dzięki federalizacji Gitea będziemy w stanie wpuścić użytkowników do zgłaszania błędów bezpośrednio ze strony Gitea.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## English description 🇬🇧
|
|
||||||
|
|
||||||
<strong>Rentgen</strong> is an add-on prepared for Firefox-based browsers. This extension will automatically visualize all the data that a given website ~~steals~~ sends to third parties.
|
<strong>Rentgen</strong> is an add-on prepared for Firefox-based browsers. This extension will automatically visualize all the data that a given website ~~steals~~ sends to third parties.
|
||||||
|
|
||||||
Note: At the moment, we support Polish language because this extension generates mail content that is dedicated to Polish website owners. In further versions of this add-on, we will add other languages as well.
|
Note: At the moment, we support Polish language because this extension generates mail content that is dedicated to Polish website owners. In further versions of this add-on, we will add other languages as well.
|
||||||
@ -60,6 +12,10 @@ Note: At the moment, we support Polish language because this extension generates
|
|||||||
- assisting in the evaluation of potential work areas for compliance with GDPR;
|
- assisting in the evaluation of potential work areas for compliance with GDPR;
|
||||||
- generating a report or email content that can be sent to an administrator and Personal Data Protection Office in Poland.
|
- generating a report or email content that can be sent to an administrator and Personal Data Protection Office in Poland.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Firefox: https://addons.mozilla.org/en-US/firefox/addon/rentgen/
|
||||||
|
|
||||||
## How to build and run Rentgen on your own
|
## How to build and run Rentgen on your own
|
||||||
|
|
||||||
### Pre-requirements
|
### Pre-requirements
|
||||||
@ -87,7 +43,9 @@ Note: At the moment, we support Polish language because this extension generates
|
|||||||
|
|
||||||
## Issue tracker
|
## Issue tracker
|
||||||
|
|
||||||
Link to issue tracker on our Discourse instance: https://forum.internet-czas-dzialac.pl/c/rentgen-issue-tracker
|
If you find a problem, please send us an email: kontakt@internet-czas-dzialac.pl
|
||||||
|
|
||||||
|
We don't receive issues on Microsoft Github.
|
||||||
|
|
||||||
Each issue will be reviewed and moved to an internal issues list of our Gitea instance: https://git.internet-czas-dzialac.pl/icd/rentgen/issues. We use Gitea and most likely in the future with the federalization of Gitea, we will be able to let users in to report issues directly from the Gitea site.
|
Each issue will be reviewed and moved to an internal issues list of our Gitea instance: https://git.internet-czas-dzialac.pl/icd/rentgen/issues. We use Gitea and most likely in the future with the federalization of Gitea, we will be able to let users in to report issues directly from the Gitea site.
|
||||||
|
|
||||||
@ -103,3 +61,54 @@ Each issue will be reviewed and moved to an internal issues list of our Gitea in
|
|||||||
<img src="./assets/screenshots/5b.png" />
|
<img src="./assets/screenshots/5b.png" />
|
||||||
<img src="./assets/screenshots/2022-07-14_21-04.png" />
|
<img src="./assets/screenshots/2022-07-14_21-04.png" />
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<strong>Rentgen</strong> to wtyczka dla przeglądarek opartych o Firefoxa, która automatycznie wizualizuje, jakie dane zostały ~~wykradzione~~ wysłane do podmiotów trzecich przez odwiedzane strony. Wtyczka obrazuje ilość skryptów śledzących na stronie internetowej i pomaga w sformułowaniu maila do administratora strony, który może być podstawą do skargi RODO w Urzędzie Ochrony Danych Osobowych.
|
||||||
|
|
||||||
|
**Funkcje Rentgena:**
|
||||||
|
|
||||||
|
- analiza ruchu sieciowego generowanego przez stronę internetową;
|
||||||
|
- wizualizacja danych przekazanych do podmiotów trzecich przez odwiedzaną stronę (historia przeglądania użytkownika oraz jego ciasteczka);
|
||||||
|
- przygotowywanie zrzutów ekranów narzędzi deweloperskich będących dowodem przekazanych danych do podmiotów trzecich;
|
||||||
|
- pomoc w oszacowaniu potencjalnych obszarów roboczych względem zgodności z RODO;
|
||||||
|
- generowanie raportu lub treści maila, którą można wysłać do administratora oraz Urzędu Ochrony Danych Osobowych.
|
||||||
|
|
||||||
|
## Instalacja
|
||||||
|
|
||||||
|
Firefox: https://addons.mozilla.org/pl/firefox/addon/rentgen/
|
||||||
|
|
||||||
|
## Jak zbudować i uruchomić Rentgena ze źródeł
|
||||||
|
|
||||||
|
### Wymagania wstępne
|
||||||
|
|
||||||
|
- System operacyjny: Linux x86_64
|
||||||
|
- Node.js: 16.x
|
||||||
|
- npm: 7.x lub wyższy
|
||||||
|
|
||||||
|
### Proces budowy
|
||||||
|
|
||||||
|
1. Pobierz repozytorium przez `git pull https://git.internet-czas-dzialac.pl/icd/rentgen.git` lub pobierz archwium zip
|
||||||
|
2. Przejdź do głównego katalogu pobranego repozytorium
|
||||||
|
3. Uruchom komendę: `npm install`
|
||||||
|
4. Uruchom komendę: `npm run build`
|
||||||
|
5. Uruchom komendę: `npm run create-package`
|
||||||
|
6. Przejdź do katalogu `web-ext-artifacts`
|
||||||
|
7. Znajdziesz tam archiwum zip: `rentgen-x-x-x.zip` (`x-x-x` oznaczają wersję wtyczki)
|
||||||
|
|
||||||
|
### Kroki do uruchomienia
|
||||||
|
|
||||||
|
1. Uruchom Firefoxa i przejdź do strony `about:debugging`
|
||||||
|
2. Kliknij zakładkę _This Firefox_
|
||||||
|
3. Kliknij przycisk _Load Temporary Add-on..._
|
||||||
|
4. Wybierz archiwum, które zbudowałeś w ostatnim kroku procesu budowy
|
||||||
|
|
||||||
|
## Zgłaszanie błędów
|
||||||
|
|
||||||
|
Jeżeli znajdziesz jakieś problem, napisz do nas maila: kontakt@internet-czas-dzialac.pl
|
||||||
|
|
||||||
|
Nie przyjmujemy zgłoszeń na platformie Microsoft Github.
|
||||||
|
|
||||||
|
Każdy problem zostanie sprawdzony i przeniesiony na wewnętrzną listę problemów na naszej instancji Gitea: https://git.internet-czas-dzialac.pl/icd/rentgen/issues. Korzystamy z Gitea i najprawdopodobniej w przyszłości dzięki federalizacji Gitea będziemy w stanie wpuścić użytkowników do zgłaszania błędów bezpośrednio ze strony Gitea.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
@ -9,7 +9,49 @@ export const Explainers: Record<ExplainerKey, (zaimek_index: 0 | 1 | 2 | 3) => J
|
|||||||
<p>
|
<p>
|
||||||
Sztucznie wygenerowane identyfikatory przechowywane w plikach Cookies stanowią dane
|
Sztucznie wygenerowane identyfikatory przechowywane w plikach Cookies stanowią dane
|
||||||
osobowe. Wskazuje na to wprost Art. 4. pkt 1. RODO, wymieniając „identyfikator
|
osobowe. Wskazuje na to wprost Art. 4. pkt 1. RODO, wymieniając „identyfikator
|
||||||
internetowy” i „numer identyfikacyjny” jako przykłady danych osobowych.
|
internetowy” i „numer identyfikacyjny” jako przykłady danych osobowych. Losowe
|
||||||
|
przypisane identyfikatory mogą nie zawierać imienia i nazwiska osoby, której
|
||||||
|
dotyczą, ani nie prowadzić wprost do ich ustalenia, ale pozwalają odróżnić jedną,
|
||||||
|
daną konkretną osobę, od innych.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Por. komentarz z D. Lubasz [w:] Ochrona Danych Osobowych [red.] D. Lubasz, Warszawa
|
||||||
|
2020 r., str. 81:
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<em>
|
||||||
|
Zidentyfikowaną osobą fizyczną jest osoba, której tożsamość jest ustalona -
|
||||||
|
bezpośrednio i natychmiast, czyli taka, którą bezpośrednio można wskazać,
|
||||||
|
wyodrębnić lub wyróżnić z określonej zbiorowości.{' '}
|
||||||
|
<strong>Nie musi to natomiast polegać na podaniu jej imienia nazwiska</strong>.
|
||||||
|
Konstatacja ta jest zwłaszcza istotna w środowisku cyfrowym, w którym
|
||||||
|
identyfikacja sprowadza się do oznaczenia danego użytkownika w celu wywierania
|
||||||
|
na niego określonego wpływu. (...) Możliwą do zidentyfikowania jest osoba,
|
||||||
|
której tożsamość dopiero administrator może ustalić -{' '}
|
||||||
|
<strong>niezależnie od tego, czy to zrobi, czy nie</strong>.
|
||||||
|
</em>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Podobnie za{' '}
|
||||||
|
<em>
|
||||||
|
P. Litwiński [w:] Rozporządzenie UE w sprawie ochrony osób fizycznych w związku
|
||||||
|
z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich
|
||||||
|
danych, Komentarz [red.] P. Litwiński, Warszawa 2018 r.
|
||||||
|
</em>
|
||||||
|
:
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<em>
|
||||||
|
Jak zwrócono uwagę w nauce prawa, identyfikacja osoby powinna być rozumiana jako
|
||||||
|
możliwość „fizycznego” wskazania tejże osoby, nie zaś jako ustalenie
|
||||||
|
podstawowych danych tej osoby (...). Analogicznie,{' '}
|
||||||
|
<em>identyfikacja osoby nie wymaga znajomości jej imienia lub nazwiska</em>,
|
||||||
|
wymaga natomiast znajomości pewnych unikalnych cech tej osoby, które odróżniają
|
||||||
|
ją od innych osób (...). W ten sam sposób należy więc rozumieć zwrot „można
|
||||||
|
zidentyfikować” - nie tylko jako możliwość odniesienia konkretnej informacji do
|
||||||
|
konkretnej osoby, lecz także jako możliwość wskazania tej osoby, rozumianego
|
||||||
|
jako faktyczne wyodrębnienie jej spośród innych osób.
|
||||||
|
</em>
|
||||||
</p>
|
</p>
|
||||||
</>
|
</>
|
||||||
),
|
),
|
||||||
|
@ -5,7 +5,8 @@ import { Problem } from './problem';
|
|||||||
|
|
||||||
export class TransferOutsideEU extends Problem {
|
export class TransferOutsideEU extends Problem {
|
||||||
getNecessaryExplainers(): ExplainerKey[] {
|
getNecessaryExplainers(): ExplainerKey[] {
|
||||||
return [];
|
const has_cookies = this.getRelatedClusters().some((cluster) => cluster.hasCookies());
|
||||||
|
return has_cookies ? ['cookies_are_pii'] : [];
|
||||||
}
|
}
|
||||||
|
|
||||||
qualifies(): boolean {
|
qualifies(): boolean {
|
||||||
|
@ -21,7 +21,11 @@ const testCluster: (cluster: RequestCluster, answers: ParsedHostAnswers | undefi
|
|||||||
|
|
||||||
export class UnknownLegalBasis extends Problem {
|
export class UnknownLegalBasis extends Problem {
|
||||||
getNecessaryExplainers(): ExplainerKey[] {
|
getNecessaryExplainers(): ExplainerKey[] {
|
||||||
return ['responsibility_for_third_parties'];
|
const has_cookies = this.getRelatedClusters().some((cluster) => cluster.hasCookies());
|
||||||
|
return [
|
||||||
|
'responsibility_for_third_parties',
|
||||||
|
...(has_cookies ? ['cookies_are_pii' as ExplainerKey] : []),
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
qualifies(): boolean {
|
qualifies(): boolean {
|
||||||
@ -70,7 +74,7 @@ export class UnknownLegalBasis extends Problem {
|
|||||||
Na stronie nie znajdują się informacje o tym, jaka jest podstawa prawna
|
Na stronie nie znajdują się informacje o tym, jaka jest podstawa prawna
|
||||||
takiego przetwarzania danych osobowych, jakimi jest część historii
|
takiego przetwarzania danych osobowych, jakimi jest część historii
|
||||||
przeglądania. Zgodnie z treścią Artykułu 13. p. 1 lit. c) RODO, aby
|
przeglądania. Zgodnie z treścią Artykułu 13. p. 1 lit. c) RODO, aby
|
||||||
przetwarzać dane osobowe, trzeba poinformować osobę, któ©ej dane dotyczą, o
|
przetwarzać dane osobowe, trzeba poinformować osobę, której dane dotyczą, o
|
||||||
tym, jaka jest podstawa prawna takiego przetwarzania danych.
|
tym, jaka jest podstawa prawna takiego przetwarzania danych.
|
||||||
</p>
|
</p>
|
||||||
)}
|
)}
|
||||||
|
@ -6,8 +6,13 @@ import { Problem } from './problem';
|
|||||||
|
|
||||||
export class UnknownPurposes extends Problem {
|
export class UnknownPurposes extends Problem {
|
||||||
getNecessaryExplainers(): ExplainerKey[] {
|
getNecessaryExplainers(): ExplainerKey[] {
|
||||||
|
const has_cookies = this.getAffectedClusters().some((cluster) => cluster.hasCookies());
|
||||||
|
if (has_cookies) {
|
||||||
|
return ['cookies_are_pii'];
|
||||||
|
} else {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
isHostAffected(host: string) {
|
isHostAffected(host: string) {
|
||||||
const answers = this.answers.hosts[host];
|
const answers = this.answers.hosts[host];
|
||||||
|
@ -14,6 +14,15 @@ async function getCurrentTab() {
|
|||||||
import './../../styles/global.scss';
|
import './../../styles/global.scss';
|
||||||
import './toolbar.scss';
|
import './toolbar.scss';
|
||||||
|
|
||||||
|
function isDomainHighlySuspicious(domain: string): boolean {
|
||||||
|
return (
|
||||||
|
domain.includes('facebook') ||
|
||||||
|
domain.includes('twitter') ||
|
||||||
|
domain.includes('linkedin') ||
|
||||||
|
false
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
const Toolbar = () => {
|
const Toolbar = () => {
|
||||||
const [origin, setOrigin] = React.useState<string | null>(null);
|
const [origin, setOrigin] = React.useState<string | null>(null);
|
||||||
const [eventCounts] = useEmitter(getMemory());
|
const [eventCounts] = useEmitter(getMemory());
|
||||||
@ -53,6 +62,13 @@ const Toolbar = () => {
|
|||||||
if (!origin) return;
|
if (!origin) return;
|
||||||
const exposedOriginDomains = Object.values(getMemory().getClustersForOrigin(origin))
|
const exposedOriginDomains = Object.values(getMemory().getClustersForOrigin(origin))
|
||||||
.filter((cluster) => cluster.exposesOrigin())
|
.filter((cluster) => cluster.exposesOrigin())
|
||||||
|
.sort((cluster1, cluster2) =>
|
||||||
|
isDomainHighlySuspicious(cluster1.id)
|
||||||
|
? -1
|
||||||
|
: isDomainHighlySuspicious(cluster2.id)
|
||||||
|
? 1
|
||||||
|
: 0
|
||||||
|
)
|
||||||
.map((cluster) => cluster.id);
|
.map((cluster) => cluster.id);
|
||||||
setExposedOriginDomainCopy('');
|
setExposedOriginDomainCopy('');
|
||||||
|
|
||||||
@ -86,6 +102,13 @@ const Toolbar = () => {
|
|||||||
if (!origin) return;
|
if (!origin) return;
|
||||||
const cookieDomains = Object.values(getMemory().getClustersForOrigin(origin))
|
const cookieDomains = Object.values(getMemory().getClustersForOrigin(origin))
|
||||||
.filter((cluster) => cluster.hasCookies())
|
.filter((cluster) => cluster.hasCookies())
|
||||||
|
.sort((cluster1, cluster2) =>
|
||||||
|
isDomainHighlySuspicious(cluster1.id)
|
||||||
|
? -1
|
||||||
|
: isDomainHighlySuspicious(cluster2.id)
|
||||||
|
? 1
|
||||||
|
: 0
|
||||||
|
)
|
||||||
.map((cluster) => cluster.id);
|
.map((cluster) => cluster.id);
|
||||||
setCookieDomainCopy('');
|
setCookieDomainCopy('');
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"name": "Rentgen",
|
"name": "Rentgen",
|
||||||
"short_name": "Rentgen",
|
"short_name": "Rentgen",
|
||||||
"version": "0.1.9",
|
"version": "0.1.10",
|
||||||
"author": "Kuba Orlik, Arkadiusz Wieczorek (Internet. Czas działać!)",
|
"author": "Kuba Orlik, Arkadiusz Wieczorek (Internet. Czas działać!)",
|
||||||
"homepage_url": "https://git.internet-czas-dzialac.pl/icd/rentgen",
|
"homepage_url": "https://git.internet-czas-dzialac.pl/icd/rentgen",
|
||||||
"background": {
|
"background": {
|
||||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "rentgen",
|
"name": "rentgen",
|
||||||
"version": "0.1.9",
|
"version": "0.1.10",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "rentgen",
|
"name": "rentgen",
|
||||||
"version": "0.1.9",
|
"version": "0.1.10",
|
||||||
"license": "GPL-3.0-or-later",
|
"license": "GPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@iabtcf/core": "^1.3.1",
|
"@iabtcf/core": "^1.3.1",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "rentgen",
|
"name": "rentgen",
|
||||||
"version": "0.1.9",
|
"version": "0.1.10",
|
||||||
"description": "Rentgen is an add-on prepared for Firefox-based browsers. This extension will automatically visualize all the data that a given website sends to third parties.",
|
"description": "Rentgen is an add-on prepared for Firefox-based browsers. This extension will automatically visualize all the data that a given website sends to third parties.",
|
||||||
"main": "esbuild.config.js",
|
"main": "esbuild.config.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
Loading…
Reference in New Issue
Block a user