Just nu i M3-nätverket
Jump to content

auto_prepend för alla filtyper


Gurra4

Recommended Posts

Jag vill ha en auto_prepend_file som körs innan ALLA filer som begärs från servern, inte bara .php eller vad man nu har satt upp i httpd.conf .

Är detta möjligt? Jag vill ha något som utför autentiserings-koll innan t.ex. bilder hämtas osv, och vill slippa lägga in kod för detta "lite här och lite där".

Link to comment
Share on other sites

Det enda sättet att lösa detta på är att i din .htacces eller httpd.conf fil lägga in en "AddType application/x-httpd-php .filändelse" för varje filtyp du vill att PHP ska exekvera.

Tänk på att PHP då komemr att läsa igenom hela filen efter möjlig PHP-kod, vilket slöar ned din server en hel del om du överför stora filer.

 

Den lösningen du söker är absolut inte någon bra sådan.

 

Istället bör du lägga filer användarna inte ska komma åt utan inloggning utanför webb-roten, och med ett skript kontrollera om användaren får ladda ned filen, och sedan skicka ut huvuden med content-type och content-length, samt läsa in hela filen med fpassthru().

Om du har ett skript som heter dl.php exempelvis, så skicka användaren till dl.php?fil=bild.gif

 

I dl.php har du sedan:

header(...);

header(...);

$fp = fopen("../../bilder/" . $_REQUEST["fil"]); // Så du kommer utanför webbroten, och till den katalog där filerna finns.

fpassthru($fp);

 

Link to comment
Share on other sites

Ett tips som du kan använda istället för att köra php för varje fil är att använda http autentisering. Då sköter servern själv autentiseringen vilket jag själv hade gjort om jag ville skydda alla filer inklusive bilder i en webroot.

 

I vissa fall hade jag oxå gjort som Cariad beskriver, men inte om du vill skydda allt. Läs mer om http autentisering för apache här: http://httpd.apache.org/docs/howto/auth.html

 

Link to comment
Share on other sites

Hmm, jo. Det var så jag hade först. men sedan ville jag att besökarna skulle slippa logga in vid andra besöket. Visst, man kan spara lösenordet för http authentication i browsern, men det blir inte lika snyggt eller smidigt tycker jag. Därför beslöt jag mig för att basera autentiseringen på kakor.

Det är ju synd att det inte finns någon koppling mellan http authentication och php. Alltså så att Apache först kör ett skript som avgör om besökaren är godkänd. Sedan meddelar skriptet Apache om http Authentication ska bifallas eller inte.

 

Link to comment
Share on other sites

Ditt slutliga förslag är faktiskt det som jag använder nu. Det är bara det att jag tycker det känns en aning osäkert. Därför att som sagt det bygger ju på att jag "kommer ihåg" att anropa autentiserings-skriptet i ett antal filer. Så risken finns ju att man någonstans råkar kommentera ut denna kod eller liknande. Bättre vore om koden fanns på ett enda ställe, du kunde man hålla kolla på det enklare.

Hmm, kanske kan lämna in en request-for-enhancement om detta till php...

 

Link to comment
Share on other sites

Jag har förresten haft ett problem med att använda <a href="dll.php?fil=abc.php"> .

Jag vill ju gärna ha filnamnen på disken innehållande mellanslag och åäö. Jag skriver in url-en i html-texten precis som den ser ut på disken. Sedan omvandlar ju webbläsaren t.ex. mellanrum till %20 så det som skickas till skriptet blir ...fil=min%20fil

Jag vet inte hur man via php omvandlar denna sträng tillbaks till "vanlig" text. Nån som vet?

För utan att omvandla så kommer det inte gå att hämta filen.

 

Link to comment
Share on other sites

Nu tycker jag att du inte riktigt ser helheten här.

Allt du vill ha, och kunna göra, finns faktiskt redan så det finns absolut ingen anledning att lämna in en "request-for-enhancement".

 

Du ställer vissa orimliga krav tycker jag. Det skriptet jag skrev ovan är säkert nog, men sedan säger du att du använder kakor. Dessa är din största säkerhetsbrist.

 

Du måste ju avgöra vad du vill uppnå med din inloggning, samt hur känslig information man kan komma åt genom att "bryta" sig in (vilket alltid går på ett eller annat sätt).

 

Säkerhet och bekvämlighet går inte att blanda i lika doser, och du måste därför avgöra om du vill ha kakor, eller inloggning för var besök.

 

Se denna länk för exempel hur du kan göra HTTP autenciering med PHP. Kombinera sedan detta med kakor, och du har löst problemet.

http://se.php.net/manual/en/features.http-auth.php

 

Så risken finns ju att man någonstans råkar kommentera ut denna kod eller liknande.
Dålig programmering är aldrig en ursäkt. Om man ska göra något säkert måste man ha full koll på sin kod. Se därför till att kommentera den ordentligt.

Lägg all autencieringskod i en separat fil och inkludera denna med require().

Om du använder auto_prepend får du inte lägre någon överblick av systemet, och jag rekommenderar därför ej detta.

 

Det bästa är trots allt att använda sig av två skript, ett för att hämta sidor, och ett för att hämta bilder/data. På så sätt behöver du bara ha koden på två ställen (med require(), ett).

 

Du kan ju också använda dig av mod_rewrite i Apache, som skriver om adresserna till ett skript, så att besökaren inte ser att det är ett skript de anropar.

 

Link to comment
Share on other sites

När du skriver ut länken använd följande:

$fil = "filnamn med mellandslag och åäö.doc";
echo "<a href=\"skript.php?fil=" . rawurlencode($fil) . "\">Länk</a>";

 

När du vill använda dig av variabeln i skriptet skript.php:

echo $_REQUEST["fil"];

Den har då omvandlat texten tillbaka till riktig "svenska" automatiskt. Du kan också använda rawurldecode() för detta.

 

Link to comment
Share on other sites

Hmm, varför är kakor en dålig säkerhetslösning?

Är det för att de lätt kan "stjälas" från användarens hårddisk?

En fördel med kakor är ju att man kan ändra autentiserings-strängen mellan varje inloggning, utan att besökaren behöver bry sig om detta.

Skulle vilja veta varför kakor inte är bra, det ligger ju i mitt intresse... :)

 

Link to comment
Share on other sites

Jag antar att du bara sparar ett sessionsid hos användaren, och resten på servern.

Då är det ju bara att "kidnappa" användarens sessionsid, och vipps, så är man inloggad. Man bör därför även räkna ut ett hash-värde och spara IP-adressen.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...