webForumDet fria alternativet

Filuppladdning utanför www_rooten

ASP

4 svar · 313 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Tja
Laddar upp filer med AspUpload till en filarea på en hemsida.
Nu är det så att filerna inte ska kunna nås av vem som helst, utan endast för inloggade personer med "rätt" behörighet.

I nuläget sparar jag filnamn osv. i en databas, ur vilken jag hämtar de filer som en viss person ska kunna komma åt.

Har tänkt lite på det här och kommit fram till att det inte är jättesäkert, skulle eg. vilja spara filerna utanför www_rooten.

Problemet är då att jag inte har en aning om hur jag ska kunna kalla på dom, i det skede den inloggade ska öppna filen.
Det kanske finns smidigare lösningar på det här, kanske skapa ett slumpa filnamn med blandade tecken och ha som filnamn och därigenom göra det svårare att gissa till sig filnamnen.

Hur tycker ni som kan det här att jag ska lösa det?

Tack!

Medlem sedan jan. 2003438 inlägg
#2

Nu vet jag inte om detta är någon större hjälp men.... Du har inte möjlighet att få detta från webhotellet. Alltså att det sätts lösenord på en mapp, om jag inte är helt ute och cyklar så kan man det t ex hos loopia.

Utan att veta riktigt vad du är ute efter så kommer du inte åt filerna genom att gå ett steg bakåt i din path?

<%
Dim rootname, fso, folder
rootname = server.mappath("../")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(rootname)

Response.Write "<UL>" &  GetSubFolders(folder) & "</UL>"

function GetSubFolders(pfolder)
    Dim sFolders, fldr, fil
    sFolders = "<LI>" & pfolder.Name

  '  If pfolder.SubFolders.Count > 0 Or pfolder.Files.Count > 0 Then _
  '      sFolders = sFolders & "<UL>"

   ' For Each fldr In pfolder.SubFolders
   '     sFolders = sFolders & GetSubFolders(fldr)
   ' Next
    
    For Each fil In pfolder.Files
        sFolders = sFolders & "<LI><a href='" & fil.Name & "'>" & fil.Name & "</a></LI>"
    Next
    
    If pfolder.SubFolders.Count > 0 Or pfolder.Files.Count > 0 Then _
        sFolders = sFolders & "</UL>"
    
    sFolders = sFolders & "</LI>"

    Set fil = Nothing
    Set fldr = Nothing
    
    GetSubFolders = sFolders
End function
%>

Läste om ditt inlägg, kollar inte riktigt idag. Har kudden kvar i ansiktet idag.... :) Men är det olika människor med olika behörighet till olika filer? Om det är så skulle det väl gå att koppla delar av filnamnet till deras unika id, typ id12_filnr25.jpg

Medlem sedan feb. 20034 441 inlägg
#3

Tja
Har kollat igenom din kod ovan lite snabbt och det ser ju riktigt bra ut.
Jag var inte heller människa imorse när jag skrev tråden, men kort och gott kommer det gå till så att admin lägger upp kategorier som ska kopplas till olika användargrupper. Löser man det på ditt sätt, skulle man kunna skapa en nu katalog för en viss anv. grupp och sedan spara filerna där inuti.

Jag har tänkt mig att spara filnamn, storlek, filtyp osv. i en databas (vilket jag eg. redan gör) och sen lista alla de filer som just den användaren har tillgång till.

Sedan ska ju alla dessa filer listas, som jag skulle vilja ha utanför webrooten. Jag ska mecka lite till och sen vad jag kommer fram till.
Kom gärna med fler tips och förslag. Tack!

Medlem sedan juni 20003 076 inlägg
#4

jag tycker inte att du ska lägga filerna utanför rooten!
jag skulle iallafall inte göra det.
det ställer bara till det för webbhotellet samt det blir svårare att länka till dem i din kod.

mitt förslag är att istället kryptera filnamnen i mapparna med en funktion enligt nedan och sedan spara det krypterade filnamnet i databasen tillsammans med det vanliga filnamnet.

Public Function CryptString(ByRef StringLen)
	Dim Characters, arrCharacters, str, i, intCharacter

	Randomize

	Characters = "A,B,C,D,E,F,G,H,I,J,K,L,M,n,o,p,q,r,s,t,u,v,w,x,y,z," & _
				 "0,1,2,3,4,5,6,7,8,9,N,O,P,Q,R,S,T,U,V,W,X,Y,Z," & _
				 "a,b,c,d,e,f,g,h,i,j,k,l,m"

	arrCharacters = Split(Characters, ",")

	For i = 1 To StringLen
		intCharacter = CInt(RND * UBound(arrCharacters))
		str = str & arrCharacters(intCharacter)
	Next

	CryptString = str
End Function

använd den sedan så här

Filename = CryptString(32)

och så har du fått en sträng på 32 tecken!

filen i mappen kommer då att heta tex:
wer5jfsue9473jfjdheurig8vgjt8563.pdf

Medlem sedan feb. 20034 441 inlägg
#5

Jo, jag har redan en funktion för att skapa sådana filnamn som jag använder på annat håll på sidan.

Det var så jag tänkte för från början, då jag kom på att man kanske kunde lösa det på ett smidigare sätt.

Men jag gör såhär istället, tack för hjälpen!

275 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)