[ASP.Net] Request.WriteFile und tiff

flyingsaucer

Cadet 2nd Year
Registriert
Aug. 2005
Beiträge
21
hi,
ich hab eine kleine aspx - Seite die im Page_Load mit folgender Funktion mir einen Download - Dialog erzeugt, ohne das der User sieht woher die Datei stammt. Sprich die Seite öffnet sich, schließt sich wieder und der Dialog erscheint. Geht wunderbar, nur nicht für .tif (.tiff) Da bleibt das IE - Fenster geöffnet (IE6, dafür ist die Seite auch gedacht) und jeder kann in der URL den Pfad der Datei sehen, was ja gerade vermieden werden soll. Also der Download klappt natürlich trotzdem wunderbar. Alle anderen bild, text und was weiß ich- formate klappén auch super, nur tif nicht.

Hilfe?!

Schon mal Danke für eure Antworten.

cu

string filepath = Request.QueryString["file"];

filepath = Server.UrlDecode(filepath);

System.IO.FileInfo download = new FileInfo(filepath);

Response.Clear();

Response.AddHeader("Content-Disposition", "attachment; filename=" + download.Name);

Response.AddHeader("Content-Length", download.Length.ToString());

Response.ContentType = "application/octet-stream";

Response.WriteFile(download.FullName);

Response.End();
 
Hiho

Was heisst schützen für Dich? Was genau willst du mit dem Schutz erreichen?

Für mich gibt Dein Vorhaben sowieso keinen grossen Sinn. So wie das codiert ist, kannst Du ja wirklich gleich einen Link zur Datei machen!

Du solltest folgendermassen vorgehen um den direkten Dateizugriff zu schützen:
1.
geschütztes Verzeichnis anlegen, damit keiner direkt Dateien daraus klauen kann. Dateien in dieses Verzeichnis legen
2.
Die aspx Seite nicht mit dem kompletten FilePfad, sondern nur mit dem Dateiname aufrufen
3.
Die aspx Seite alleine darf die Datei nun aus dem Verzeichnis holen und dem Client streamen.

code:

string filename = Request.QueryString["filename"];
string secureDir = "C:\MySecureDir\";

filepath = secureDir + filename;


Mit diesem Code bist Du insofern sicher, dass keiner Dateien direkt "klaut". Du weisst zumindest, dass absolut jeder Download immer über diese Seite erfolgt. Allerdings kann natürlich direkt auf die aspx verlinkt werden und man kommt an die Datei. Du wirst um eine autorisierung (Login) nicht umhinkommen. Ein Link zu "verstecken" kann immer mal schief gehen...
 
darum gehts doch gar nicht. ich hab schon nen grund warum ich das so mache, keine angst :rolleyes: und warum sollte das nicht schon mal relativ sicher vor neugierigen blicken sein?! schließlich wäre der pfad NIRGENDWO sichtbar wenn sich das blöde IE - Fenster schließen würde :(

zur erklärung: ich bastel bloß ein download - popup für ein fertiges system. Da hab ich nun absolut keinen einfluss mehr drauf wie, wo, was, wann :D NUR der popup

der dateizugriff ist ja sicher ;) (code oben sollte nur mein Problem verdeutlichen) muss trotzdem nicht jeder sehen was passiert
 
Zuletzt bearbeitet:
Ich habe um gar nichts angst, dachte nur, dass Dir vielleicht die eine oder andere Anregung wieterhilft. Nehme an, deshalb hast Du auch hier gepostet.

Dass es ein Download sein soll, das habe ich erkannt.
 
ne is ok, war ja nicht böse gemeint :) danke für deine antwort, ist aber wie gesagt leider nicht das wonach ich suche
 
Ok, ich wollte durchscheinen lassen, dass noch mehr Infos nötig sind um einen besseren Tipp abgeben zu können.

Ich nehm an es geht darum, auch nicht zu erkennen wie der Link auf die aspx geht.

Wie sieht denn der Code aus? Schliesst Du denn den PopUp wider mit JS, oder wie? Ich versteh den Ablauf noch nicht ganz...

Poste doch mal den Link der das PopUp öffnet und dann die komplette aspx die im PopUp erscheint.
 
äääh sry. code kann ich leider nicht posten, aber hier ne kleine erläuterung:

also im groben: popup listet alle filenames in einer tabelle auf(nur namen ohne pfad). komplette filenames in einem js-array im head gespeichert. neben files in der tabelle jeweils ein link zur funktion "download" der der index der jeweiligen datei im array übergeben wird(javascript:download(1) zb), und die mit window.open("bla.aspx?file=" + escape(file[index])) das neue popup öffnet, das den download - dialog erzeugt.

es gibt eine datenbank in der für jeden file die benutzgruppen gespeichert sind. beim öffnen des popups wird also geprüft ob die in der session gespeicherte benutzgruppe mit der der datenbank übereinstimmt. wenn nicht pech gehabt, wenns ja startet der dialog. das kann nicht umgangen werden.

das problem ist nun wie schon beschrieben: läuft ja alles super. nur bei tif - files erscheint der download - dialog, das IE - fenster bleibt dummerweise aber geöffnet. man sieht in der url den file - parameter. damit kann der nutzer nicht viel anfangen, wie gesagt für sicherheit ist gesorgt. aber 1. siehts blöde aus. 2. wird der user nur verwirrt. und 3. will ich persönlich wissen warum das so ist :D

da als response ja gleich der datenstream geschickt wird hat der IE doch gar nix zum anzeigen, warum versucht er es bei tiff trotzdem?
 
Zuletzt bearbeitet:
Jetzt ist es etwas klarer. Ja das ist komisch, octed stream sollte wirklich immer ein Download anbieten und die Seite in Ruhe lassen. :freak:


Du könnstest es vielleicht mal über einen anderen Filestream versuchen, ansonsten habe ich auch keine Idee...

Response.BinaryWrite(file);
 
hmmm, habs nun auch mal schnell mit binarywrite getestet. genau das selbe :D

irgendwie akzeptiert der IE den octetstream nicht vollständig bei gängigen bildformaten. scheint bei jpg das selbe zu sein
 
flyingsaucer schrieb:
hi,
Alle anderen bild, text und was weiß ich- formate klappén auch super, nur tif nicht.
Ich erinnere Dich an Dein Post oben! :cool_alt:

Du hast geschrieben alle Bildformate... welche denn nun wirklich? Denn je nach PlugIn installationen kann es doch sein, dass der Browser versucht die Datei selbst anzuzeigen.

Ich habe ein Paar Stunden in ein ähnliches Programm gesteckt, das jedoch war genau umgekert: es sollte nach Möglichkeit _kein_ Downloadfenster aufgehen, sondern die Datei Inline im Browser anzeigen. Die Erfahrungen waren die, dass der IE je nach Version und Betr.S. mal das und dann mal was anderes macht.

Vielleicht findest Du einen Workaround, der funktioniert dann wahrscheinlich bis zum nächsten Update von Win oder IE :evillol:

kaepten
 
ja ok, auf jpg kam ich noch nicht ^_^ hab nur psd, eps und so ein paar sachen bis jetzt benötigt :D tiff war das letzte

find ich schon das psd und eps gängig sind, oder? ^_^

ok, jedenfalls danke für deine unterstützung. Dann bleibt dieses scheiß fenster halt erstmal. man hat j auch wichtigere ding ezu tun ^_^

cu
 
Zuletzt bearbeitet:
Gängig schon, aber auf den Client-Rechnern gibts wohl keine PlugIn, die in der Lage sind, diese Dateien inline anzuzeigen - oder eine App aufzurufen.

Von daher kann es wirklich sein, dass Du mehr an dem Problem scheiterst, das der Browser für bekannte Dateien das Fenster offen lassen wird.

Also beispielsweise eps, psd, exe, bin, dll ... werden ohne Fenster zum Download angeboten, tiff, jpg, gif, png, pdf ... kommt das Fenster, weil der Browser in der Regel mit diesen Dateien etwas anfangen kann.
 
Zurück
Oben