[ASP.NET / IIS] Probleem met download script

Pagina: 1
Acties:

  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 08-08 17:31
Ik het een download script geschreven die eerst een formulier laat invullen en daarna een bestand streamt van de webserver. De bestanden staan niet in een map die direct van internet te benaderen is vandaar zo'n script.
Het bestand wordt opgezocht door de regels:

Dim pad As String = "c:\inetpub\downloads\" & strRequest
Dim file As System.IO.FileInfo = New System.IO.FileInfo(pad)

En later verstuurd door:
Response.AddHeader("Content-Disposition", "attachment; filename=" & file.Name)
Response.AddHeader("Content-Length", file.Length.ToString())
Response.ContentType = "application/octet-stream"
Response.WriteFile(file.FullName)

Werkt perfect, alleen ik bedacht me dat je nu ook /bestand.aspx?bestand=../../autoexec.bat kunt doen en vervolgens de autoexec.bat van de webserver kunt downloaden. Is natuurlijk wel helemaal in de Microsoft gedachte ;) maar het ik kan het niet op m'n geweten hebben om zoiets aan een klant te geven.

Nu zat ik te denken of het niet mogelijk was om het path uit te lezen van file. Dus als iemand het script aanroept met ../../autoexec.bat dat ik zie dat het path C:\ is. Zodat ik een vergelijking kan maken zoals:
if "c:\inetpub\downloads\" <> filePath then niks doen

Ik hoop dat iemand me kan helpen, alvast bedankt

Verwijderd

Het lijkt me dat je gewoon niet wil dat een user een pad + filename kan opgeven. Laat hem daarom bijv. een file id meesturen, waarbij binnen jouw code uit een tabel het pad naar de juiste file wordt opgehaald, en het wordt verstuurd.

Edit:
In dit geval is het ook makkkelijk een rechtensysteem te bouwen, waarbij users onder bepaalde voorwaarden wel of geen rechten bepaalde bestande te downloaden.

[ Voor 27% gewijzigd door Verwijderd op 09-01-2003 13:20 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je kunt het beste bepalen welke bestanden toegestaan zijn om te downloaden, en vervolgens wanneer het bestand gelezen wordt op regel 2, kijken of de FullName van het bestand 1 van de toegestane bestanden is. Eventueel kun je dit in een database stoppen ofzo.

Maar als je dan toch met een database gaat werken, is het imo sowieso handiger om het bestand met een ID aan te roepen ipv de bestandsnaam. ID's kun je iig weinig wijs uit worden, en je weet zeker dat er enkel bestanden uit de database gedownload gaan worden.

(database kan in dit geval natuurlijk ook prima een textbestandje zijn).

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 08-08 17:31
Bedankt voor de tips :)

Wat ik overigens ook vreemd vind is dat IUSR_ANONYMOUS in principe totaal geen leesrechten heeft op de root van bijvoorbeeld de C: schijf. Waarom kan ik dan wel een bestand uitlezen. Zou dit kunnen komen doordat ik zelf al ben ingelogd op het domein waar de testomgeving draait??

Of heb ik met 6 regeltjes code de complete beveiliging van Windows NT misleid ?? :?
Dit lijkt me toch niet, ik weet dat windows veel lekjes heeft, maar dat het zo simpel is kan toch niet ??

[ Voor 25% gewijzigd door wustenveld op 09-01-2003 13:42 ]


Verwijderd

Dat ligt idd aan je domain account.

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 10:10
Je ASP.Net-pagina's draaien overigens ook onder het account "{machinename}\ASPNET".

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

move -> WOS
offtopic:
weinig nog met programming te maken... WOS modforce, "the power to change the topictitle, i sense in you" ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Buzzman
  • Registratie: Juni 2000
  • Niet online
subject f1x0r3d :P

Je zou idd eens moeten kijken naar de ASPNET usert.. :)

  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 08-08 17:31
Ik heb de aspnet user gevonden, en die zit in de groep gebruikers vandaar dat je dus van alles kunt openen op de server. Ik heb nog even gezocht op internet wat de aspnet user zo ie zo moet kunnen openen maar kon weinig zinnigs vinden. Ik heb overigens m'n code aangepast, het is nu zo geworden:

Dim download_dir = "c:\inetpub\downloads\"
Dim pad As String = download_dir & strRequest
Dim file As System.IO.FileInfo = New System.IO.FileInfo(pad)

If file.Exists Then
Dim director as String
Dim director3 as String
Dim hacker as String
hacker = "nee"
Dim director2
director = file.DirectoryName
director2 = split(director,"\")

IF director2.length >= 3 THEN
director3 = director2(0) & "\" & director2(1) & "\" & director2(2) & "\"
IF director3 <> download_dir THEN
hacker = "ja"
END IF
ELSE
hacker = "ja"
END IF

IF hacker = "ja" THEN
Response.Write("<H1>FOUT</H1><P>U probeert een ongeoorloofde actie uit!
<BR>Indien u van mening bent niks verkeerds doet stuur dan een mail naar <a
href='mailto:info@avensus.nl'>info@avensus.nl</a></P>")
Response.End
END IF

Nu checkt dus eerst of de gekozen download wel in de map inetpub/downloads voorkomt. Dit werkt op zich wel, maar een oplossing met de NT security lijkt me beter (ben ik tenminste niet verantwoordelijk als er toch iemand binnenkomt ;) ). Weet iemand toevallig wat de ASPNET user moet kunnen benaderen op de server ??
Pagina: 1