UTF-8 , php, webben, och Windows filsystem.

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
MadModder
Co Admin
Inlägg: 29990
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

UTF-8 , php, webben, och Windows filsystem.

Inlägg av MadModder »

Har ett formulär i ett php-script där man väljer ämne från en rullgardin och skriver ett meddelande.
Ämnena innehåller å, ä och ö.
Detta postas till en annan fil.
Alla filer är UTF-8.
Ämnet blir en del av ett filnamn som sparas på servern, och visas korrekt när man kollar filerna lokalt.
Men den del av filnamnet som är hårdkodat i PHP-scriptet blir inte korrekt, utan måste genomgå en utf8_decode() först för att visa de nationella bokstäverna rätt i filnamnet.

Sker det en omkodning automatiskt på de tecken som skickas via HTTP?
Ser inte annars hur de postade bokstäverna kan bli rätt utan en utf8_decode().
Användarvisningsbild
mrfrenzy
Co Admin
Inlägg: 14850
Blev medlem: 16 april 2006, 17:04:10

Re: UTF-8 , php, webben, och Windows filsystem.

Inlägg av mrfrenzy »

Det är verkligen extremt osannolikt, ovanligt, udda att man behöver använda användarens input för att skapa ett filnamn. Har man en applikation som kräver det måste man verkligen ha stenkoll på vad som händer i hela processen.

Över huvudtaget bör man undvika att köra operationer på systemet eller filer med funktioner som har användarinput.

Mera vanligt är att man skapar en ny post i en tabell för varje fil som laddas upp, primärnyckeln är ett automatgenererat numeriskt id och detta använder man som filnamn. Sedan kan man spara alla övriga data i andra kolumner. Ska någon senare ladda ner samma fil och behöver ha det önskade filnamnet så kan det ändras dynamiskt innan man skickar filen till webbläsaren.
Användarvisningsbild
MadModder
Co Admin
Inlägg: 29990
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Re: UTF-8 , php, webben, och Windows filsystem.

Inlägg av MadModder »

Det må så vara att det är ovanligt.
Men det är storlekskontroll samt preg_replace så jag bara får kvar alfanumeriska tecken, så det är ingen fara på det viset, och det är bara jag som kan läsa filerna.

Och nyss slutade det funka av sig själv på de postade variablerna också så jag måste koda om alla. Haha!
De måste ha varit ISO-8859 ändå på nåt vis...
Användarvisningsbild
MadModder
Co Admin
Inlägg: 29990
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Re: UTF-8 , php, webben, och Windows filsystem.

Inlägg av MadModder »

Nu när jag fått igång mailen från PHP så behövs inget filsparande alls där. Så då var det löst till det bättre. :D
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: UTF-8 , php, webben, och Windows filsystem.

Inlägg av johano »

mrfrenzy skrev:Det är verkligen extremt osannolikt, ovanligt, udda att man behöver använda användarens input för att skapa ett filnamn. Har man en applikation som kräver det måste man verkligen ha stenkoll på vad som händer i hela processen.

Över huvudtaget bör man undvika att köra operationer på systemet eller filer med funktioner som har användarinput.

Mera vanligt är att man skapar en ny post i en tabell för varje fil som laddas upp, primärnyckeln är ett automatgenererat numeriskt id och detta använder man som filnamn. Sedan kan man spara alla övriga data i andra kolumner. Ska någon senare ladda ner samma fil och behöver ha det önskade filnamnet så kan det ändras dynamiskt innan man skickar filen till webbläsaren.
+2miljoner på den
jpalsson
Inlägg: 143
Blev medlem: 20 juli 2012, 13:14:41

Re: UTF-8 , php, webben, och Windows filsystem.

Inlägg av jpalsson »

Kan också rekommendera att man inte refererar till filer med autoincrementerande tal (lätt att enumrera i ett skadligt skript) utan istället
använder krypterade strängar eller för den delen GUID:ar.

En annan sak man kan göra är att streama ut alla filer, dvs. istället för

Kod: Markera allt

https://www.exempel.com/assets/6dc121da-f7e3-4b77-951c-6a4d06270294.png
så kör man istället:

Kod: Markera allt

https://www.exempel.com/functions/sendfile?6dc121da-f7e3-4b77-951c-6a4d06270294
På så sätt behöver man inte exponera hela mediamappen till omvärlden.
johano
Inlägg: 1943
Blev medlem: 22 januari 2008, 10:07:45
Ort: Stockholm

Re: UTF-8 , php, webben, och Windows filsystem.

Inlägg av johano »

Exakt.

Och vill man ändå ha fördelen av att låta webbservern sköta själva "filskickandet" (som ju är lämpligt när det gäller statiska filer)
kan man använda headern "X-Accel-Redirect", åtminstone om man kör NGinx. Det finns antagligen något motsvarande för
andra webservrar.

Principen är att ditt script tolkar inkommande sträng, avgör om den ska få läsas & skickar en "pekare" till den verkliga filen till
NGinx som sedan sköter om streamandet av data ner till klienten.

Väldigt smidigt!

/j
Skriv svar