Re: [spip-dev] Accès restreint : protection des documents HS

2020-05-15 Par sujet nicod_

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

2020-05-09 Par sujet nicod_

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

2020-05-08 Par sujet RastaPopoulos
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

2020-05-08 Par sujet nicod_

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

2020-05-08 Par sujet nicod_

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

2020-05-07 Par sujet nicod_

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

2020-05-07 Par sujet nicod_
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

2020-05-07 Par sujet nicod_

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

2020-05-07 Par sujet pierre laszczak
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

2020-05-06 Par sujet RastaPopoulos
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

2020-05-06 Par sujet Cerdic

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

2020-05-06 Par sujet nicod_
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

2020-05-06 Par sujet nicod_

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