Frage

Kennt jemand eine gute Praxis Medien für asp.net zu sichern?

Ich brauche eine Vielzahl von Medien zu hosten, die ein bestimmtes Bild / Video-Erlaubnis zu einer Ansicht benötigen. das heißt ein bestimmte Benutzer kann oder auch nicht die Erlaubnis, eine Mediendatei müssen sehen -. und diese Tatsache kann im laufenden Betrieb geändert werden

Ich interessiere mich nicht, wenn sie eine Mediendatei herunterladen können, die sie Zugriff haben, ich will sie einfach nicht einmal bewusst Elemente sein, die sie keinen Zugang haben.

Ich habe bereits als url Verschleierung -. Dies scheint mir ziemlich lahm

Ich habe Form authentifizierte Benutzer (und ich bin nicht bereit, dies zu ändern).

Ich möchte die Mediendatei Ordnerstruktur in keinem Zusammenhang mit Berechtigungen halten.

War es hilfreich?

Lösung

Erstellen Sie eine Httphandler, dass alle Medien zugegriffen werden muss, durch. Dann wird vor, um die Datei zu holen und sie nach unten an den Benutzer senden, können Sie Validierungen durchführen, die Sie möchten. Halten Sie alle Ihre Medien außerhalb des Haupt-wwwroot-Pfad oder verweigern den Zugriff auf diesen Ordner mit Berechtigungen.

Weitere Informationen zu diesem Thema finden Sie hier:

http://www.15seconds.com/Issue/020417.htm

Andere Tipps

Ich verwende eine XML-Datei wie diese, die Benutzer / Gruppen setzen Zugriff auf eine Datei

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root[
    <!ELEMENT file ANY>
    <!ATTLIST file name ID #REQUIRED>
]>
<root>
    <file name="file.doc" users="155,321" groups="grp5" />
    <file name="file2.doc" users="321" groups="" />
</root>

Dateien über http root gespeichert werden, so dass sie nicht von URL zugegriffen werden kann.

Wenn ein Benutzer GetFile.aspx zuzugreifen versucht? File = file.doc ich die XML laden, erhalten Sie die Zeile mit

XmlNode xnFile= XML.GetElementById(wantedFile);

, dann rufe ich eine Funktion

 HasAccess(Context.User, xnFile); 

Welche überprüft, ob der Benutzer angemeldet ist, und vergleicht die Berechtigungen, und ob es in Ordnung ist für diese Benutzer die Datei haben, las ich die Dateien von der Festplatte und schreibe sie aus mit

FileInfo thisFile = new FileInfo(secretLocation + wantedFile);
Response.Clear();
Response.Buffer = false;
Response.BufferOutput = false;
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Length", thisFile.Length.ToString());
Response.AddHeader("Content-disposition", "filename=" + thisFile.Name);
Response.ContentType = "application/none";
Response.WriteFile(secretLocation + wantedFile);
Response.Close();
Response.End();
Response.ClearContent();
Response.ClearHeaders();

Eigentlich habe ich jetzt mehr als tausend Dateien, und ich denke, die Dateidaten in die Datenbank zu schreiben, wie die XML zweimal in 5 Jahren beschädigt wurde, wahrscheinlich wegen Abstürzen oder gleichzeitige Verwendung.

Von Ihrem Kommentar in der Spikolynn Antwort

  

Ich bin verwirrt - wie ist das anders als Verschleierung? Würde ein authentifizierter Benutzer in der Lage sein, ein Bild zu teilen (was sie für berechtigt sind) mit einem anderen authentifizierte aber nicht autorisierten Benutzer?

Ich denke, dass Sie auf versuchen verhindern, dass unbefugte Sharing Medien .

Das ist etwas, was viele Unternehmen (Microsoft, Apple, IBM, etc.) haben beträchtliche Menge Geld setzen zu lösen. Die Lösung war DRM , und jetzt entfernen sie es, weil es ist fehlgeschlagen .

Also, meine Antwort ist, dass Sie auf kann Sharing nicht verhindern , wenn der Benutzer bereit ist, etwas Mühe zu geben, es zu vermeiden.

Sie können nur halten die ehrlich Leute ehrlich , indem Sie einige Techniken anwenden wie Spikolynn oder Lusid erklärt in ihren Antworten.

würde ich einen Tisch schlagen die Dateien hält, auf die jeder Benutzer Zugriff hat:

UserID int
FileID varchar

dann eine Tabelle für Ihre Dateien:

FileID    UniqueIdentifier
FileType  char(4)  <- so you know which extension to use.
etc...

Auf der Festplatte, benennen Sie die Datei der FileID (Unique) und der Dateityp (die Erweiterung, z. B. .jpg). Die fileID in der Berechtigungstabelle halten die Unique in der anderen Tabelle erzeugt werden.

Sie können mit relativer Sicherheit über die URL übergeben dies zu wissen, dass der Benutzer nicht in der Lage sein, den Namen einer anderen Datei zu erraten.

Update: Das ist, nebenbei gesagt, viel einfacher als ein Httphandler oder den Umgang mit Dateiberechtigungen zu schreiben. Während jedoch die Chancen, dass jemand einen anderen Dateinamen zu erraten unendlich sind, ist es nicht luftdicht Sicherheit als ein Benutzer einen anderen Zugriff auf die Datei geben kann.

brownpaperpackage.aspx? Id = {guid}

In dem Load-Ereignis von media.aspx, überprüfen Sie der Benutzer authentifiziert ist, überprüfen Sie dann der Benutzer das Recht, die Medien zu sehen ist, und wenn sie es tun, dann laden die Medien als Stream und ihn an die Antwort der Seite wie Spikolynn unter Beweis gestellt.

Warum tun es auf diese Weise? Seine einfach zu codieren und Sie erhalten alle Vorteile von ASP.NET und IIS‘Authentifizierungsdienste, von dem Sie den Benutzer auffordert, die Medien finden. Seine trivial für Ihre Medienobjekte, dass der Nutzer eine Zugriffsliste abzubilden. Und die Seite hat genau dort das Request-Objekt. Sie auch den Namen der Medien zu verstecken, so kann man nicht sagen, was aus der URL los ist.

Wie halten Sie Menschen aus Ihren Medien direkt zugreifen? Ihre Mediendateien können nicht in dem virtuellen II-Verzeichnis gespeichert werden. Wenn sie sind, gibt es eine Möglichkeit, dass sie direkt heruntergeladen werden können. Sie können sie in einer Datenbank als Byte-Array speichern (Klecks) oder sie außerhalb des Web-virtuellen Verzeichnisses auf der Festplatte speichern. Benutzer, die über ASP.NET gehen müssen die Dateien zugreifen

Wie halten Sie den Überblick über, was die Nutzer haben Zugang zu dem, was Medien? Sie behalten den Überblick über Ihre Benutzer Thorugh asp.net Mitgliedschaft. Das bedeutet, dass jeder Benutzer eine ID in der Tabelle aspnet_users hat. Erstellen Sie eine Tabelle für Ihre Medien mit einer ID und einem Dateinamen (oder einen Klecks der tatsächlichen Medien enthält). Dann brauchen Sie nur eine dritte Tabelle zu erstellen, die die beiden verbindet. Diese Tabelle würde ein Benutzer-ID enthalten und eine Medien-ID, den Benutzer bedeutet diese Medien anzeigen können. Mit der Benutzer-ID (von asp.net Mitgliedschaft) und der Medien-ID (aus der URL), die Sie brauchen nur zu

select count(*) from UserMedia where UserId = @UserGuid and MediaId = @MediaIdFromUrl

und wenn die Zählung> 0 kann der Benutzer die Medien anzuzeigen.

Ein Beispiel, wie Sie die URL verwenden würden:

<asp:image 
  runat="server" 
  ImageUrl="brownpaperpackage.aspx?id=53a2ea4(snip)76ca8b" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top