Forum: Rails France Protéger un document créé avec papercl ip

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
4f81c4625f783336298267bb2dcfc8e3?d=identicon&s=25 Tranquiliste (Guest)
on 2008-12-08 22:56
(Received via mailing list)
Bonjour,

J'utilise paper clip pour gérer des documents associés à un model et à
un controleur archive.
Déclaration paperclip se fait comme suit on y associe :document
class Archive < ActiveRecord::Base
  has_attached_file :document, :styles => {:original =>
'450x450>',:thumb => ['48x48>', :jpg] },
    :winy_thumbnail => true
...

Ces documents sont accessibles en fontion du profil de l'utilisateur
(admin, modérateur, ...).
Je sais gérer l'accès au model/table archive au travers de mon
controleur et d'un before_filter, pour éviter qu'en tapant l'url
l'utilisateur ait accès à une archive à laquelle il n'a pas droit mais
comment faire de même pour document associé à cette archive qui a une
URL du type
http://localhost:3000/documents/5/original/DSC_167...


Merci
Nicolas
047a4fc673336a70a6b58338bc6d677d?d=identicon&s=25 Michel Belleville (Guest)
on 2008-12-09 00:05
(Received via mailing list)
En trois étapes :

   1. ne pas stocker les documents dans le répertoire "public" mais dans
un
   répertoire de ton choix (tu as le droit de le créer pour l'occasion),
   paperclip te permet de stocker les documents où tu veux
   2. faire un contrôleur qui va gérer l'accès aux documents, avec une
   méthode show qui envoie en brut les données du fichier avec un type
mime
   idoine dans les headers uniquement si l'utilisateur y a accès
   3. pour que tous les navigateurs reçoivent correctement les fichiers
en
   tant que fichiers, l'idéal est de faire des liens vers des urls qui
se
   terminent comme un nom de fichier du bon type

Voilà, reste plus qu'à.


--
Michel Belleville
4f81c4625f783336298267bb2dcfc8e3?d=identicon&s=25 Tranquiliste (Guest)
on 2008-12-09 10:49
(Received via mailing list)
Bonjour Michel,

Merci de ta réponse, pour envoyer les fichiers tu utilises send_file,
c'est ça?

Nicolas

On Dec 9, 12:04 am, "Michel Belleville" <michel.bellevi...@gmail.com>
2d49805fbc99dd2d82935006dd6d675a?d=identicon&s=25 Alban Peignier (Guest)
on 2008-12-09 13:11
(Received via mailing list)
Bonjour,

Tranquiliste wrote:
> Merci de ta réponse, pour envoyer les fichiers tu utilises send_file,
> c'est ça?

send_file en effet.

Si les downloads sont importants (nombreux, gros, ...), il y a moyen de
passer par X-Sendfile : http://john.guen.in/rdoc/x_send_file/
--
Alban Peignier - alban.peignier@free.fr
http://people.tryphon.org/~alban
Be1e3ee645d23c95ba650c21bc885927?d=identicon&s=25 Fabien Jakimowicz (Guest)
on 2008-12-09 13:14
(Received via mailing list)
On Tue, Dec 9, 2008 at 13:10, Alban Peignier <alban.peignier@gmail.com>
wrote:
> passer par X-Sendfile : http://john.guen.in/rdoc/x_send_file/
Je préfère utiliser un système avec une string contenant du random
pour le répertoire de stockage du fichier ainsi que des liens
symboliques. Ca permet de ne pas passer par la stack rails et avec un
ttl assez faible pour les liens symboliques on conserve une assez
bonne sécurité.

--
http://fabien.jakimowicz.com
4f81c4625f783336298267bb2dcfc8e3?d=identicon&s=25 Tranquiliste (Guest)
on 2008-12-09 14:13
(Received via mailing list)
Merci à tous,

Le problème c'est que cette solution repose sur le mod apache
xsendfile et  mon hébergeur ne l'a pas installé pour l'instant.

Fabien, tu peux me donner un exemple de la façon dont tu génères tes
répertoires avec paper clip, c'est peut être une solution temporaire.

Merci
059ed46172a087063ce26250e44c8627?d=identicon&s=25 Fernando Perez (fernando)
on 2008-12-09 21:09
> send_file en effet.
>
> Si les downloads sont importants (nombreux, gros, ...), il y a moyen de
> passer par X-Sendfile : http://john.guen.in/rdoc/x_send_file/
> --
> Alban Peignier - alban.peignier@free.fr
> http://people.tryphon.org/~alban

Hmm, mais avec X-Sendfile, ça bloque le processus Rails durant l'envoie
de fichier non?

Sur notre site de video à la demande http://www.digiprof.fr, nous
protégeons notre contenu numérique en utilisant X-Accel-Redirect proposé
par Nginx. Sinon la solution du string random est toute indiquée (c'est
comme ça qu'imageshack.us fonctionne au passage) surtout si vous
utilisez un mutualisé qui n'a pas Nginx ni le module apache requis.
4f81c4625f783336298267bb2dcfc8e3?d=identicon&s=25 Tranquiliste (Guest)
on 2008-12-10 10:40
(Received via mailing list)
Bonjour,

Merci de ces précisions. Juste des questions de béotien:

1- Si j'utilise le string random avec mes dossier dans /public/ , cela
va empêcher à des utilisateurs lamda de taper au hasard des URLs et
d'accèder trop facilement à des documents auxquels ils n'ont pas
accès, mais ça n'empêchera pas des robots de les trouver et de les
afficher? Renseigner le robot.txt suffit il dans ce cas?

2- Si je ne met pas mes documents dans /public alors dans ce cas les
documents ne sont pas accessibles via une URL et il faut que j'utilise
une solution à base de "send_file" (ou équivalent.

Est ce que j'ai bien compris?
Be1e3ee645d23c95ba650c21bc885927?d=identicon&s=25 Fabien Jakimowicz (Guest)
on 2008-12-10 10:47
(Received via mailing list)
2008/12/10 Tranquiliste <nicolas.aguttes@googlemail.com>:
>
> Bonjour,
>
> Merci de ces précisions. Juste des questions de béotien:
>
> 1- Si j'utilise le string random avec mes dossier dans /public/ , cela
> va empêcher à des utilisateurs lamda de taper au hasard des URLs et
> d'accèder trop facilement à des documents auxquels ils n'ont pas
> accès, mais ça n'empêchera pas des robots de les trouver et de les
> afficher? Renseigner le robot.txt suffit il dans ce cas?

Si ton serveur web est bien configuré, personne ne devrait pouvoir
accéder aux fichiers publics sans avoir l'url. Et si ta string random
est assez longue, ca ne devrait pas être facilement attaque sans se
faire voir.

>
> 2- Si je ne met pas mes documents dans /public alors dans ce cas les
> documents ne sont pas accessibles via une URL et il faut que j'utilise
> une solution à base de "send_file" (ou équivalent.

Oui, il ne sont pas accessible par le serveur web qui par défaut
n'hostera que le contenu de public en tant que contenu statique.

--
http://fabien.jakimowicz.com
059ed46172a087063ce26250e44c8627?d=identicon&s=25 Fernando Perez (fernando)
on 2008-12-10 13:10
> 1- Si j'utilise le string random avec mes dossier dans /public/ , cela
> va emp�cher � des utilisateurs lamda de taper au hasard des URLs et
> d'acc�der trop facilement � des documents auxquels ils n'ont pas
> acc�s, mais �a n'emp�chera pas des robots de les trouver et de les
> afficher? Renseigner le robot.txt suffit il dans ce cas?
Un robot va suivre des liens pour arriver aux ressources stockées sur
ton serveur. Si aucun lien ne pointe vers tes resources privées, un
robot ne pourra pas les trouver facilement, à moins de faire un brute
force en testant toutes les url possibles et imaginables, donc il
laissera tomber.

Il faut bricoler avec SHA1:
require 'digest/sha1'
secret_string = Digest::SHA1.hexdigest('mon_fichier') + "mon_fichier"

Tu vas voir que ça génère une chaîne de caractère tellement longue que
ça dissuadera n'importe qui. Attention SH1 ne garantie pas l'unicité du
résultat, donc c'est pour ça que j'ai rajouté le nom du fichier en plus,
tu peux rajouter une date, tronque le nom du fichier.
This topic is locked and can not be replied to.