Re: [spip-dev] Accès restreint : protection des documents HS
Le 09/05/2020 à 17:56, nicod_ a écrit : Le 08/05/2020 à 19:51, nicod_ a écrit : Je pense comprendre le principe, mais simplement, est ce que cette clause zzzd.objet NOT IN ('rubrique','article','breve','forum') pourrait être optionnelle par exemple ? Bon, j'ai fait une PR dans ce sens : https://git.spip.net/spip-contrib-extensions/acces_restreint/pulls/1 "Petit up", comme on dit, vu qu'il y a un +1 et qu'on n'a pas de notifications... -- nicod_ ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Le 08/05/2020 à 19:51, nicod_ a écrit : Je pense comprendre le principe, mais simplement, est ce que cette clause zzzd.objet NOT IN ('rubrique','article','breve','forum') pourrait être optionnelle par exemple ? Bon, j'ai fait une PR dans ce sens : https://git.spip.net/spip-contrib-extensions/acces_restreint/pulls/1 -- nicod_ ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Le 07/05/2020 à 20:53, nicod_ a écrit : > Parfois il y a un htaccess à la racine de /IMG (le rewrite ci dessus), > parfois dans chaque sous répertoire (deny all), je ne détermine pas bien > pourquoi (le code est assez... complexe à suivre). Le pourquoi normalement c'est : - si protection des documents le plugin cherche en priorité à poser uniquement le htaccess de IMG qui doit tout rediriger vers l'action PHP (plus aucune URL de document servie brute) - mais il teste si ça marche vraiment, en demandant un fichier qui doit renvoyer OK seulement si depuis l'action PHP - si ça n'a PAS marché, alors il pose des htaccess de deny (c'est le core qui fait ça) dans tous les sous-dossiers, et il supprime celui de IMG puisque ne marche pas Les raisons pour lesquelles ça ne marche pas peuvent être multiples, par ex : - des problèmes de droits, et donc le fichier n'est pas posé du tout - des problèmes de config Apache ou ce genre, et donc les réécritures ne fonctionnent pas et donc ça n'appelle pas l'action PHP Toujours est-il que si les rewrite ne fonctionnent pas et que donc pas d'action PHP, alors ce sont les deny dans les sous-dossiers. Mais si le htaccess IMG a bien fonctionné, alors les vrais URL de documents redirigent toujours vers l'action PHP *qu'il y ait la query string avec le hash ou pas*. Le fait qu'il y ait le hash, est une facilité, où l'autorisation (matérialisée par le hash) est calculée en amont au moment de #URL_DOCUMENT, et du coup si c'est le cas, quand on cherche à accéder au document, il ne vérifie plus l'autorisation car déjà ok (sauf si constante). Mais si on demande les fichiers sans le hash, ça marche aussi : ça passe bien par l'action de même, et ça vérifie alors l'autorisation sur le moment de l'accès (y compris sans la constante donc). Les htpasswd par contre sont sans rapport avec les documents et donc les htaccess de IMG (lui-même ou sous-dossiers). -- RastaPopoulos ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Le 08/05/2020 à 18:39, nicod_ a écrit : Le 07/05/2020 à 20:53, nicod_ a écrit : Mais sur un autre SPIP 3.2 en particulier, ça passe direct, on peut télécharger quand même les docs, je chercher à comprendre pourquoi... J'ai compris le problème, il y a effectivement un bug dans certains cas. Quand on a activé la constante, une requête est lancée pour vérifier si le document est attaché à un objet lui même attaché à une rubrique restreinte : https://git.spip.net/spip-contrib-extensions/acces_restreint/src/tag/v4.0.0/inc/accesrestreint_autoriser.php#L269 Exemple de requête générée : http://spip.pastebin.fr/62681 Si le document a uniquement un lien vers un article ou une rubrique, ça marche comme prévu : la requête ne renvoie rien et un visiteur non connecté ne voit pas le doc. Mais si le document a un lien vers un autre objet (un auteur par exemple) dans spip_documents_liens, la requête renvoie bien l'id_document, et l'autorisation est donc donnée, ce qui n'est pas du tout ce qu'on veut. En fait, cette logique pourrait se discuter... Si le doc est attaché à un article restreint, mais également à un autre objet qui lui n'est pas restreint, par exemple, que faire ? Apparemment, tu considères que dans ce cas on le diffuse. Dans mon cas, j'attache des documents à des auteurs, pour de la traçabilité. On peut avoir d'autres objets qui dépendent de rubriques, donc potentiellement restreints aussi, mais là, ils peuvent utiliser le pipeline accesrestreint_objets_accessibles_where. Je pense comprendre le principe, mais simplement, est ce que cette clause zzzd.objet NOT IN ('rubrique','article','breve','forum') pourrait être optionnelle par exemple ? -- nicod_ ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Le 07/05/2020 à 20:53, nicod_ a écrit : Mais sur un autre SPIP 3.2 en particulier, ça passe direct, on peut télécharger quand même les docs, je chercher à comprendre pourquoi... J'ai compris le problème, il y a effectivement un bug dans certains cas. Quand on a activé la constante, une requête est lancée pour vérifier si le document est attaché à un objet lui même attaché à une rubrique restreinte : https://git.spip.net/spip-contrib-extensions/acces_restreint/src/tag/v4.0.0/inc/accesrestreint_autoriser.php#L269 Exemple de requête générée : http://spip.pastebin.fr/62681 Si le document a uniquement un lien vers un article ou une rubrique, ça marche comme prévu : la requête ne renvoie rien et un visiteur non connecté ne voit pas le doc. Mais si le document a un lien vers un autre objet (un auteur par exemple) dans spip_documents_liens, la requête renvoie bien l'id_document, et l'autorisation est donc donnée, ce qui n'est pas du tout ce qu'on veut. Cela vient des deux clauses OR ((zzzd.objet NOT IN ('rubrique','article','breve','forum')), qui remontent donc un enregistrement s'il y a un lien vers un auteur, une patate ou autre. C'est généré ici : https://git.spip.net/spip-contrib-extensions/acces_restreint/src/tag/v4.0.0/public/accesrestreint.php#L256 Cedric, si tu as suivi mon raisonnement (que je peux reproduire maintenant), qu'en penses tu ? -- nicod_ ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Le 07/05/2020 à 00:08, Cerdic a écrit : Le 6 mai 2020 à 21:05 +0200, nicod_ , a écrit : Si elle n'est pas définie, toutes les urls qui contiennent le hash du document sont ok, donc il suffit de copier coller un lien vers un doc depuis un espace restreint pour qu'il soit accessible par un visiteur non connecté, ce qui est justement ce qu'on ne veut pas. C’est bien ce qu’on veut, si, c’était la spec initiale. Le problème c’est que chacun veut un truc un peu différent et à la fin ça finit par faire de la complexité et on sait plus vraiment ce que le plugin est censé faire ou pas… :( Ça dépend de la spéc initiale, je te l'accorde :) Le problème n'est pas que chacun veuille un truc différent, mais que la doc et les libellés des options du plugin ne sont pas très (ou plus très) précis sur ce qui est effectivement protégé ou pas. Je cite : « les accès aux images et documents du site vont tous générer un accès à la base de données (pour savoir si les documents concernés peuvent être vus) » On peut l'interpréter de plusieurs façons, non ? Je pense que ça devrait être plus clair, et que l'utilisation de la constante ACCES_RESTREINT_FORCE_AUTORISE devrait être documenté, pour que les utilisateurs sachent exactement ce qui est protégé ou pas (avec la mise en garde de performances qui va bien). Et en terme de clarté, l'option de plugin qui parle de créer des htpasswd serait peut être à réécrire, qu'en penses tu ? J'ai essayé de suivre un peu ce qui se passe dans le code en fonction de ces deux options, mais c'est assez complexe, avec aussi l'intervention d'une autre meta (creer_htaccess) qui n'est déclarée nulle part... -- nicod_ ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Ce qui est clair par contre, c'est que les deux options de la config ne sont justement pas claires. Entre "Cette option interdit la lecture des documents joints si le texte auquel ils se rattachent n’est pas publié" (accesrestreint_proteger_documents) et "SPIP doit-il créer les fichiers spéciaux .htpasswd et .htpasswd-admin dans le répertoire ?" (creer_htpasswd), qui crée en fait des htaccess, selon ce qu'on active ou pas, le résultat est assez aléatoire. -- nicod_ ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Le 07/05/2020 à 00:49, RastaPopoulos a écrit : Le 06/05/2020 à 20:21, nicod_ a écrit : En 3.2 ça crée un htaccess dans IMG : RewriteEngine On RewriteCond %{QUERY_STRING} ^(\d+/[\da-f]+)$ RewriteRule ^\w+/.*$ ../spip.php?action=api_docrestreint=%1/$0 [skip=100] RewriteRule ^\w+/.*$ ../spip.php?action=api_docrestreint=0/0/$0 [skip=100] Moi j'ai bien ces règles (je suis en 3.2), et il les faut absolument à la racine de IMG. Pierrox dit que lui ne les a pas, et ça ça peut être un bug. Non, ce n'est pas un bug, mais le comportement que j'observe est différent entre plusieurs SPIP, en 3.2 et 3.3. Parfois il y a un htaccess à la racine de /IMG (le rewrite ci dessus), parfois dans chaque sous répertoire (deny all), je ne détermine pas bien pourquoi (le code est assez... complexe à suivre). Mais avec un htaccess qui bloque tout accès http dans chaque sous répertoire, les documents sont clairement inaccessibles par leur url directe (/IMG/pdf/machin.pdf). Ensuite, les #URL_DOCUMENT sont générées avec un hash et un id_document, soit sous la forme : https://domaine.tld/IMG/pdf/document.pdf?306/3364508d941ea5480ae60af4774255f0c4646833 soit sous la forme : https://domaine.tld/docrestreint.api/188/feeb9f02eec4c08a5d7285b3db252c8ba316fe14/pdf/document.pdf donc passent bien par l'action api_docrestreint qui vérifie les droits. Sans la constante ACCES_RESTREINT_FORCE_AUTORISE, il suffit d'avoir l'url avec le hash pour accéder au document. Il suffit d'envoyer un mail avec l'url du document pour que n'importe qui puisse y accéder. Et certains webmails ne se gênent pas pour lire le courrier (suivez mon regard vers... Gmail au hasard). Pour moi c'est donc une non-protection, les documents sont tout aussi à poil que si on ouvre l'accès à leur lien direct. Avec la constante déclarée ça semble bien fonctionner sur deux SPIP 3.2 et 3.3 sur lesquels je teste, un visiteur non connecté n'accède pas aux documents attachés à une zone d'accès restreint. Mais sur un autre SPIP 3.2 en particulier, ça passe direct, on peut télécharger quand même les docs, je chercher à comprendre pourquoi... -- nicod_ ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Hello, De mon coté en SPIP 3.3 + accès restreint 4.0.0 Le fichier IMG/.htaccess n'est pas créé même en forçant un $GLOBALS['meta']['creer_htaccess'] = 'oui', J'ai vérifié les droits mais le .htaccess dans IMG/ ne se créé pas. Par contre IMG/{jpg,mp3,mp4,...}/.htaccess sont bien présent avec un "deny all" pour apache 2.2/2.4. les liens générés par #URL_DOCUMENT semblent fonctionner correctement et sont du type: monsite.loc/docrestreint.api/21/b0696e42785dd2ca48c32c219e1317059b68a5ac/jpg/debian8.jpg Par contre pour que la gestion des autorisations en fonction des documents présents dans les zones restreinte il faut définir la constante ACCES_RESTREINT_FORCE_AUTORISE Voilà. Le jeu. 7 mai 2020 à 00:49, RastaPopoulos a écrit : > Le 06/05/2020 à 20:21, nicod_ a écrit : > > En 3.2 ça crée un htaccess dans IMG : > > > > RewriteEngine On > > RewriteCond %{QUERY_STRING} ^(\d+/[\da-f]+)$ > > RewriteRule ^\w+/.*$ ../spip.php?action=api_docrestreint=%1/$0 > [skip=100] > > RewriteRule ^\w+/.*$ ../spip.php?action=api_docrestreint=0/0/$0 > [skip=100] > > Moi j'ai bien ces règles (je suis en 3.2), et il les faut absolument à la > racine de IMG. Pierrox dit que lui ne les a pas, et ça ça peut être un bug. > > Ces règles servent justement à ne PAS servir les fichiers directement, > mais à les faire passer par l'action en paramètre. > > Et donc ça teste bien l'autorisation ensuite dans l'action, c'est bien le > cas sur un de nos sites. (et sans define pour ça à priori) > > -- > RastaPopoulos > > ___ > liste: https://listes.rezo.net/mailman/listinfo/spip-dev > doc: https://www.spip.net/ > dev: https://core.spip.net/ > irc://irc.freenode.net/spip > ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Le 06/05/2020 à 20:21, nicod_ a écrit : > En 3.2 ça crée un htaccess dans IMG : > > RewriteEngine On > RewriteCond %{QUERY_STRING} ^(\d+/[\da-f]+)$ > RewriteRule ^\w+/.*$ ../spip.php?action=api_docrestreint=%1/$0 > [skip=100] > RewriteRule ^\w+/.*$ ../spip.php?action=api_docrestreint=0/0/$0 > [skip=100] Moi j'ai bien ces règles (je suis en 3.2), et il les faut absolument à la racine de IMG. Pierrox dit que lui ne les a pas, et ça ça peut être un bug. Ces règles servent justement à ne PAS servir les fichiers directement, mais à les faire passer par l'action en paramètre. Et donc ça teste bien l'autorisation ensuite dans l'action, c'est bien le cas sur un de nos sites. (et sans define pour ça à priori) -- RastaPopoulos ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Le 6 mai 2020 à 21:05 +0200, nicod_ , a écrit : > Si elle n'est pas définie, toutes les urls qui contiennent le hash du > document sont ok, donc il suffit de copier coller un lien vers un doc > depuis un espace restreint pour qu'il soit accessible par un visiteur > non connecté, ce qui est justement ce qu'on ne veut pas. C’est bien ce qu’on veut, si, c’était la spec initiale. Le problème c’est que chacun veut un truc un peu différent et à la fin ça finit par faire de la complexité et on sait plus vraiment ce que le plugin est censé faire ou pas… :( ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Je vois qu'il y a un test sur une constante non définie par défaut (ACCES_RESTREINT_FORCE_AUTORISE). Si elle n'est pas définie, toutes les urls qui contiennent le hash du document sont ok, donc il suffit de copier coller un lien vers un doc depuis un espace restreint pour qu'il soit accessible par un visiteur non connecté, ce qui est justement ce qu'on ne veut pas. Même en la définissant, les documents remontent quand même pour un visiteur non connecté. Il y a une requête assez complexe lancée ici : https://git.spip.net/spip-contrib-extensions/acces_restreint/src/tag/v4.0.0/inc/accesrestreint_autoriser.php#L269 mais elle remonte toujours un id_document, pour un non connecté, donc ça passe à la suite et ça autorise. -- nicod_ ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip
Re: [spip-dev] Accès restreint : protection des documents HS
Le 06/05/2020 à 20:21, nicod_ a écrit : En 3.2 ça crée un htaccess dans IMG : RewriteEngine On RewriteCond %{QUERY_STRING} ^(\d+/[\da-f]+)$ RewriteRule ^\w+/.*$ ../spip.php?action=api_docrestreint=%1/$0 [skip=100] RewriteRule ^\w+/.*$ ../spip.php?action=api_docrestreint=0/0/$0 [skip=100] Avec ces règles, un appel à /IMG/pdf/patate.pdf est servi directement par Apache (la redirection ne s'applique pas). Calomnie ! Avec ces règles, ça passe bien par l'API aussi en chopant la deuxième RewriteRule, ce qui donne un id_document à 0 dans l'action. -- nicod_ ___ liste: https://listes.rezo.net/mailman/listinfo/spip-dev doc: https://www.spip.net/ dev: https://core.spip.net/ irc://irc.freenode.net/spip