Vérification des droits de création/consulation de topics #40

Closed
opened 2019-12-10 23:05:49 +01:00 by Darks · 6 comments
Owner

Le commit 415cfd8d8f ajoute la vérification des droits pour créer un sujet dans un forum. Par contre, c'est hardcodé et ça sera compliqué de traiter les forums privés, et autres, par la suite.

Pour gérer les droits des forums privés, je pense faire ça dans le routeur, avec un équivalent du @priv_required.

Et du coup on peut laisser ça comme ça puisque si on a pas le droit d'avoir accès au forum en question, on se prend une 403 à la fois pour la consultation et l'écriture.

À voir (je sais pas si je suis clair)…

Le commit 415cfd8d8f ajoute la vérification des droits pour créer un sujet dans un forum. Par contre, c'est hardcodé et ça sera compliqué de traiter les forums privés, et autres, par la suite. Pour gérer les droits des forums privés, je pense faire ça dans le routeur, avec un équivalent du `@priv_required`. Et du coup on peut laisser ça comme ça puisque si on a pas le droit d'avoir accès au forum en question, on se prend une 403 à la fois pour la consultation et l'écriture. À voir (je sais pas si je suis clair)…
Darks added the
help wanted
enhancement
labels 2019-12-10 23:12:49 +01:00
Owner

Tu as écrit "/news" in f.url puis "/news" not in f.name 😉

Il y aussi des choses du genre privilèges spéciaux mais je ne crois pas qu'on en ait définis à paramètre, donc tout va bien.

La 403 me gêne pas tant que tu peux pas légitimement voir une page, remplir le formulaire, et tomber dessus (par exemple soit le topic lui-même est 403, soit le formulaire est pas affiché).

Tu as écrit `"/news" in f.url` puis `"/news" not in f.name` :wink: Il y aussi des choses du genre privilèges spéciaux mais je ne crois pas qu'on en ait définis à paramètre, donc tout va bien. La 403 me gêne pas tant que tu peux pas légitimement voir une page, remplir le formulaire, et tomber dessus (par exemple soit le topic lui-même est 403, soit le formulaire est pas affiché).
Author
Owner

Tu as écrit "/news" in f.url puis "/news" not in f.name 😉

La fatigue --'

Il y aussi des choses du genre privilèges spéciaux mais je ne crois pas qu’on en ait définis à paramètre, donc tout va bien.

Pour les privilèges spéciaux osef, à partir du moment où member.priv("some-priv") retourne True ça passe. Et la méthode en question checke les privilèges spéciaux et ceux des groupes.

La 403 me gêne pas tant que tu peux pas légitimement voir une page

On veut que :

  1. le forum des news soit visible par tout le monde, mais que seuls les gens qui ont les bons droits puissent y créer des topics
  2. les forums privés ne soient visibles et accessibles que par ceux qui ont les bons droits.

Pour le point 1, ce que j'ai codé fait le taf. Pour le point 2, si on lève une 403 sur toutes les routes non autorisées (/forums/creativecalc/?.* par exemple), non seulement on empêche la consultation, mais aussi la création de topic.

Il suffit ensuite de n'afficher les forums privés qu'à ceux qui en ont les droits à la racine du forum.

> Tu as écrit "/news" in f.url puis "/news" not in f.name :wink: La fatigue --' > Il y aussi des choses du genre privilèges spéciaux mais je ne crois pas qu’on en ait définis à paramètre, donc tout va bien. Pour les privilèges spéciaux osef, à partir du moment où `member.priv("some-priv")` retourne `True` ça passe. Et la méthode en question checke les privilèges spéciaux et ceux des groupes. > La 403 me gêne pas tant que tu peux pas légitimement voir une page On veut que : 1. le forum des news soit visible par tout le monde, mais que seuls les gens qui ont les bons droits puissent y créer des topics 2. les forums privés ne soient visibles et accessibles que par ceux qui ont les bons droits. Pour le point 1, ce que j'ai codé fait le taf. Pour le point 2, si on lève une 403 sur toutes les routes non autorisées (`/forums/creativecalc/?.*` par exemple), non seulement on empêche la consultation, mais aussi la création de topic. Il suffit ensuite de n'afficher les forums privés qu'à ceux qui en ont les droits à la racine du forum.
Owner

Pour le point 1, ce que j’ai codé fait le taf.

Exactement, il suffit de ne pas afficher le formulaire :lol:

Pour le point 2, si on lève une 403 sur toutes les routes non autorisées (/forums/creativecalc/?.* par exemple), non seulement on empêche la consultation, mais aussi la création de topic.

Oui, parfait. Je suggère de lever une 403 sur /forums/creativcalc (les pages dont tout le monde connait l'existence) et éventuellement une 404 sur les pages de topics (pour ne pas révéler qu'elles existent, comme d'hab). Aussi niveau indexation on est sûrs que les pages 404 sont jamais indexées même si les URLs s'échappent par erreur.

> Pour le point 1, ce que j’ai codé fait le taf. Exactement, il suffit de ne pas afficher le formulaire :lol: > Pour le point 2, si on lève une 403 sur toutes les routes non autorisées (/forums/creativecalc/?.* par exemple), non seulement on empêche la consultation, mais aussi la création de topic. Oui, parfait. Je suggère de lever une 403 sur `/forums/creativcalc` (les pages dont tout le monde connait l'existence) et éventuellement une 404 sur les pages de topics (pour ne pas révéler qu'elles existent, comme d'hab). Aussi niveau indexation on est sûrs que les pages 404 sont jamais indexées même si les URLs s'échappent par erreur.
Author
Owner

Exactement, il suffit de ne pas afficher le formulaire :lol:

Y'a pas que ça. Ça vérifie aussi à l'envoi du formulaire que l'utilisateur a bien le droit de l'envoyer.

> Exactement, il suffit de ne pas afficher le formulaire :lol: Y'a pas que ça. Ça vérifie aussi à l'envoi du formulaire que l'utilisateur a bien le droit de l'envoyer.
Owner

Oui bien sûr, ce que je voulais dire c'est "pour satisfaire le critère que j'ai demandé" (ne pas avoir de 403 en utilisation normale) ça suffit. Pas que c'est assez sécurisé.

Comme pour prouver mon argument, tout à l'heure Yatis a trouvé un topic privé par un moteur de recherche... x)

Oui bien sûr, ce que je voulais dire c'est "pour satisfaire le critère que j'ai demandé" (ne pas avoir de 403 en utilisation normale) ça suffit. Pas que c'est assez sécurisé. Comme pour prouver mon argument, tout à l'heure Yatis a trouvé un topic privé par un moteur de recherche... x)
Owner

Cette issue a été résolue indirectement par 6f98cba65e (il y a 4 mois).

Pour résumer les points abordés dans ce fil :

  • Les forums privés ont un is_default_accessible() et is_default_postable() à False, ce qui les rend inacessibles pour les utilisateurs non-connectés ou sans privilèges.
  • Des privilèges forum.access.<prefix> et forum.post.<prefix> autorisent l'accès (pour l'instant utilisés avec prefix={admin,creativecalc}), de même que forum.post-news (pour les news) et forum.post-anywhere.

Il y a d'autres subtilités, mais on retiendra surtout que quand l'utilisateur est pas connecté on utilise Member.can_access_forum(), Member.can_post_in_forum(), Member.can_edit_post() et Member.can_delete_post() ; si l'utilisateur n'est pas connecté on utilise Forum.is_default_accessible() et Forum.is_default_postable().

Cette issue a été résolue indirectement par https://gitea.planet-casio.com/devs/PCv5/commit/6f98cba65e957b568f9430305f12ddcaca73374f (il y a 4 mois). Pour résumer les points abordés dans ce fil : * Les forums privés ont un `is_default_accessible()` et `is_default_postable()` à `False`, ce qui les rend inacessibles pour les utilisateurs non-connectés ou sans privilèges. * Des privilèges `forum.access.<prefix>` et `forum.post.<prefix>` autorisent l'accès (pour l'instant utilisés avec `prefix={admin,creativecalc}`), de même que `forum.post-news` (pour les news) et `forum.post-anywhere`. Il y a d'autres subtilités, mais on retiendra surtout que quand l'utilisateur est pas connecté on utilise `Member.can_access_forum()`, `Member.can_post_in_forum()`, `Member.can_edit_post()` et `Member.can_delete_post()` ; si l'utilisateur n'est pas connecté on utilise `Forum.is_default_accessible()` et `Forum.is_default_postable()`.
Sign in to join this conversation.
No description provided.