Magic quotes - Magic quotes
Magic citaten was een kenmerk van de PHP scripting taal , waarin strings automatisch ontsnapt -speciaal tekens worden voorafgegaan door een backslash -voor worden doorgegeven. Het werd ingevoerd om te helpen nieuwkomers schrijven functionerende SQL-commando's zonder manuele ontsnappen. Het werd later beschreven als bedoeld om te voorkomen dat onervaren ontwikkelaars van het schrijven van code die kwetsbaar was SQL-injectie aanvallen.
Deze functie werd officieel afgeschaft met ingang van PHP 5.3.0 en verwijderd in PHP 5.4, als gevolg van bezorgdheid over de veiligheid.
Concept
De huidige herziening van de PHP handleiding vermeldt dat de grondgedachte achter magic quotes was om "te helpen voorkomen [] code geschreven door beginners van het zijn gevaarlijk." Wel werd oorspronkelijk geïntroduceerd in PHP 2 als een php.h compile-time instelling voor msql, alleen ontsnappen enkele aanhalingstekens, "waardoor het makkelijker wordt om formulier gegevens direct door te geven aan queries mSQL". Het was oorspronkelijk bedoeld als een "handige functie, niet als [a] beveiligingsfunctie."
Het gebruik mogelijkheden voor magic quotes werd uitgebreid in PHP 3. Single aanhalingstekens, dubbele aanhalingstekens, backslashes en nultekens in alle door de gebruiker verstrekte gegevens hebben allemaal een backslash toegevoegd aan hen alvorens te worden doorgegeven aan het script in het $_GET, $_REQUEST, $_POSTen $_COOKIEglobale variabelen. Ontwikkelaars kunnen dan in theorie te gebruiken tekenreekssamenvoegingsoperator om veilige SQL-query's te bouwen met de gegevens van de gebruiker. (Dit was het meest nauwkeurig wanneer PHP 2 en PHP 3 huidige waren, omdat de primaire ondersteunde databases alleen toegestaan 1-byte tekensets.)
Kritiek
Magic citaten werden standaard ingeschakeld in nieuwe installaties van PHP 3 en 4, maar kan worden uitgeschakeld door de magic_quotes_gpc configuratie richtlijn. Aangezien de werking van de magie citaten was achter de schermen en niet meteen duidelijk, kunnen ontwikkelaars zich niet bewust van hun bestaan en de mogelijke problemen die ze konden introduceren zijn geweest. De PHP documentatie gewezen verschillende valkuilen en aanbevolen dat, ondanks het feit dat standaard ingeschakeld, moeten ze worden uitgeschakeld.
Problemen met magic quotes inbegrepen:
- Niet alle gegevens die door de gebruiker worden geleverd bestemd voor het inbrengen in een database. Zij kunnen direct worden weergegeven op het scherm, opgeslagen in een sessie, of als voorbeeld voor het opslaan. Dit kan resulteren in schuine strepen worden toegevoegd waar ze niet gewenst en worden getoond aan de eindgebruiker. Deze bug kruipt vaak in nog veel gebruikte software.
- Niet alle gegevens die worden geleverd door de gebruiker en wordt gebruikt in een database query worden rechtstreeks verkregen uit bronnen beschermd door magic quotes. Zo kan een gebruiker opgegeven waarde worden ingevoegd in een databank beschermd bij toverslag citaten en later opgehaald uit de database en gebruikt in een daaropvolgende databasebewerking. De laatste toepassing wordt niet beschermd door magic quotes, en een naïeve programmeur gebruikt om een beroep op hen kan zich niet bewust van de noodzaak om expliciet te beschermen.
- Magic quotes ook de generieke functionaliteit van PHP te gebruiken
addslashes()functie, die niet Unicode-aware en is nog steeds onderworpen aan SQL injection kwetsbaarheden in een aantal multi-byte teken-coderingen. Databasespecifieke functies zoalsmysql_real_escape_string()of, indien mogelijk, bereid queries met gebonden parameters, de voorkeur. - Hoewel veel database management systemen voor ondersteuning citaten ontsnapt met een backslash, de standaard vraagt eigenlijk voor het gebruik van een ander citaat. Magic citaten bieden geen bescherming voor databases niet ingesteld om te ontsnappen aan offertes met een backslash te ondersteunen.
- Draagbaarheid is een probleem als een aanvraag wordt gecodeerd met de veronderstelling dat magic quotes zijn ingeschakeld en wordt vervolgens verplaatst naar een server waar ze zijn uitgeschakeld, of vice versa.
- Het toevoegen van magic quotes en vervolgens het verwijderen van hen in voorkomend geval loopt een kleine, maar onnodig veel van de prestaties overhead.
- Magic citaten bieden geen bescherming tegen andere veel voorkomende beveiligingsproblemen zoals cross-site scripting aanvallen of SMTP header injectie -aanvallen.
In november 2005 besloot de kern PHP ontwikkelaars die als gevolg van deze problemen, de magic quotes zijn voorzien zouden worden van PHP 6. verwijderd Wanneer ontwikkeling van PHP 6 tot stilstand gekomen en de ontwikkeling voortgezet op de 5.x tak in plaats daarvan werd de functie deprecated in PHP 5.3. 0 en verwijderd 5.4.
andere benaderingen
- Sommige talen zoals Perl en Ruby kiezen voor een aanpak waarbij data bederf , waar de gegevens van niet-vertrouwde bronnen, zoals de input van de gebruiker, worden beschouwd als "besmet" en kan niet worden gebruikt voor gevaarlijke operaties, totdat expliciet gemarkeerd als betrouwbaar, meestal na validatie of coderen . Sinds de bouw van SQL-query's in deze context "gevaarlijk" wordt beschouwd, dit dwingt de programmeur om het probleem aan te pakken. Smet werpen op het probleem niet op te lossen, maar het doet markeren die gevallen waar sprake is van een probleem, zodat de programmeur in staat is om ze op de juiste wijze op te lossen.
- Joel Spolsky heeft voorgesteld met behulp van een vorm van Hongaarse notatie die aangeeft of de gegevens zijn veilig of onveilig is.
- Modern database engines en bibliotheken gebruiken geparametriseerde queries afzonderlijk gegevens door te geven aan de database van SQL-commando's, sterk verminderen van de noodzaak om gegevens te ontsnappen voordat de bouw van de queries.