Étude de code: l’application Alerte COVID
→ Louis-Olivier Brassard
Guide: naviguez avec les flèches du clavier ou cliquez pour avancer.mais d’abord
le point de vue de qui?
Moi
→ Développeur web
Je conçois des objets numériques avec les technologies du web
- <HTML> (structure)
- CSS { } (présentation)
- ( ) => JavaScript (logique)
- Des sites web
- Des applications
- Des publications
- Des livres?
Ma perspective n’est pas celle d’un·e autre informaticien·ne (ou d’un·e philosophe)
Alerte COVID
Développée par
Shopify
Service numérique canadien
3 parties
- 📱 client (grand public)
- 👩🏾⚕️ portail (personnel)
- 📡 serveur (données)
- 📱 client (grand public)
- 👩🏾⚕️ portail (personnel)
- 📡 serveur (données)
Quelques aspects
1.
Une app respectueuse de la vie privée
2.
Souci du poids numérique
raisonnable
dans un
dépôt
(repository)
- Le code
- L’historique
- La licence
- La documentation
- Les versions (releases)
- Les contributrices·eurs
- La discussion (commentaires, issues)
- Le code
- L’historique
- La licence
- La documentation
- Les versions (releases)
- Les contributrices·eurs
- La discussion (commentaires, issues)
QUESTIONS
Quel est le code?
Comment fonctionne-t-il?
Comment puis-je l’installer? (l’essayer moi-même!)
Ai-je le droit de le copier/réutiliser?
Comment puis-je contribuer moi aussi?
Inspection du code
Moment:
La notification d’exposition
regardons un extrait
Services/
...
- ExposureNotificationService.ts
...
private async processNotification() {
const exposureStatus = this.exposureStatus.get();
if (exposureStatus.type === ExposureStatusType.Exposed && !exposureStatus.notificationSent) {
PushNotification.presentLocalNotification({
alertTitle: this.i18n.translate('Notification.ExposedMessageTitle'),
alertBody: this.i18n.translate('Notification.ExposedMessageBody'),
});
await this.exposureStatus.append({
notificationSent: true,
});
}
if (this.isReminderNeeded(exposureStatus)) {
PushNotification.presentLocalNotification({
alertTitle: this.i18n.translate('Notification.DailyUploadNotificationTitle'),
alertBody: this.i18n.translate('Notification.DailyUploadNotificationBody'),
});
await this.exposureStatus.append({
uploadReminderLastSentAt: new Date().getTime(),
});
}
}
if (exposureStatus.type === ExposureStatusType.Exposed && !exposureStatus.notificationSent) {
PushNotification.presentLocalNotification({
alertTitle: this.i18n.translate('Notification.ExposedMessageTitle'),
alertBody: this.i18n.translate('Notification.ExposedMessageBody'),
});
await this.exposureStatus.append({
notificationSent: true,
});
}
euh…
Ok.
Un ticket!
Qui?
→ scoates- N’est pas un contributeur au projet Alerte COVID
- N’est pas sous l’embauche du Service numérique canadien
- Travaille dans une agence privée (profil technique)
Quoi?
When the app runs (on iOS at least), it periodically requests
https://clients3.google.com/generate_204
.
...
This is because the app uses react-native-netinfo
, which, by default, exhibits this behaviour.
I urge you to treat this as an urgent security problem that must be fixed ASAP. You are currently leaking PII to Google for all users.
autrement dit
«Hey Google!»
(j’utilise Alerte COVID)
la source du problème?
une «bibliothèque» tierce
du code «caché» que les «auteurs·trices» de l’application n’ont jamais écrit
(introuvable d’ailleurs dans le code du dépôt)
la patche a été appliquée et mise en production
👍
Étude de cas
Et si on pensait le problème autrement?
Pour une organisation
(ex. un club d’athlétisme)
COCH.APP
Un registre de prises de présences, à faible empreinte numérique, respectueux de la vie privée, axé sur l’accessibilité.
Un outil simple, résilient et accessible
- Fonctionne au sein d’une organisation
- Responsabilité distribuée: un appareil pour plusieurs personnes
- Choix de technologies résilientes et accessibles (web)
- Faible empreinte numérique
- Fonctionne hors-ligne
Un question de design…