Projet

Général

Profil

Development #43789

interdire les slug qui ressemblent à des id (numeros)

Ajouté par Thomas Noël il y a presque 4 ans. Mis à jour il y a presque 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
08 juin 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

On a ce code :

class SlotStatus(APIView):
    permission_classes = (permissions.IsAuthenticated,)

    def get_object(self, event_identifier):
        try:
            return Event.objects.get(slug=event_identifier)
        except Event.DoesNotExist:
            try:
                # legacy access by event id
                return Event.objects.get(pk=int(event_identifier))
            except (ValueError, Event.DoesNotExist):
                raise Http404()
<pre>

En imaginant la création d'un event avec un slug "6", il va prendre le dessus sur l'event id 6, qui devient inaccessible.

Ma conclusion : il faut interdire les slug numériques (interdire au plus bas niveau possible, par exemple lors du save(), pour que ça crashe aussi lors d'un import).

Fichiers

Révisions associées

Révision 0d028dcd (diff)
Ajouté par Valentin Deniaud il y a presque 4 ans

agendas: forbid numerical slug for events (#43789)

Historique

#2

Mis à jour par Valentin Deniaud il y a presque 4 ans

  • Assigné à mis à Valentin Deniaud
#3

Mis à jour par Valentin Deniaud il y a presque 4 ans

J'ai vérifié en prod et en recette, mis à part l'agenda dans le ticket lié il n'y en a pas d'autre en cause.

Thomas Noël a écrit :

interdire au plus bas niveau possible, par exemple lors du save(), pour que ça crashe aussi lors d'un import

Pas besoin : le bug a bien été déclenché par un import, mais un import CSV, donc la validation normale suffit à s'en prémunir (cf test).

#4

Mis à jour par Thomas Noël il y a presque 4 ans

Valentin Deniaud a écrit :

J'ai vérifié en prod et en recette, mis à part l'agenda dans le ticket lié il n'y en a pas d'autre en cause.

Thomas Noël a écrit :

interdire au plus bas niveau possible, par exemple lors du save(), pour que ça crashe aussi lors d'un import

Pas besoin : le bug a bien été déclenché par un import, mais un import CSV, donc la validation normale suffit à s'en prémunir (cf test).

Nope, pas de CSV, j'ai fait un import via export-site/import-site, donc en JSON. Ça râlera ?

#5

Mis à jour par Valentin Deniaud il y a presque 4 ans

Thomas Noël a écrit :

Nope, pas de CSV, j'ai fait un import via export-site/import-site, donc en JSON. Ça râlera ?

Je parlais de la manière dont est survenu le bug dans le ticket client. Oui ça râlera, mais je ne vois pas comment on pourrait se retrouver avec de tels fichiers d'import une fois le problème résolu par ce patch ?

#6

Mis à jour par Thomas Noël il y a presque 4 ans

Valentin Deniaud a écrit :

Thomas Noël a écrit :

Nope, pas de CSV, j'ai fait un import via export-site/import-site, donc en JSON. Ça râlera ?

Je parlais de la manière dont est survenu le bug dans le ticket client.

C'est vraiment comme ça que c'est arrivé sur agendas-mably.test.entrouvert.org, c'est moi qui a géré toute la migration des agenda, en ligne de commande.

Oui ça râlera, mais je ne vois pas comment on pourrait se retrouver avec de tels fichiers d'import une fois le problème résolu par ce patch ?

Parce qu'il y a de l'existant foireux qui ne va pas s'auto-corriger. Par exemple si j'exporte https://agendas-mably.test.entrouvert.org/manage/agendas/14/settings ...

#7

Mis à jour par Valentin Deniaud il y a presque 4 ans

L'existant foireux, ce sont deux agendas sur l'ensemble du saas, je les ai signalés au client qui devrait les supprimer, je trouve dommage de faire du code pour si peu.

Mais j'ai mal répondu à la question précédente : non ça ne gueulait pas, j'ajoute donc un assert pour que ça gueule, et voilà le travail.

#8

Mis à jour par Thomas Noël il y a presque 4 ans

  • Statut changé de Solution proposée à Solution validée

Ca marche comme ça. Les petits malins qui voudront forger des json invalides se prendront des 500, mais on s'en fiche, et ça nous fera une alerte.

#9

Mis à jour par Valentin Deniaud il y a presque 4 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 0d028dcdf20a018114f96389972c105f43e234b2
Author: Valentin Deniaud <vdeniaud@entrouvert.com>
Date:   Thu Jun 11 15:21:36 2020 +0200

    agendas: forbid numerical slug for events (#43789)
#10

Mis à jour par Frédéric Péters il y a presque 4 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF