Golf_MK1 Geplaatst: 14 december 2013 Rapport Geplaatst: 14 december 2013 Ik heb een heel eenvoudige website gemaakt waar ik op een snelle en eenvoudige manier veel foto's kan uploaden, maar ik ben niet helemaal mee op het vlak van beveiliging... Wat ik heb: een upload scriptje (in PHP) waarmee ik meerdere afbeeldingen tegelijk kan uploaden naar de server en dat daarnaast toelaat een onderwerp in te geven. Wat er gebeurt: de afbeeldingen worden hernoemd aan de hand van de ingegeven naam en de benodigde informatie wordt in een database gezet (dmv SQL). Op de website zelf wordt deze informatie weer opgehaald uit de database en zo worden de afbeeldingen weergegeven. Zoals jullie merken is dit heel basic, maar het bespaart me wel veel tijd bij het uploaden van veel afbeeldingen. Mijn vragen: * is het nodig om hier enige beveiliging toe te passen? * is het veilig genoeg om het upload-script gewoon op de server te zetten, of kan ik dit ook beveiligen? (Een login-systeem maak ik liever niet, lijkt me wat overdreven omdat ikzelf de enige ben die het upload-script zou gebruiken) Uiteraard heb ik al het nodige opzoekwerk gedaan, maar ik heb helaas geen eenduidig antwoord gevonden. De meeste website's spreken over het beveiligen wanneer er gebruik wordt gemaakt van INSERT, voor een forum bijvoorbeeld. Alvast bedankt voor de hulp! Reageren
Sublime Geplaatst: 14 december 2013 Rapport Geplaatst: 14 december 2013 (bewerkt) In dit geval gaat het over beveiliging op programmeurs niveau. Ik heb een lijstje met punten opgesteld, maar om zeker te zijn of je script veilig is zou je toch eens iets moeten laten zien. - PHP scripts van het internet zijn vaak onveilig omdat de personen die ze maken hobbyisten zijn. - Heb je een MySQL username en wachtwoord ingesteld? Zo nee, zorg ervoor dat je database alleen lokaal beschikbaar is. - Zorg dat je op de nieuwste PHP en webserver draait, fixes komen vaak alleen voor security issues. En nog wat punten specifiek over je script: - Is er beveiliging tegen SQL injectie (bv het gebruik van named parameters ipv een string waar je alle parameters zelf ingooit) - Houd je rekening met de extensie van een file? Is het mogelijk "image.php" te uploaden? - Staan alle afbeeldingen in een map waar PHP volledig uitgeschakeld is? (aan te raden) - Hoe controleer je een file? Op basis van de naam "image.jpg" of via de headers in het bestand? als je via de naam checked heb je kans dat je 1) geen echte afbeelding toelaat maar dit kan in directe zin geen kwaad. 2) nullbyte aanval wordt uitgevoerd. Dit is een een image die "file.php %00 .jpg" wordt genoemd. Dit kan je een malifide filenaam noemen omdat bij een normale string check je script denkt dat het een jpg is terwijl als deze in het filesystem wordt opgeslagen het een .php file wordt, die dan uitgevoerd kan worden als PHP in die map aanstaat. - Houdt altijd rekening met XSS (cross site scripting). echo niet zomaar input parameters zonder te weten dat alle HTML/JS eruit is gefilterd. Het is mogelijk om een upload script op je server te zetten, maar je moet niet zomaar de URL naar het script naar iedereen gaan sturen want dan gaat Google het indexeren. Tevens loopt Google Chrome ook stiekem al jouw bezochte URLs door te spitten dus voor de veiligheid zou je er tenminste een HTTP Auth voor kunnen zetten. Ik weet niet welke webserver je gebruikt, maar als je een beetje zoekt naar "HTTP BASIC AUTH" kan je al aardig ver komen. Bewerkt: 14 december 2013 door Sublime Reageren
Golf_MK1 Geplaatst: 14 december 2013 Auteur Rapport Geplaatst: 14 december 2013 (bewerkt) Bedankt voor het uitgebreide antwoord! Ik heb het script wel volledig zelf geschreven, maar om eerlijk te zijn weinig rekening gehouden met de beveiliging, net omdat ik daar te weinig van op de hoogte ben... Nog even ter verduidelijking: het is de bedoeling dat ik en ik alleen het script zal gebruiken, dus kan je mij uitleggen waarom ik rekening moet houden met SQL injectie en die controle van de bestandsnaam? (Ik controleer inderdaad enkel via de naam, omdat ikzelf geen slechte bedoelingen heb natuurlijk) De rest van de tips: bedankt, hier kan ik zeker iets mee! Maar als ik er nu zo bij nadenk, al die beveiliging die nodig is bij dergelijke scripts, is er geen manier om dit alles offline uit te voeren en dan alles te uploaden zonder een database nodig te hebben? Dat zou het veel eenvoudiger maken en vooral veiliger denk ik... Met andere woorden hoe zou jij dit aanpakken? Bewerkt: 14 december 2013 door Golf_MK1 Reageren
Sublime Geplaatst: 15 december 2013 Rapport Geplaatst: 15 december 2013 Voor persoonlijk gebruik zou ik gewoon HTTP BASIC AUTH gebruiken (Dat is dat venstertje met username en password die je soms op websites krijgt voordat je er in kan). Het is niet zo veilig als HTTPS maar de kans is alsnog klein dat er iemand die gegevens kan afluisteren. Maak een mysql account aan die alleen toegang heeft op die database, dan is de impact in iedergeval minimaal als het fout gaat. ALs ik zelf een upload script moest schrijven zou ik uit luiheid mysql achterwegen laten. Ik zou een map /uploads/ aanmaken waarin PHP uitstaat. Een form die het mogelijk maakt een image te uploaden, controle check of het een image is (http://www.binarytides.com/php-check-if-file-is-an-image/). Daarna sla ik de image met de volgende naam op: md5(microtime()) . $extension. Als je dan bijvoorbeeld een lijstje met alle afbeeldingen wil kan je gewoon met php de folder doorlopen. Als je Mysql gebruikt is het wel efficienter, maar voor één persoon is dat niet echt nodig. Reageren
Golf_MK1 Geplaatst: 15 december 2013 Auteur Rapport Geplaatst: 15 december 2013 Wederom bedankt voor de nuttige reactie! Echt fijn om hier zo goed geholpen te worden! Die laatste manier lijkt me eigenlijk nog de beste, zo heb ik geen gedoe met beveiliging van de database enzo... Ik ga me daar eens in verdiepen, denk dat ik met beperkte aanpassingen mijn upload-script kan hergebruiken en voor de veiligheid zou ik het gewoon offline uitvoeren en de afbeeldingen handmatig uploaden via ftp. Zo is het iets meer werk, maar dan ben ik wel zeker dat het veilig is! Reageren
Recommended Posts
Een reactie plaatsen
Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.