15. maj 2007 - 12:42Der 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?
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.
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
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.
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?
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.
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)
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.
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
Å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.
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.
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.
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
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...
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.
Synes godt om
Ny brugerNybegynder
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.