Flux rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

SQL Serveur-Conserver le 'path' ou le fichier

Car0, le jeudi 16 décembre 2004 à 17:58:19
Bonjour,

J'ai une application qui permet de publier des documents pour l'intranet. Ces documents sont alors disponibles pour tous les usagers de l'intranet. Certains utilisateurs me demandent maintenant la possibilité de protéger leur fichier par un mot de passe, pour qu'il soit accessible seulement à leur section par exemple. Et donc, me voilà en train de réfléchir à la manière d'implémenter une telle chose, si cela est possible, etc etc.

Question implémentation :
J'ai une bd SQL Serveur où je conserve le path pour accéder aux divers fichiers. Sauf les exécutables, n'importe quel type de fichier peut être téléchargés.

Le problème :
le path... bien ne reste qu'un simple path. Si le nom du fichier est connu, il est toujours possible de le taper directement dans la barre d'adresse et alors, peu importe le mot de passe qui aurait pu être ajouté.

Ma solution:
Conserver le fichier plutôt que le path dans la bd et ajouter un champ mot de passe.

J'ai pensé aussi aux utilitaires de certains logiciels qui permettent de sauver un document avec un mot de passe mais ce n'est pas assez général comme solution.


J'aimerais avoir des commentaires sur ma "solution". J'ai conscience que sauvegarder des fichiers plutôt que des paths est pas mal plus lourd sur la bd et aussi sur le temps de réponse mais je ne sais trop à quel point... Peut-être aussi que certains ont d'autres idées?

Merci!
Caroline
Répondre à Car0  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sebsauvage, le jeudi 16 décembre 2004 à 18:15:39
Conserver le fichier plutôt que le path dans la bd et ajouter un champ mot de passe.


ça me semble une bonne solution.

Les champs de type IMAGE dans SQL Server permettent de stocker des fichiers jusqu'à 2 Go.

Après il suffira de faire un CGI (ou autre (ASP, php, etc.)) qui renvoi (ou non) le fichier de la base en fonction des droits utilisateur.


Note que je te conseille vivement de bien penser ta gestion des utilisateurs.
- prévoir un site web pour gérer les utilisateurs ?
- prévoir des admins qui pourront administrer ces utilisateurs ?
- crééer des groupes d'utilisateurs ? (compta, logistique, etc.) afin de pouvoir donner des droits d'accès à des groupes de fichiers.
- droits en lecture seule, en lecture/écriture ?
- historique des modifications ?
- etc.


Enfin, ne jamais stocker directement les mots de passe en base.
Il ne faut stocker que le hash du mot de passe (par exemple un SHA-1 du mot de passe).

Ainsi si un développeur ou un utilisateur mal intentionné tombe par hasard sur la base de données, il ne pourra pas retrouver le mot de passe à partir du hash.
Répondre à sebsauvage

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Caro, le jeudi 16 décembre 2004 à 18:43:12
Merci sebsauvage.

Et merci pour tes autres conseils. En fait, la gestion des utilisateurs et l'application qui les gère (asp) existent déjà. L'application de publication de fichier n'est qu'une parmi un lot d'autres et les mesures dont tu parles ont déjà des standards d'implémentation(hé... et pas de hash. Les 20 ans d'expérience de mon supérieur contre mon tout rescent diplôme en programmation... ça fait pas le poid, même si j'ai essayé ;-)

Pour les autres qui lisent, y'a des fonctions sympa pour hasher un mot de passe sans passer par l'étude des types de crypto. Dans mysql: password(). Dans sqlserver: pwdencrypt() (quoique je suis tombé sur une étude "comment cracker les mdp de Sql server 2000... y'a peut-être mieux maintenant)

Caroline
Répondre à Caro

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
sebsauvage, le jeudi 16 décembre 2004 à 19:35:12
Les 20 ans d'expérience de mon supérieur

baha... :-(
C'est le genre d'argument qui me fait pouffer.
L'informatique actuelle n'a plus rien à voir avec ce qu'elle était il y a 20 ans, la sécurité informatique non plus !

Quand quelqu'un me sort ce genre d'argument, j'ai tendance à lui répondre: "Si tu crois que tu n'a plus rien à apprendre, c'est que tu es mort !".

Il devrait peut-être se documenter un peu, lire, par exemple "Applied cryptography".

Mébon... passons sur cet énervement passager.


Bon courage à toi.


(ça me rappelle un prof de Cobol, qui était arrivé en même temps que les murs de l'IUT (il y a 30 ans) et qui nous soutenais mordicus qu'on pouvait très bien faire le système de navigation d'un Rafale en Cobol.
Certes, mais ce n'est pas raisonnable.)
Répondre à sebsauvage

4


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
Car0, le vendredi 7 janvier 2005 à 16:46:07
Bonjour!
Pour ceux que ça intéresserait, j'ai trouvé une bien meilleure solution pour mettre en place ma sécurité sur les fichiers par mot de passe. Ça suppose simplement que tous les fichiers sont sous un répertoire racine et que ce répertoire ne contient pas de fichiers qui doivent pouvoir être accéder directement (ce qui était mon cas)

1- On bloque le répertoire racine en passant par IIS (pas d'accès en lecture)
=>Taper l'url directement dans la barre d'adresse donnera un acces denied.

2- et on crée une page asp qui va scanner le fichier en binaire et le renvoyer au client
=>Notre script a accès au fichier puisqu'il passe par le système de fichier de la machine "c:/...etc" et non pas par IIS.

En procédent ainsi, le client est obligé de passer par notre page asp, qui peut alors d'abord vérifier si un mot de passe est nécessaire.

Tant mieux si le script suivant peut aider quelqu'un.
Voici mon algorithme "en français":

1-Lire les paramètres (GET ou POST) "id du fichier" et "mot de passe" donné par l'usager

2-Interroger la base de donnée pour obtenir les infos sur le fichier demandé (on ajoute une clause WHERE ... AND motdepasse = "mot de passe" si un mot de passe a été donné par l'usager)

3.1-Si aucun document n'est trouvé, préparer l'affichage d'un message d'erreur "Fichier inexistant ou mot de passe invalide"

3.2-Autrement, si aucun mot de passe n'a été précisé mais qu'un mot de passe est requis (selon les infos sur le fichier), préparer l'affichage du formulaire "Veuillez entrer un mot de passe"

3.3-Autrement, préparer l'affichage du fichier

4.1-Si un message d'affichage a été préparé, l'afficher
4.2-Sinon envoyer le fichier

La partie un brin plus compliquée concerne la manière d'afficher le fichier (le 4.2). Il reste ensuite a appeler le script afficherpage.asp?fileid=x dans le href de la balise A plutôt que de mettre le path du fichier directement.

Pour 4.2:
'set filename plus haut

Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1 'adTypeBinary
objStream.LoadFromFile( filename ) 'filename correspond au chemin complet du fichier
	
Response.Expires = 0      'faire sûr que le buffer est prêt et VIDE
Response.Buffer = true
Response.Clear

Response.ContentType = getMime(filename) 'important! C'est ça qui permet au navigateur d'ouvrir le bon type d'application (de lancer Acrobat reader ou Word par exemple)
Response.BinaryWrite objStream.Read(-1)	'adReadAll = -1 'Le fichier
Response.End
objStream.Close	
set objStream = Nothing


Et la fonction getMime:
function getMime(filename)
    dim temp
    temp = Lcase (right(fileName, len(fileName) - InStrRev(fileName,".")))		'on lit les x derniers caracteres de la fin de la chaine jusqu'a la position du dernier ".", puis on convertie en minuscules
    select case temp
	case "doc" 		temp = "application/msword"
	case "mdb"		temp = "application/msaccess"
	case "pdf"		temp = "application/pdf"
	case "rtf"			temp = "application/rtf"
	case "xls"		temp = "application/x-msexcel"
	case "ppt"		temp = "application/x-mspowerpoint"
	case "wpd"		temp = "application/wpd"	'à confirmer
	case "wav"		temp = "audio/x-wav"
	case	"mp3"		temp = "audio/x-wav"	'à confirmer
	case "gif"			temp = "image/gif"
	case "jpeg", "jpg", "jpe"	temp = "image/jpeg"
	case "bmp"		temp = "image/bitmap"
	case "css"		temp = "text/css"
	case "htm", "html"		temp = "text/html"
	case "txt"		temp = "text/plain"
	case "xml"		temp = "text/xml"		
	case "msg"		temp = "text/html"		'à confirmer
	case "wmv", "avi"		temp = "video/x-msvideo"	'à confirmer
	case else temp = "text/html"		'inconnu
    end select
    getMime = temp
end function
Répondre à Car0

5


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 sebsauvage, le vendredi 7 janvier 2005 à 17:58:04
cette façon de faire me semble bonne question sécurité.
impec.
:-)
Répondre à sebsauvage
Excel et base de données SQL server (Résolu)Bonjour, Je souhaiterai apprendre à programmer en VBA depuis Excel pour aller en lecture/écriture dans une base de donnée SQL Serveur. Existe-t-il un tutorial, un site ou un livre qui me permettrait de me former. Je suis autodidacte en informatique...... www.commentcamarche.net/forum/affich-4444773-excel-et-base-de-donnees-sql-server
[VB .NET 2005] Lire les données de SQL Server (Résolu)Bonjour, Je développe une me permettant d'ajouter, de supprimer et de rechercher des éléments dans une base de données SQL Server. L'ajout des données est réalisé. Par contre la recherche de données et leur affichage m'échappe. Dans une... www.commentcamarche.net/forum/affich-2280156-vb-net-2005-lire-les-donnees-de-sql-server
Cours et exercices sql server (Résolu)Bonjour a tous alors je suis en penurie de cours et exercice sql server alors que j'aurai un controle cette semaine,et je vous demande si vous connaissez des site ou on propose des cours et des exo merci www.commentcamarche.net/forum/affich-4603394-cours-et-exercices-sql-server
Visual FoxPro et SQL-ServerVisual Foxpro 9 et SQL-Server 2005 Quoi de mieux que Visual FoxPro pour bien utiliser SQL-Server ? Voici une question intéressante ! Pour plus d'information voir l'article de Joël Post http://www.cyberfoxpro.com/joel et les fichiers... www.commentcamarche.net/faq/sujet-5347-visual-foxpro-et-sql-server
Connexion aux base de données SQL server (Résolu)Bonjour, Je suis débutant VBNET et je veux me connecter à une base de donnée SQL server. je crée à chaque fois un objet connection quand j'en ai besoin. j'aimerais savoir s'il n'y a pas un moyen pour créer l'objet, le rendre... www.commentcamarche.net/forum/affich-2425026-connexion-aux-base-de-donnees-sql-server
Erreur SQL Server Express 2005 (Résolu)Bonjour, Je suis en train de me battre depuis plusieurs heures pour installer SQL Server 2005 Express. Il y a quelques mois je l'avais désinstallé car j'en avais plus besoin. Maintenant je souhaite le réinstaller. Et pas moyen, il y a... www.commentcamarche.net/forum/affich-6534780-erreur-sql-server-express-2005
ASP - Implantation du code Un script ASP est un simple fichier texte contenant des instructions écrites à l'aide de caractères ASCII 7 bits (des caractères non accentués) stocké sur le serveur dans un fichier possédant l'extension .asp. Afin de permettre au serveur de... www.commentcamarche.net/asp/aspcode.php3
Toutes les réponses pour « SQL Serveur Conserver le 'path' ou le fichier »