Avatar billede tma Juniormester
15. maj 2007 - 12:42 Der er 23 kommentarer og
1 løsning

Beskyttelse af filer

Hej
Jeg har lavet en simpel side hvor brugere kan logge på og følge med i nogle af vores aktiviteter. Data læses fra SQL database efter vellykket logon. I de data der læses er blandt andet et filnavn som bliver omdannet til et link som brugeren kan trykke på, og dermed se et dokument (tif eller pdf). Det fungerer alt sammen fint nok, og brugeren kan umiddelbart kun se sine egne filer. Problemet jeg nu har konstateret er, at hvis en person "gætter" på hvad en fil hedder, f.eks. 8.tif, så kan han loade dette dokument uden at have foretaget logon. Linket er altså tilgængeligt uden logon, blot man angiver https://osv...

Hvordan kan jeg beskytte dokumenterne, så de kun kan ses via logon?
Avatar billede fennec Nybegynder
15. maj 2007 - 13:07 #1
Det gøres via stream download. Kan gøres via komponenter indbygget i ASp, man også via upload/download komponenter. Kunne kun find eks på det sidste:
http://www.aspupload.com/manual_misc.html

Filerne kan så placeres uden for www mappen (f.esk c:\webFiler), men hentes frem via en ASP-side som har et logintjek.
Avatar billede fennec Nybegynder
15. maj 2007 - 13:09 #2
Fandt et eks på Stream (standardkomponent i ASP):
http://activedeveloper.dk/artikler/default.asp?articleid=321
Avatar billede tma Juniormester
15. maj 2007 - 13:23 #3
Pyha, ser lidt heavy ud. Jeg skal lige have lidt tid til at skrue det sammen, men umiddelbart er det jo netop min problemstilling.
Jeg vender lige tilbage.
Torben
Avatar billede fennec Nybegynder
15. maj 2007 - 13:39 #4
Er det din egen server eller en udbyders??
Hvis det er en udbyders skal du sikre dig at du har en skjult mappe. Det kunne f.eks være en database mappe. Har du ikke en sådan mappe, kan du ikke gøre dette.
Avatar billede tma Juniormester
15. maj 2007 - 13:43 #5
Det er min egen server. Skal mappen være skjult? Eller er det blot ønskeligt. Kan jeg godt referere til en mappen som ikke ligger direkte som undermapper til webstedet?
Avatar billede fennec Nybegynder
15. maj 2007 - 13:56 #6
Mappen behøver ikke være skjult. Den skal bare ikke ligge i din wwwRoot mappe. Smid den i Inetpub mappen. Også skal du have givet IUSR_Maskinnavn læse/skrive rettighed hertil.
Avatar billede meltinis Nybegynder
21. maj 2007 - 23:31 #7
Jeg benytter denne metode, men den virker tilsyneladende ikke i IE 7.0 - er der andre der har problemer med dette? (Og undskyld jeg lige kommer brasende ind)
Avatar billede fennec Nybegynder
22. maj 2007 - 08:20 #8
meltinis >>
Så er det fordi din IE ikke er sat rigtig op. Begge script jeg har linket til, kører serverside og har intet med browseren at gøre. Det eneste de gør, er at send data binært, og det har man gjort siden IE 1.0.

Nu har jeg ikke selv IE 7.0, men det har min arbejdskolega, og han har ikke raporteret problemer med at modtage filer.
Avatar billede meltinis Nybegynder
22. maj 2007 - 09:33 #9
Okay. Men jeg kan jo ikke rigtig styre hvordan folk har sat deres IE er sat op. Men derudover så har jeg prøvet det på fire forskellige maskiner, to med IE 6.X (kan ikke lige huske hvad nummer) og to med IE 7.0 - begge med samme resultat: IE 6.X ingen problemer, men fejler i IE 7.0
Avatar billede meltinis Nybegynder
22. maj 2007 - 09:37 #10
Hvor fejler betyder at den kommer med downloadboksen, men filen er på 0 KB - altså tom!
Avatar billede meltinis Nybegynder
22. maj 2007 - 09:42 #11
ÅHHHHH!! Jeg har fundet fejlen. I mit script var der følgende linie:
Response.AddHeader "Content-Length", strFileSize
Men strFileSize bliver ikke sat noget sted. IE 7.0 er åbenbart mere følsom over for dette. Efter at have fjernet denne linie fungerer det uden problemer. Hvis du vil have pont så sig til så opretter jeg et andet spg.
Avatar billede fennec Nybegynder
22. maj 2007 - 09:55 #12
Det er ligemeget. Er her for at hjælpe. Skal bare have point nok til at bibeholde mit pro medlemskab, og det skal jeg nok nå alligevel :o)
Avatar billede meltinis Nybegynder
22. maj 2007 - 10:12 #13
Jamen så takker jeg for hjælpen :)
Avatar billede tma Juniormester
23. maj 2007 - 14:56 #14
OK, I lyder sgu meget kloge, så jeg vil være så fræk lige at bede om et forslag på denne nuance af problemstillingen:
Når jeg nu henter data som viser et link til brugeren, hvordan integrerer jeg dette forslag ind i det datatræk? Brugeren skal vel stadig have linket vist? Og når man trykker på linket loades filen...
Jeg kører et recordsæt igennem, hvori jeg på et tidspunkt har:
if not isnull(RS("Link")) and rs("Link") <> "" then       
response.write "</td><td><a href='docs\"
response.write rs("Link")
response.write("' target='_blank'>Link</a>")
response.write "</td></TR>"
else
response.write "</td><td></td></TR>"
end if

Har I et godt forslag til, hvordan jeg kan smelte de to ting sammen? Jeg kan godt se, at dette bliver løsningen, så du må gerne ligge et svar.
Avatar billede fennec Nybegynder
23. maj 2007 - 15:16 #15
Med de angivet scripts, er det en ASP fil som starter downloaden. Dine links skal altså se ud ala dette:
<a href="downloadFile.asp?file=filNavn.doc">

Din kode bliver altså:
if not isnull(RS("Link")) and rs("Link") <> "" then
  response.write "</td><td><a href='downloadFile.asp?file="& rs("Link") &"' target='_blank'>Link</a></td></TR>")
else
  response.write "</td><td></td></TR>"
end if

Du skal så have lavet en asp side som hedder downloadFile.asp, om indeholder koden fra et af eks jeg gav dig.
Avatar billede tma Juniormester
23. maj 2007 - 15:41 #16
Hej igen fennec...

Jeg må gøre noget galt. Umiddelbart virker det fint nok. Jeg kan logge på, klikke på mit link og hente eller gemme filen. Men hvis jeg efterfølgene alene indtaster det komplette link, f.eks. https://<servernavn>/<sitenavn>/ShowFile.asp?file=21.tif
Så kan jeg også loade filen, dvs. uden at gå igennem logon først

Gør jeg noget forkert?
Avatar billede fennec Nybegynder
23. maj 2007 - 15:55 #17
Har du indbygget et sessiontjek først på siden??

Du skal desuden lukke ALLE browser vinduer, inden du kan tjekke url'en, da den ellers husker session.
Avatar billede tma Juniormester
23. maj 2007 - 15:58 #18
Hov, skylder måske lige at sige at jeg bruger en anden login, end den der er vist i eksemplet.
Jeg bruger et setup med en session-styring. Det må da være den jeg mangler at flette ind. Jeg checker lige...
Avatar billede tma Juniormester
23. maj 2007 - 16:01 #19
He he, kan se at du også lurede den...

Nu kører det. Jeg havde ikke session-kontrol på min showfile.asp, det har jeg nu og alt spiller. Tak for hjælpen.

Hilsen Torben
Avatar billede fennec Nybegynder
23. maj 2007 - 16:02 #20
Ja, du mangler sikkert en kode ala:

if session("logidIn") <> true then
  response.redirect("login.asp")
end if
Avatar billede fennec Nybegynder
23. maj 2007 - 16:02 #21
Du så det selv :o)

.o) <-- One Eyed Jack
Avatar billede tma Juniormester
24. maj 2007 - 11:01 #22
Jeg har forsøgt at linke til pdf uden held. Er det en lille detalje jeg mangler?

MIMEType = Right(FileName, 4)
select case MIMEType
case ".doc" Response.ContentType = "application/msword"
case ".jpg" Response.ContentType = "image/jpg"
case ".gif" Response.ContentType = "image/gif"
case ".pdf" Response.ContentType = "application/pdf"
case else Response.ContentType = "image/jpg" ' Default
end select

Jeg kan se i min streng at filnavnet kommer fint nok med over (slutter på pdf)
Ideer?
Avatar billede fennec Nybegynder
24. maj 2007 - 11:23 #23
Er det evt sådan at filnavnet er xx.PDF (med store bogstaver)??
Prøv at sætte det til lowcase:

MIMEType = lCase(Right(FileName, 4))
Avatar billede tma Juniormester
29. maj 2007 - 08:40 #24
Det der var galt var at jeg havde et statisk filnavn. Når extension ikke var korrekt her, kunne det rigtige program ikke åbne. Jeg har nu ændret til:
Response.AddHeader "content-disposition", "attachment;filename=" & FileName

Det gør ikke så meget, at selve filnavnet vises, da de bare hedder 2.pdf, 3.gif osv.
Jeg kunne også have skjult det ved at en variabel fik værdien i select-blokken, således at det altid bare hedder filnavn.pdf, filnavn.gif osv., det har jeg ikke helt taget stilling til endnu.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester