Closes #19 - dodanie alternatywnych templatek (raport vs email)
This commit is contained in:
parent
69115b9e64
commit
2b763cd7e8
@ -1,14 +1,12 @@
|
||||
import { RequestCluster } from '../../request-cluster';
|
||||
import { getDate } from '../../util';
|
||||
import deduceProblems from './deduce-problems';
|
||||
import { Explainers } from './explainers';
|
||||
import { ParsedAnswers } from './parse-answers';
|
||||
import { v } from './verbs';
|
||||
import './email-content.scss';
|
||||
import { Fragment, useState } from 'react';
|
||||
|
||||
declare var PLUGIN_NAME: string;
|
||||
declare var PLUGIN_URL: string;
|
||||
import emailIntro from './email-intro';
|
||||
import { reportIntro } from './report-intro';
|
||||
|
||||
export default function EmailContent({
|
||||
answers,
|
||||
@ -41,41 +39,53 @@ export default function EmailContent({
|
||||
setCopy(true);
|
||||
}
|
||||
|
||||
const mode = answers.user_role === 'user' ? 'email' : 'report';
|
||||
const email_tone = answers.email_type === 'polite_information' ? 'polite' : 'official';
|
||||
|
||||
return (
|
||||
<Fragment>
|
||||
<div className="generator-container">
|
||||
<h1>Treść maila</h1>
|
||||
<h1>Treść {mode === 'email' ? 'maila' : 'raportu'}</h1>
|
||||
<div className="mail-container">
|
||||
<div className="mail-container__header">
|
||||
<div className="mail-container__header--control"></div>
|
||||
</div>
|
||||
<article className="mail-container__content">
|
||||
<p>Dzień dobry,</p>
|
||||
<p>
|
||||
w dniu {getDate()} {_('odwiedziłem')} stronę {visited_url}. Po
|
||||
podejrzeniu ruchu sieciowego generowanego przez tę stronę za pomocą
|
||||
wtyczki <a href={PLUGIN_URL}>{PLUGIN_NAME}</a> w przeglądarce Firefox{' '}
|
||||
{_('mam')} pytania dotyczące przetwarzania {_('moich')} danych
|
||||
osobowych, na które nie {_('znalazłem')} odpowiedzi nigdzie na Państwa
|
||||
stronie.
|
||||
</p>
|
||||
{problems.map((problem) => problem.getEmailContent())}
|
||||
{mode === 'email'
|
||||
? emailIntro(email_tone, _, visited_url)
|
||||
: reportIntro(visited_url)}
|
||||
{problems.map((problem) => problem.getEmailContent(mode, email_tone))}
|
||||
{explainers.map((explainer) => explainer(answers.zaimek))}
|
||||
<h2>Państwa rola jako współadministratora danych osobowych</h2>
|
||||
<p>
|
||||
{_('Zwracam')} Państwa uwagę na fakt, że w myśl{' '}
|
||||
<a href="https://curia.europa.eu/juris/document/document.jsf?text=&docid=216555&pageIndex=0&doclang=PL&mode=lst&dir=&occ=first&part=1&cid=1254905">
|
||||
treści wyroku TSUE w sprawie C-40/17
|
||||
</a>{' '}
|
||||
poprzez wysyłanie moich danych w wyżej opisanym zakresie stają się
|
||||
Państwo współadministratorem moich danych osobowych, dlatego ciąży na
|
||||
Państwu obowiązek odpowiedzi na moje pytania na mocy Art. 12 i 13
|
||||
Rozporządzenia 2016/679 Parlamentu Europejskiego i Rady (UE) z dnia 27
|
||||
kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z
|
||||
przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich
|
||||
danych oraz uchylenia dyrektywy 95/46/WE (ogólne rozporządzenie o
|
||||
ochronie danych, dalej: „RODO”).
|
||||
</p>
|
||||
{mode == 'email' ? (
|
||||
<p>
|
||||
{_('Zwracam')} Państwa uwagę na fakt, że w myśl{' '}
|
||||
<a href="https://curia.europa.eu/juris/document/document.jsf?text=&docid=216555&pageIndex=0&doclang=PL&mode=lst&dir=&occ=first&part=1&cid=1254905">
|
||||
treści wyroku TSUE w sprawie C-40/17
|
||||
</a>{' '}
|
||||
poprzez wysyłanie moich danych w wyżej opisanym zakresie stają się
|
||||
Państwo współadministratorem {_('moich')} danych osobowych, nawet
|
||||
jeżeli nie są Państwo bezpośrednimi autorami osadzonych na Państwa
|
||||
stronie skryptów czy innych zasobów ujawniających dane użytkowników
|
||||
Państwa strony podmiotom trzecim. Dlatego ciąży na Państwu obowiązek
|
||||
odpowiedzi na {_('moje')} pytania na mocy Art. 12 i 13
|
||||
Rozporządzenia 2016/679 Parlamentu Europejskiego i Rady (UE) z dnia
|
||||
27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z
|
||||
przetwarzaniem danych osobowych i w sprawie swobodnego przepływu
|
||||
takich danych oraz uchylenia dyrektywy 95/46/WE (ogólne
|
||||
rozporządzenie o ochronie danych) – RODO
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
W myśl{' '}
|
||||
<a href="https://curia.europa.eu/juris/document/document.jsf?text=&docid=216555&pageIndex=0&doclang=PL&mode=lst&dir=&occ=first&part=1&cid=1254905">
|
||||
treści wyroku TSUE w sprawie C-40/17
|
||||
</a>
|
||||
, ponoszą Państwo współodpowiedzialność za skrypty i inne zasoby
|
||||
ujawniajace dane osobowe na Państwa stronie, nawet jeżeli nie są
|
||||
Państwo ich bezpośrednimi autorami.
|
||||
</p>
|
||||
)}
|
||||
</article>
|
||||
</div>
|
||||
<div className="buttons-container">
|
||||
|
32
components/report-window/email-intro.tsx
Normal file
32
components/report-window/email-intro.tsx
Normal file
@ -0,0 +1,32 @@
|
||||
import { getDate } from '../../util';
|
||||
|
||||
declare var PLUGIN_NAME: string;
|
||||
declare var PLUGIN_URL: string;
|
||||
|
||||
export default function emailIntro(
|
||||
tone: 'polite' | 'official',
|
||||
_: (verb: string) => string,
|
||||
visited_url: string
|
||||
) {
|
||||
return (
|
||||
<>
|
||||
<p>{tone == 'polite' ? 'Szanowni Państwo' : 'Dzień dobry'},</p>
|
||||
<p>
|
||||
w dniu {getDate()} {_('odwiedziłem')} stronę {visited_url}. Po podejrzeniu ruchu
|
||||
sieciowego generowanego przez tę stronę za pomocą wtyczki{' '}
|
||||
<a href={PLUGIN_URL}>{PLUGIN_NAME}</a> w przeglądarce Firefox{' '}
|
||||
{tone == 'polite' ? (
|
||||
<>
|
||||
{_('chciałbym')} zwrócić Państwa uwagę na kilka potencjalnych problemów ze
|
||||
zgodnością RODO na Państwa stronie.
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
{_('mam')} pytania dotyczące przetwarzania {_('moich')} danych osobowych, na
|
||||
które nie {_('znalazłem')} odpowiedzi nigdzie na Państwa stronie.
|
||||
</>
|
||||
)}
|
||||
</p>
|
||||
</>
|
||||
);
|
||||
}
|
@ -24,7 +24,7 @@ function generateHostPage(
|
||||
type: 'radiogroup',
|
||||
name: f('present'),
|
||||
isRequired: true,
|
||||
title: `Cel ujawnienia danych (${danych}) właścicielowi domeny ${domain}`,
|
||||
title: `Strona udostępniła właścicielowi domeny ${domain} ${danych}. Cel takiego przetwarzania danych:`,
|
||||
...defaultValue('present'),
|
||||
visibleIf: '{popup_type} != "none"',
|
||||
choices: [
|
||||
@ -169,28 +169,53 @@ export default function generateSurveyQuestions(clusters: RequestCluster[]) {
|
||||
clearInvisibleValues: 'onHidden',
|
||||
pages: [
|
||||
{
|
||||
title: 'Tytuł - co to za ankieta?',
|
||||
title: 'Dodatkowe pytania',
|
||||
elements: [
|
||||
{
|
||||
type: 'html',
|
||||
name: 'intro',
|
||||
html: /* HTML */ `<p>
|
||||
Analiza ruchu strony zakończona. Aby lepiej oszacować, gdzie są
|
||||
potencjalne obszary robocze pod względem zgodności z RODO, możesz
|
||||
udzielić odpowiedzi na pytania dotyczące funkcjonowania strony. Wtyczka
|
||||
wtedy wygeneruje raport lub treść maila, którą możesz wysłać do
|
||||
administratora strony.
|
||||
Analiza ruchu sieciowego generowanego przez stronę została zakończona.
|
||||
Teraz, aby lepiej oszacować, gdzie są potencjalne obszary robocze pod
|
||||
względem zgodności z RODO, możesz udzielić odpowiedzi na pytania
|
||||
dotyczące funkcjonowania strony. Wtyczka wtedy wygeneruje raport lub
|
||||
treść maila, którą możesz wysłać do administratora strony.
|
||||
</p>`,
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: 'Zaimki',
|
||||
title: 'Kontekst analizy',
|
||||
elements: [
|
||||
{
|
||||
type: 'radiogroup',
|
||||
name: 'user_role',
|
||||
title: 'Jestem:',
|
||||
choices: [
|
||||
{ value: 'user', text: 'użytkownikiem strony' },
|
||||
{ value: 'admin', text: 'administratorem strony' },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'radiogroup',
|
||||
name: 'email_type',
|
||||
title: 'Chcę:',
|
||||
visibleIf: "{user_role} = 'user'",
|
||||
choices: [
|
||||
{
|
||||
value: 'polite_information',
|
||||
text: 'uprzejmie poinformować administratora strony o potencjalnych problemach ze zgodnością z RODO na jego stronie',
|
||||
},
|
||||
{
|
||||
value: 'official_request',
|
||||
text: 'wysłać formalne zapytanie do administratora strony, na które ma obowiązek odpowiedzieć. Jeżeli administrator nie odpowie na takie zapytanie, może to być podstawą złożenia skargi do UODO',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'radiogroup',
|
||||
name: 'zaimek',
|
||||
title: 'Forma czasownika:',
|
||||
title: 'Forma czasownika, jaka będzie użyta w raporcie:',
|
||||
isRequired: true,
|
||||
choices: [
|
||||
{ value: 0, text: 'Wysłałem' },
|
||||
@ -312,7 +337,7 @@ export default function generateSurveyQuestions(clusters: RequestCluster[]) {
|
||||
},
|
||||
{
|
||||
value: 'yes',
|
||||
text: 'Nie. {Muszę} wykonać więcej czynności aby odmówić wszystkich zgód, albo opcja niewyrażenia zgody jest mało widoczna.',
|
||||
text: 'Nie. {Muszę} wykonać więcej czynności (np. kliknięć) aby odmówić wszystkich zgód, albo opcja niewyrażenia zgody jest mało widoczna.',
|
||||
},
|
||||
],
|
||||
},
|
||||
|
@ -42,6 +42,8 @@ function parseHostAnswers(
|
||||
|
||||
export function parseAnswers({
|
||||
zaimek,
|
||||
user_role,
|
||||
email_type,
|
||||
is_incognito_different,
|
||||
policy_readable,
|
||||
popup_type,
|
||||
@ -55,6 +57,8 @@ export function parseAnswers({
|
||||
}: RawAnswers): ParsedAnswers {
|
||||
return {
|
||||
zaimek,
|
||||
user_role,
|
||||
email_type,
|
||||
is_incognito_different,
|
||||
policy_readable,
|
||||
popup_type,
|
||||
|
@ -6,27 +6,46 @@ export default class NoInformationAtAllProblem extends Problem {
|
||||
qualifies() {
|
||||
return this.answers.popup_type === 'none';
|
||||
}
|
||||
getEmailContent() {
|
||||
getEmailContent(mode: 'email' | 'report', tone: 'official' | 'polite') {
|
||||
const _ = (word: string) => v(word, this.answers.zaimek);
|
||||
return (
|
||||
<>
|
||||
<h2>Brak informacji na temat przetwarzania danych osobowych</h2>
|
||||
<p>
|
||||
{_('Moje')} dane osobowe zostały ujawnione podmiotom, które są właścicielami
|
||||
domen:
|
||||
</p>
|
||||
{mode == 'email' ? (
|
||||
tone == 'official' ? (
|
||||
<p>
|
||||
{_('Moje')} dane osobowe zostały ujawnione podmiotom, które są
|
||||
właścicielami domen:
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Państwa strona ujawnia dane użytkowników podmiotom, które są
|
||||
właścicielami następujących domen:
|
||||
</p>
|
||||
)
|
||||
) : (
|
||||
<p>
|
||||
Poprzez skrypty osadzone na stronie dane osobowe użytkownika końcowego są
|
||||
przekazywane podmiotom, którzy są właścicielami następujacych domen:
|
||||
</p>
|
||||
)}
|
||||
{this.getRangeDescription()}
|
||||
<p>
|
||||
Na stronie brakuje jednak jakichkolwiek informacji o tym, jakie są cele
|
||||
przetwarzania takich danych oraz jakie są podstawy prawne takiego przetwarzania.
|
||||
</p>
|
||||
<p>Zwracam się zatem do Państwa z następującymi pytaniami:</p>
|
||||
{mode == 'email' ? (
|
||||
<p>Zwracam się zatem do Państwa z następującymi pytaniami:</p>
|
||||
) : (
|
||||
<p>Na stronie należy zawrzeć odpowiedzi na następujące pytania:</p>
|
||||
)}
|
||||
<ul>
|
||||
<li>Jaka jest tożsamość właścicieli tych domen?</li>
|
||||
<li>Jaki jest cel takiego przetwarzania danych przez Państwa stronę?</li>
|
||||
<li>
|
||||
Jaka jest podstawa prawna takiego przetwarzania moich danych osobowych przez
|
||||
Państwa stronę?
|
||||
Jaka jest podstawa prawna takiego przetwarzania{' '}
|
||||
{mode == 'email' ? _('moich') : ''} danych osobowych $
|
||||
{mode == 'report' ? 'użytkowników końcowych' : ''} przez Państwa stronę?
|
||||
</li>
|
||||
</ul>
|
||||
</>
|
||||
|
@ -17,7 +17,7 @@ function formatRange(cluster: RequestCluster) {
|
||||
export abstract class Problem {
|
||||
constructor(public answers: ParsedAnswers, public clusters: Record<string, RequestCluster>) {}
|
||||
|
||||
abstract getEmailContent(): JSX.Element;
|
||||
abstract getEmailContent(mode: 'email' | 'report', tone: 'polite' | 'official'): JSX.Element;
|
||||
abstract getNecessaryExplainers(): ExplainerKey[];
|
||||
abstract qualifies(): boolean;
|
||||
|
||||
|
@ -20,43 +20,69 @@ export class TransferOutsideEU extends Problem {
|
||||
.map(([id]) => this.clusters[id]);
|
||||
}
|
||||
|
||||
getEmailContent() {
|
||||
getEmailContent(mode: 'email' | 'report') {
|
||||
const clusters = this.getRelatedClusters();
|
||||
const _ = (key: string) => v(key, this.answers.zaimek);
|
||||
return (
|
||||
<>
|
||||
<h2>Transfer danych osobowych poza Europejski Obszar Gospodarczy</h2>
|
||||
<p>
|
||||
Państwa strona przetworzyła {_('moje')} dane osobowe poprzez przesłanie danych
|
||||
do:
|
||||
</p>
|
||||
{mode == 'email' ? (
|
||||
<p>
|
||||
Państwa strona przetworzyła {_('moje')} dane osobowe poprzez przesłanie
|
||||
danych do:
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Strona przetwarza dane osobowe użytkowników końcowych poprzez przesłanie
|
||||
przekazanie ich do:
|
||||
</p>
|
||||
)}
|
||||
<ul>
|
||||
{clusters.map((cluster) => (
|
||||
<li key={cluster.id}>
|
||||
Właściciela domeny <strong>{cluster.id}</strong>: (w zakresie:{' '}
|
||||
{cluster.getDataTypeDescription('mojej')});
|
||||
właściciela domeny <strong>{cluster.id}</strong>: (w zakresie:{' '}
|
||||
{cluster.getDataTypeDescription(mode == 'email' ? 'mojej' : '')});
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<p>
|
||||
Według {_('mojej')} najlepszej wiedzy, każdy z tych podmiotów utrzymuje swoje
|
||||
serwery poza Europejskim Obszarem Gospodarczym. Zatem Państwa strona przesłała
|
||||
{_('moje')} dane osobowe poza EOG. Jeżeli tak jest, to takie przetwarzanie
|
||||
danych jest niezgodne z prawem, gdyż dane trafiają do krajów, które nie
|
||||
gwarantują ochrony danych w stopniu, jakiego wymaga RODO, a tzw. „Tarcza
|
||||
Prywatności” została unieważniona w 2020r. Zob.{' '}
|
||||
<a href="https://panoptykon.org/noyb-skargi-schrems-ii">
|
||||
artykuł Fundacji Panoptykon w tej sprawie
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
<p>
|
||||
{_('Zwracam')} się zatem do Państwa z pytaniem:{' '}
|
||||
<strong>
|
||||
czy wyżej wymienione podmioty, którym Państwa strona ujawniła moje dane
|
||||
osobowe, przechowują moje dane poza EOG?
|
||||
</strong>
|
||||
</p>
|
||||
{mode == 'email' ? (
|
||||
<p>
|
||||
Według {_('mojej')} najlepszej wiedzy, każdy z tych podmiotów utrzymuje
|
||||
swoje serwery poza Europejskim Obszarem Gospodarczym. Zatem Państwa strona
|
||||
przesłała
|
||||
{_('moje')} dane osobowe poza EOG. Jeżeli tak jest, to takie przetwarzanie
|
||||
danych jest niezgodne z prawem, gdyż dane trafiają do krajów, które nie
|
||||
gwarantują ochrony danych w stopniu, jakiego wymaga RODO, a tzw. „Tarcza
|
||||
Prywatności” została unieważniona w 2020r. Zob.{' '}
|
||||
<a href="https://panoptykon.org/noyb-skargi-schrems-ii">
|
||||
artykuł Fundacji Panoptykon w tej sprawie
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Te podmioty utrzymują swoje centra danych poza Europejskim Obszarem
|
||||
Gospodarczym. Jako, że tzw. „Tarcza Prywatności” zostałą unieważniona w
|
||||
2020r., nie można przesyłać danych osobowych obywateli Unii Europejskiej do
|
||||
krajów, które nie zapewniają ochrony danych o sile odpowiadającej RODO.
|
||||
Przykłądem kraju, do którego nie można przekazywać danych osobowych
|
||||
obywateli UE są Stany Zjednoczone.
|
||||
</p>
|
||||
)}
|
||||
{mode == 'email' ? (
|
||||
<p>
|
||||
{_('Zwracam')} się zatem do Państwa z pytaniem:{' '}
|
||||
<strong>
|
||||
czy wyżej wymienione podmioty, którym Państwa strona ujawniła moje dane
|
||||
osobowe, przechowują moje dane poza EOG?
|
||||
</strong>
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Zaleca się rezygnację z korzystania z usług firm, które przetwarzają dane
|
||||
osobowe użytkowników, a których centra danych znajdują się poza EOG.
|
||||
</p>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -36,37 +36,81 @@ export class UnknownLegalBasis extends Problem {
|
||||
);
|
||||
}
|
||||
|
||||
getEmailContent() {
|
||||
getEmailContent(mode: 'email' | 'report', tone: 'polite' | 'official') {
|
||||
const clusters = this.getRelatedClusters();
|
||||
const _ = (key: string) => v(key, this.answers.zaimek);
|
||||
return (
|
||||
<>
|
||||
<h2>Przetwarzanie danych osobowych bez podania podstawy prawnej</h2>
|
||||
<p>Państwa strona przetworzyła {_('moje')} dane osobowe poprzez ujawnienie:</p>
|
||||
{mode == 'email' ? (
|
||||
<p>Państwa strona przetworzyła {_('moje')} dane osobowe poprzez ujawnienie:</p>
|
||||
) : (
|
||||
<p>Państwa strona przetwarza dane osobowe użytkowników poprzez ujawnienie</p>
|
||||
)}
|
||||
<ul>
|
||||
{clusters.map((cluster) => (
|
||||
<li key={cluster.id}>
|
||||
Właścicielowi domeny <strong>{cluster.id}</strong>:{' '}
|
||||
{cluster.getDataTypeDescription('mojej')}
|
||||
właścicielowi domeny <strong>{cluster.id}</strong>:{' '}
|
||||
{cluster.getDataTypeDescription(mode == 'email' ? 'mojej' : '')}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<p>
|
||||
{_('Moja')} historia przeglądania stanowi {_('moje')} dane osobowe. Zgodnie z
|
||||
treścią Artykułu 13 p. 1 lit. c){' '}
|
||||
<a href="https://eur-lex.europa.eu/legal-content/PL/TXT/HTML/?uri=CELEX:32016R0679&qid=1632163985520&from=PL#d1e1822-1-1">
|
||||
RODO
|
||||
</a>
|
||||
, aby przetwarzać dane osobowe, trzeba poinformować osobę, której dane dotyczą,
|
||||
o tym, jaka jest podstawa prawna takiego przetwarzania danych.
|
||||
</p>
|
||||
<p>
|
||||
Zwracam się zatem z pytaniem:{' '}
|
||||
<strong>
|
||||
jakie były podstawy prawne ujawnienia moich danych każdemu z wyżej
|
||||
wymienionych podmiotów przez Państwa stronę?
|
||||
</strong>
|
||||
</p>
|
||||
{mode == 'email' ? (
|
||||
<p>
|
||||
{_('Moja')} historia przeglądania stanowi {_('moje')} dane osobowe. Zgodnie
|
||||
z treścią Artykułu 13 p. 1 lit. c){' '}
|
||||
<a href="https://eur-lex.europa.eu/legal-content/PL/TXT/HTML/?uri=CELEX:32016R0679&qid=1632163985520&from=PL#d1e1822-1-1">
|
||||
RODO
|
||||
</a>
|
||||
, aby przetwarzać dane osobowe, trzeba poinformować osobę, której dane
|
||||
dotyczą, o tym, jaka jest podstawa prawna takiego przetwarzania danych.
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Na stronie nie znajdują się informacje o tym, jaka jest podstawa prawna
|
||||
takiego przetwarzania danych osobowych, jakimi jest część historii
|
||||
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
|
||||
tym, jak ajest podstaw aprawna takiego przetwarzania danych.
|
||||
</p>
|
||||
)}
|
||||
{mode == 'email' ? (
|
||||
tone == 'official' ? (
|
||||
<p>
|
||||
Zwracam się zatem z pytaniem:{' '}
|
||||
<strong>
|
||||
jakie były podstawy prawne ujawnienia moich danych każdemu z wyżej
|
||||
wymienionych podmiotów przez Państwa stronę?
|
||||
</strong>
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Dodanie do Państwa strony informacji o tym, jakie są podstawy prawne (w
|
||||
znaczeniu Art. 6 pkt. 1 RODO) dla każdego z tych procesów przetwarzania
|
||||
miałoby pozytywny wpływ na przejrzystość informacji dla użytkowników
|
||||
końcowych, jak i na zgodność strony z obowiązującymi przepisami.
|
||||
</p>
|
||||
)
|
||||
) : (
|
||||
<>
|
||||
<p>Możliwe działania:</p>
|
||||
<ul>
|
||||
<li>rezygnacja z niektórych skryptów śledzących;</li>
|
||||
<li>
|
||||
przeniesienie assetów z CDN-a na samohostowanie (przy korzystaniu z
|
||||
HTTP2 to może dać zwiększoną wydajność wzgłędem CDN);
|
||||
</li>
|
||||
<li>
|
||||
konfiguracja nagłówka{' '}
|
||||
<a href="https://developer.mozilla.org/pl/docs/Web/HTTP/Headers/Referrer-Policy">
|
||||
Referrer-Policy
|
||||
</a>{' '}
|
||||
tak, aby nie ujawniać historii przeglądania właścicielom zasobów z
|
||||
domen podmiotów trzecich.
|
||||
</li>
|
||||
</ul>
|
||||
</>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ export class UnlawfulCookieAccess extends Problem {
|
||||
});
|
||||
}
|
||||
|
||||
getEmailContent() {
|
||||
getEmailContent(mode: 'email' | 'report', tone: 'official' | 'polite') {
|
||||
const cookie_clusters = Object.values(this.clusters).filter((c) => c.hasMarkedCookies());
|
||||
const unnecessary_hosts = Object.entries(this.answers.hosts)
|
||||
.filter(([, answers]) => answers.was_processing_necessary === 'no')
|
||||
@ -36,8 +36,12 @@ export class UnlawfulCookieAccess extends Problem {
|
||||
<>
|
||||
<h2>Dostęp do cookies niezgodny z ustawą Prawo Telekomunikacyjne</h2>
|
||||
<p>
|
||||
Państwa strona dokonała odczytu plików Cookie zapisanych na dysku twardym mojego
|
||||
komputera. Dotyczy to plików cookie przypisanych do domen:
|
||||
Państwa strona {mode == 'email' ? 'dokonała' : 'dokonuje'} odczytu plików Cookie
|
||||
zapisanych na dysku twardym{' '}
|
||||
{mode === 'email'
|
||||
? _('mojego') + ' komputera.'
|
||||
: 'komputerach użytkowników końcowych.'}
|
||||
. Dotyczy to plików cookie przypisanych do domen:
|
||||
</p>
|
||||
<ul>
|
||||
{cookie_clusters.map((cluster, index) => {
|
||||
@ -75,7 +79,8 @@ export class UnlawfulCookieAccess extends Problem {
|
||||
Użytkownik wyraził zgodę na takie przetwarzanie danych <em>po</em> tym, jak
|
||||
został poinformowany bezpośrednio o celu uzyskania dostępu do tej
|
||||
informacji. Zgodnie z Art. 174 ustawy Prawo Telekomunikacyjne, taka zgoda
|
||||
musiałaby spełniać warunki zgody ustalone przez RODO;
|
||||
musi spełniać warunki zgody ustalone przez RODO, aby mogła być jako podstawa
|
||||
prawna uzyskania dostępu do cookies i podobnych technologii w przeglądarce;
|
||||
</li>
|
||||
<li>
|
||||
Dostęp do treści plików cookies jest konieczny do dostarczania usługi
|
||||
@ -84,25 +89,47 @@ export class UnlawfulCookieAccess extends Problem {
|
||||
</ol>
|
||||
{(() => {
|
||||
if (this.answers.popup_type == 'none' || this.answers.popup_type == 'page') {
|
||||
return (
|
||||
return mode === 'email' ? (
|
||||
<p>
|
||||
Jako, że strona nie pytała {_('mnie')} nigdy o zgodę, nie jest
|
||||
spełniony warunek 1.
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Strona nie ma zaimplementowanego mechanizmu pozyskiwania zgód, zatem
|
||||
nie spełnia warunku opisanego w punkcie 1.
|
||||
</p>
|
||||
);
|
||||
} else if (this.answers.popup_type === 'passive_popup') {
|
||||
return (
|
||||
<p>
|
||||
Państwa strona nie dała mi nigdy faktycznego wyboru dotyczącego
|
||||
wyrażenia lub odmówienia zgody na takie przetwarzanie danych
|
||||
osobowych, dlatego nie jest spełniony warunek 1.{' '}
|
||||
{mode === 'email' ? (
|
||||
<>
|
||||
Państwa strona nie dała mi nigdy faktycznego wyboru
|
||||
dotyczącego wyrażenia lub odmówienia zgody na takie
|
||||
przetwarzanie danych osobowych. Aby zgoda była ważna w
|
||||
świetle RODO, musi być dobrowolna. Brak możliwości
|
||||
odmówienia zgody sprawia, że tak wyrażona „zgoda” nie jest
|
||||
ważna w świetle RODO. Dlatego nie jest spełniony warunek 1.{' '}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
Aktualnie zaimplementowane okienko o przetwarzaniu danych
|
||||
osobowych nie daje użytkownikom końcowym możliwości odmowy
|
||||
wyrażenia zgody, przez co tak wyrażona „zgoda” nie spełnia
|
||||
warunku dobrowolności opisanego w motywie (32) RODO. Z tego
|
||||
powodu nie jest spełniony warunek opisany w punkcie 1.
|
||||
powyżej, zatem tak pozyskana "zgoda" nie może stanowić
|
||||
podstawy prawnej dostępu do cookiesów użytkownika końcowego.
|
||||
</>
|
||||
)}{' '}
|
||||
{this.answers.mentions_passive_consent ? (
|
||||
<>
|
||||
Zgody wyrażonej w sposób bierny lub milczący nie można uznać
|
||||
za ważną w świetle obowiązujących przepisów rozporządzenia
|
||||
2016/679. Dlatego zaniechanie zmiany ustawień przeglądarki
|
||||
lub po prostu korzystanie ze strony nie stanowi ważnej
|
||||
zgody. Takie jest{' '}
|
||||
Należy nadmienić także, że zgody wyrażonej w sposób bierny
|
||||
lub milczący nie można uznać za ważną w świetle
|
||||
obowiązujących przepisów rozporządzenia 2016/679. Dlatego
|
||||
zaniechanie zmiany ustawień przeglądarki lub po prostu
|
||||
korzystanie ze strony nie stanowi ważnej zgody. Takie jest{' '}
|
||||
<a href="https://assets.midline.pl/pisma/2021-12-16%20odpowiedz%20UODO%20na%20skarg%C4%99%20i(n)Secure.pdf">
|
||||
stanowisko polskiego UODO
|
||||
</a>
|
||||
@ -115,15 +142,26 @@ export class UnlawfulCookieAccess extends Problem {
|
||||
);
|
||||
} else if (this.answers.popup_type === 'some_choice') {
|
||||
if (this.answers.popup_action === 'none') {
|
||||
return (
|
||||
return mode == 'email' ? (
|
||||
<p>
|
||||
Nie {_('wyraziłem')} zgody na takie przetwarzanie {_('moich')}{' '}
|
||||
danych osobowych. W okienku pytającym o zgodę nic nie{' '}
|
||||
{_('kliknąłem')}. Nie jest zatem spełniony warunek 1.
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Skrypty pozyskujące dostęp do plików cookie uruchamiają się
|
||||
zanim użytkownik końcowy zdąży wybrać jakąkolwiek opcję w
|
||||
okienku pytającym o zgodę. Aby zgoda była ważna, musi być
|
||||
pozyskana <strong>zanim</strong> nastąpi proces przetwarzania
|
||||
danych, którego ta zgoda dotyczy. Z tego powodu nie jest
|
||||
spełniony warunek 1. Nie można używać tak pozyskanej „zgody”
|
||||
jako podstawy prawnej dostępu do plików cookies na urządzeniu
|
||||
użytkownika końcowego.
|
||||
</p>
|
||||
);
|
||||
} else if (this.answers.popup_action === 'closed_popup') {
|
||||
return (
|
||||
return mode == 'email' ? (
|
||||
<p>
|
||||
Nie {_('wyraziłem')} zgody na takie przetwarzanie {_('moich')}{' '}
|
||||
danych osobowych. {this.answers.popup_closed_how.trim()}
|
||||
@ -135,9 +173,19 @@ export class UnlawfulCookieAccess extends Problem {
|
||||
jednoznaczności opisanego w Art. 4, pkt 11 RODO. Nie jest zatem
|
||||
spełniony warunek 1.
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Gdy użytkownik końcowy strony nie wyrazi jednoznacznej zgody w
|
||||
wyskakującym okienku, a zamiast tego po prostu zamknie to
|
||||
okienko, strona nadal pozyskuje dostęp do plików cookies na
|
||||
urządzeniu użytkownika. Zamknięcia okienka (np. przyciskiem „x”)
|
||||
nie można uznać za ważną zgodę, gdyż taka czyność nie spełnia
|
||||
warunku jednoznaczności opisanego w Art. 4. pkt 11. RODO. Nie
|
||||
jest zatem spełniony warunek 1.
|
||||
</p>
|
||||
);
|
||||
} else if (this.answers.popup_action == 'deny_all') {
|
||||
return (
|
||||
return mode == 'email' ? (
|
||||
<p>
|
||||
{this.answers.popup_deny_all_how.trim()}
|
||||
{this.answers.popup_closed_how.trim().at(-1) != '.'
|
||||
@ -145,31 +193,78 @@ export class UnlawfulCookieAccess extends Problem {
|
||||
: ''}{' '}
|
||||
Zatem nie jest spełniony warunek 1.
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Gdy użytkownik jednoznacznie odmówi zgód na wszystkie cele
|
||||
przetwarzania, strona nadal pozyskuje dostęp do plików cookies
|
||||
na urządzeniu użytkownika. Jeżeli uzytkownik nie odmówił zgody,
|
||||
to nie powinny załączać się procesy przetwarzania powołujące się
|
||||
na zgodę jako podstawę prawną.
|
||||
</p>
|
||||
);
|
||||
}
|
||||
}
|
||||
})()}
|
||||
{unnecessary_hosts.length > 0 ? (
|
||||
<p>
|
||||
W {_('mojej')} ocenie odczytywanie przez Państwa stronę treści plików
|
||||
cookies z {wordlist(unnecessary_hosts)} nie jest konieczne do wyświetlenia
|
||||
treści Państwa strony, dlatego nie jest dla nich spełniony warunek 2. Jeżeli
|
||||
Państwa zdaniem jest inaczej, {_('proszę')} o wskazanie, co jest źródłem tej
|
||||
konieczności i co odróżnia Państwa stronę od wielu innych stron, które
|
||||
realizują te same funkcjonalności <em>bez</em> korzystania z plików Cookie.
|
||||
</p>
|
||||
mode == 'email' ? (
|
||||
<p>
|
||||
W {_('mojej')} ocenie odczytywanie przez Państwa stronę treści plików
|
||||
cookies z {wordlist(unnecessary_hosts)} nie jest konieczne do
|
||||
wyświetlenia treści Państwa strony, dlatego nie jest dla nich spełniony
|
||||
warunek 2. Jeżeli według Państwa oceny jest inaczej, {_('proszę')} o
|
||||
wskazanie, co jest źródłem tej konieczności i co odróżnia Państwa stronę
|
||||
od wielu innych stron, które realizują te same funkcjonalności{' '}
|
||||
<em>bez</em> korzystania z plików Cookie.
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Warto, aby informacje na stronie opisywały w zrozumiały sposob, które z
|
||||
podmiotów, których skrypty uruchamiają się na stronie (
|
||||
{wordlist(unnecessary_hosts)}) są konieczne do działania strony, jaki
|
||||
zakres danych przetwarzają i w jakim celu.
|
||||
</p>
|
||||
)
|
||||
) : (
|
||||
''
|
||||
)}
|
||||
<p>
|
||||
{_('Proszę')} o wskazanie,{' '}
|
||||
<strong>
|
||||
czy być może stosowali Państwo inną podstawę prawną do takiego przetwarzania{' '}
|
||||
{_('moich')} danych osobowych, czy przetwarzali je państwo bez ważnej
|
||||
podstawy prawnej?
|
||||
</strong>
|
||||
</p>
|
||||
{maybe_unnecessary_hosts.length > 1 ? (
|
||||
{mode == 'email' ? (
|
||||
tone === 'official' ? (
|
||||
<p>
|
||||
{_('Proszę')} o wskazanie,{' '}
|
||||
<strong>
|
||||
czy być może stosowali Państwo inną podstawę prawną do takiego
|
||||
przetwarzania {_('moich')} danych osobowych, czy być może
|
||||
przetwarzali je Państwo bez ważnej podstawy prawnej?
|
||||
</strong>
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Apeluję o wdrożenie zmian na Państwa stronie tak, aby użytkownik miał
|
||||
faktyczny wybór dotyczący procesów przetwarzania jego danych osobowych,
|
||||
jakie zachodzą w trakcie odwiedzin tej strony.
|
||||
</p>
|
||||
)
|
||||
) : (
|
||||
<p>
|
||||
Jeżeli zgoda nadal ma być używana jako podstawa prawna do odczytu cookiesów
|
||||
przez skrypty wyżej wymienionych podmiotów, to należy zmienić mechanizm
|
||||
zgody tak, aby:{' '}
|
||||
<ul>
|
||||
<li>
|
||||
dawał użytkownikowi końcowemu możliwość odmowy zgody w sposób równie
|
||||
łatwy i dostępny, jak na wyrażenie zgody;
|
||||
</li>
|
||||
<li>
|
||||
skrypty śledzące uruchamiały się dopiero po uzyskaniu ważnej zgody;
|
||||
</li>
|
||||
<li>
|
||||
skrypty śledzące nie uruchamiały się, jeżeli użytkownik nie wyraził
|
||||
na nie zgody.
|
||||
</li>
|
||||
</ul>
|
||||
</p>
|
||||
)}
|
||||
{maybe_unnecessary_hosts.length > 1 && mode == 'email' && tone == 'official' ? (
|
||||
<p>
|
||||
{_('Proszę')} też o wskazanie, czy dostęp do treści plików cookie z
|
||||
{wordlist(maybe_unnecessary_hosts)} jest konieczny do poprawnego działania
|
||||
|
@ -16,6 +16,8 @@ export type HostRawAnswers = {
|
||||
|
||||
export type BasicRawAnswers = {
|
||||
zaimek: 0 | 1 | 2 | 3;
|
||||
user_role: 'user' | 'admin';
|
||||
email_type: 'polite_information' | 'official_request';
|
||||
is_incognito_different: [] | ['incognito_is_the_same'];
|
||||
policy_readable: 'yes' | 'vague' | 'cant_find';
|
||||
popup_action: 'none' | 'closed_popup' | 'accept_all' | 'deny_all' | 'other';
|
||||
|
3
components/report-window/report-intro.tsx
Normal file
3
components/report-window/report-intro.tsx
Normal file
@ -0,0 +1,3 @@
|
||||
export function reportIntro(visited_url: string) {
|
||||
return <h2>Analiza skryptów śledzących na ${visited_url} - raport</h2>;
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
const words = {
|
||||
ciebie: ['ciebie', 'ciebie', 'ciebie', 'was'],
|
||||
chciałbym: ['chciałbym', 'chciałabym', 'chciałobym', 'chcielibyśmy'],
|
||||
dokonałeś: ['dokonałeś', 'dokonałaś', 'dokonałoś', 'dokonaliście'],
|
||||
jesteś: ['jesteś', 'jesteś', 'jesteś', 'jesteście'],
|
||||
kliknąłem: ['kliknąłem', 'kliknęłam', 'klinkęłom', 'kliknęliśmy'],
|
||||
@ -8,6 +9,7 @@ const words = {
|
||||
mnie: ['mnie', 'mnie', 'mnie', 'nas'],
|
||||
moich: ['moich', 'moich', 'moich', 'naszych'],
|
||||
moje: ['moje', 'moje', 'moje', 'nasze'],
|
||||
mojego: ['mojefo', 'mojego', 'mojego', 'naszego'],
|
||||
moja: ['moja', 'moja', 'moja', 'nasza'],
|
||||
mojej: ['mojej', 'mojej', 'mojej', 'naszej'],
|
||||
muszę: ['muszę', 'muszę', 'muszę', 'musimy'],
|
||||
|
@ -191,6 +191,10 @@ export class RequestCluster extends SaferEmitter {
|
||||
if (this.hasMarkedCookies()) {
|
||||
types_of_data.push('unikalne ID z cookies');
|
||||
}
|
||||
if (types_of_data.length > 1) {
|
||||
types_of_data[types_of_data.length - 1] =
|
||||
'oraz ' + types_of_data[types_of_data.length - 1];
|
||||
}
|
||||
return types_of_data.join(', ');
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user