PHP is een van de populairste programmeertalen voor het web. Het helpt ontwikkelaars bij het programmeren van de beste applicaties en het creëren van nieuwe benchmarks in mobiele en webontwikkeling. De grootste zorg bij het ontwikkelen van een PHP-applicatie is echter de beveiliging, waardoor het ontwikkelen van beveiligde PHP-applicaties een grote uitdaging is, vooral voor amateurs. In dit artikel geven we je 3 belangrijke tips waarmee je een aantal veelvoorkomende valkuilen in de PHP beveiliging en ontwikkeling kunt vermijden.
Tip1: Een goede foutenrapportage is een must
Het rapporteren van toepassingsfouten is erg nuttig tijdens het ontwikkelingsproces. Foutrapporten helpen je niet alleen bij het vinden van spelfouten in de variabelen, maar ook bij het opsporen van onjuist functiegebruik.
Echter, zodra de website live gaat, kan dezelfde rapportage die u tijdens de ontwikkeling hielp, zich tegen de veiligheid van uw applicatie keren door de gebruikers veel meer over uw website te vertellen dan u misschien wilt dat ze weten (bijvoorbeeld de informatie met betrekking tot de software die wordt uitgevoerd en de mapstructuur etc.). Voordat de website live gaat, moet je ervoor zorgen dat je al deze fouten verwijdert om dergelijke gevoelige informatie verborgen te houden. Dit kan worden gedaan door de volgende regels in onze applicaties te schrijven.
fout_rapportage(0);
Als er nog steeds fouten optreden, vinden we het nog steeds nodig om hiervan op de hoogte te blijven. Dus moeten we ervoor zorgen dat al onze fouten worden gelogd in een beveiligd bestand, wat kan worden gedaan met behulp van een PHP-functie genaamd set_error_handler.
Tip 2: Het is aan te raden om functies van PHP uit te schakelen die niet langer worden gebruikt
Vanaf de begindagen van PHP hebben de ontwerpers van PHP regelmatig functies toegevoegd die bedoeld waren om het ontwikkelen gemakkelijker te maken. Of dat dachten ze tenminste! Sommige van deze zogenaamd nuttige functies kunnen echter ook ongewenste gevolgen hebben. We noemen deze functies "slechte functies", omdat ze gegevensvalidatie mogelijk maken en een pad vormen voor bugs om hun weg te vinden in scripts. Dit is de reden waarom we je aanraden om sommige van deze functies uit te schakelen als een van de eerste dingen die je moet doen op het moment dat je begint met het ontwikkelproces.
Opmerking: Deze functies kunnen al dan niet uitgeschakeld zijn voor uw website, afhankelijk van uw host. Als je op je eigen computer of een andere vergelijkbare lokale omgeving ontwikkelt, dan zijn deze functies waarschijnlijk niet uitgeschakeld. Sommige van deze functies zijn geëlimineerd in PHP6, maar zijn nog steeds aanwezig in PHP4-applicaties en worden uiteindelijk niet meer gebruikt vanaf PHP5-applicaties.
Globals registreren (register_globals)
register_globals was in principe bedoeld voor snelle applicatieontwikkeling met een querystring. De register_globals statement geeft ons toegang tot de waarde met $var in plaats van $_GET['var'] automatisch. Dit klinkt misschien nuttig voor ons, maar helaas bevatten alle variabelen in de code nu deze eigenschap, dus het is nu gemakkelijk om in PHP-toepassingen te komen die niet beschermen tegen dergelijke ongewenste gevolgen. Het onderstaande codefragment is slechts een veelvoorkomend voorbeeld dat we in PHP-scripts tegenkomen:
if( !empty( $_POST['gebruikersnaam'] ) && $_POST['gebruikersnaam'] == "test" && !empty( $_POST['wachtwoord'] ) && $_POST['wachtwoord'] == "test123" )
{
$access = true;
}
Als de applicatie draait met register_globals AAN, kan een gebruiker gewoon access=1 in een querystring plaatsen, en heeft dan toegang tot wat het script draait.Het is niet mogelijk om register_globals uit te schakelen vanaf de scriptkant (met ini_set, zoals in het normale geval), maar een .htaccess-bestand kan worden gebruikt om dit te doen. Daarnaast staan sommige hosts ons toe om ook een php.ini bestand op de server te hebben om dit te doen.
Uitschakelen met .htaccess
php_flag register_globals 0
Uitschakelen met php.ini
register_globals = Uit
Opgemerkt moet worden dat als we van plan zijn om een aangepast php.ini bestand te gebruiken dat niet van toepassing is op de hele server, we ervoor moeten zorgen om deze declaraties op te nemen in elke submap met PHP.
Tip 3: Houd Cross Site Scripting (XSS)-aanvallen in de gaten bij gebruikersinvoer
Een webapplicatie neemt over het algemeen invoer van de gebruikers om deze uiteindelijk in de een of andere vorm weer te geven. Dit kan een van de meest uiteenlopende vormen zijn, zoals commentaar, blogberichten of threads, die allemaal in principe in de vorm van HTML-code zijn. Het is echter opmerkelijk dat het riskant kan zijn voor je applicatie om HTML toe te staan bij het accepteren van invoer, omdat dit veel ruimte laat voor JavaScript om uitgevoerd te worden op een van de vele onverwachte manieren. Hierdoor kunnen zelfs de cookies gemakkelijk worden gekaapt als er zelfs maar iets heel kleins onbeheerd blijft. De kapers kunnen deze cookiegegevens dan gemakkelijk gebruiken om een echt account na te maken en illegale toegang te krijgen tot de gegevens van je website. Je kunt je website beschermen tegen dergelijke aanvallen door HTML helemaal uit te schakelen, waardoor JavaScript uiteindelijk ook niet meer kan worden uitgevoerd. Dit is echter niet altijd een haalbare optie, omdat dit ook de opmaak volledig uitschakelt, wat misschien niet mogelijk is om zonder te doen, vooral in het geval van een blog of een forum.
Om dit probleem op te lossen, kun je HTML grotendeels uitschakelen, op enkele eenvoudige opmaak na. Dit kun je bereiken door slechts een beperkt aantal HTML-tags (zonder attributen) toe te staan, bijvoorbeeld "strong" tag of "em" tag. Of gewoon een paar populaire tags zoals "BBCode" of "BB Tags" die vaak worden geschreven op forums in het formaat [b]test[/b]. De BBCode kan ook worden geïmplementeerd met bestaande pakketten zoals HTML_BBCodeParser of door onze eigen BBCode-implementatie te schrijven met reguliere expressies en een reeks 'preg_replace'-statements.
Referentie: http://www.sks.com.np/basic-security-vulnerabilities-in-php-code/
Als toonaangevend PHP ontwikkelingsbedrijf , Carmatec biedt end-to-end PHP ontwikkeling oplossingen op basis van geavanceerde technologie, zowel front-end als back-end. Naast een eigentijdse stijl en design werken we eraan om interfaces eenvoudig en gebruiksvriendelijk te houden. Gebruiksgemak is ons doel, zelfs bij complexe websitefunctionaliteiten.