Posts Tagged ‘php’

PHP 7.1 uitgegeven

dinsdag, december 6th, 2016

Inmiddels is PHP versie 7.1 alweer uitgegeven. In deze nieuwe minor update zijn de verschillende return types van een functie uitgebreid. Zo is het mogelijk om nu mogelijk in PHP om een functie geen return type te laten teruggeven met void zoals ook in vele andere programmeertalen het geval is. Ook is de Eval(is Evil 😉 ) optie in de functie’s mb_ereg_replace() en mb_eregi_replace() nu als verouderd aangemerkt. Als laatste wordt de mcrypt extensie voor PHP uitgefaseerd in plaats daarvan kun je de OpenSSL functies gebruiken.

PHP 7.0 uitgegeven

woensdag, december 9th, 2015

php_custom_logoEr is een nieuwe major versie van de populaire PHP taal uitgegeven. De major versie is van 5.x naar 7.0 gegaan als stabiele versie nummer.
De 6.x versie van PHP heeft wel bestaan maar er is nooit een stabiele, algemeen beschikbare versie van uitgegeven omdat het vooral gebruikt werd om mee te experimenteren met o.a. unicode ondersteuning (al sinds 2005). Enkele mogelijkheden zijn uiteindelijk aan PHP versie 5.3, 5.4, 5.5 en 5.6 is toegevoegd.
Nu wordt dus versie 7.0 uitgegeven. Een belangrijke vernieuwing is in PHP 7.0 is de mogelijkheid om return datatypes op te geven. Nieuwere versie’s van PHP bieden vaker strong typing mogelijkheden omdat strong typing o.a. sneller is. Ook zijn verschillende nieuwe operators aan PHP 7 toegevoegd waaronder: de null coalescing operator en de spaceship operator. Ook is het nu mogelijk net als Java en C# anonieme klasses aanmaken dit kan in PHP 7 met de new class keywords. Daarnaast bevat PHP 7.0 nu de random_bytes en random_int functies voor een cryptografische veilige pseudo random generator(in tegen stelling tot rand en mt_rand die niet cryptografische veilige zijn) en deze functies zijn niet afhankelijk van openssl(de openssl_random_pseudo_bytes functie).
Zie de lijst met nieuwe features van PHP 7.0.

Nieuwe PHP versie 5.5

woensdag, juli 24th, 2013

Er is een nieuwe minor versie van PHP uitgegeven.elaPHPant
Onder andere nieuw aan deze versie is dat het veilig password hashing nu eenvoudig gemaakt wordt door de functie password_hash etc. in de programmeer taal op te nemen. Voor PHP 5.3 en PHP 5.4 is er een classes beschikbaar genaamd password_compat om deze hashing functie’s te kunnen gebruiken zonder meteen PHP te moeten upgraden. De password_hash functie maakt standaard gebruik van het blowfish algoritme om hashes op te slaan. Blowfish is in tegenstelling tot de algemene md5/sha1/2 functie exponentieel lastiger bij het uitvoeren van meerdere rondes met het algoritme. Hiermee is het vertragen (key streching) tegen het snel kraken van de hashes steeds exponentieel lastiger bij toevoegen van een ronde. Ook heeft blowfish in tegenstelling tot de algemene hash functies bij meerdere rondes hogere vereiste werkgeheugen nodig waardoor het lastig is blowfish op geoptimaliseerde hardware te gebruiken.
Verder heeft PHP nu een ingebouwde opcacher. Een opacher zorgt ervoor dat een php bestand gecompileert direct opnieuw uit het geheugen uitgevoert kan worden. In PHP 5.5 is nu de Zend OPcache in PHP 5.5 opgenomen. Deze opcacher is iets sneller dan APC of xcache opcacher die al als PHP extensie beschikbaar zijn. Maar de Zend OPcache biedt geen extra API voor variabelen in het werkgeheugen op te staan. Om de ingebouwde zend opcacher in PHP 5.5 te gebruiken moet opcache.enable=On aan de PHP configuratie toegevoegd worden.
Verder maakt PHP 5.5 de beveiling iets gemakkelijker zo is nu bijvoorbeeld standaard de optie ENT_QUOTES in de functie htmlentities() gebruikt zodat htmlenties standaard cross site scripting veilige tekst teruggeeft. En in de regulaire expressie methodes is gaat de PREG_REPLACE_EVAL “e” nu in de ban.

Hoe met PHP de open_basedir map te omzeilen.

dinsdag, december 27th, 2011

open_basedir is een verouderde, niet volledig veilige configuratie optie om uitvoer van PHP script en toegang tot bestanden te beperken tot een bepaalde map. Echter is open_basedir niet volledig waterdicht omdat bepaalde features zoals de opgeslagen sessie’s in PHP buiten de open_basedir moeten werken.
Hier is hoe een PHP script toch bestanden uit een andere map kunt gebruiken. In een shared hosting omgeving waarin openbase_dir de enige beveiliging is, is dit dus als volgt te misbruiken.

ini_set("session.save_path", "/sessions/user2/");
putenv("TMPDIR=/sessions/user2/");
ini_set("session.save_path", "");
@session_start();

Mijn advies voor server administrators is om de webserver te “jailen”,
dit verkomt ook dat met andere scripttalen die onder de webserver process draaien misbruikt kunnen worden om hoster zijn server volledig te hacken.
Verder is het instellen van de juiste bestandspermissies belangrijk, het is ook belangrijk om het gebruik van symbolische bestands links uitschakelen.
Daarnaast kun je nog putenv en ini_set functies aan disabled_functions van php configuratie toevoegen om deze bekende manier van open_basedir restricties te misbruiken te blokkeren.

Netbeans 7.0

vrijdag, april 22nd, 2011

Een nieuwe major release van Netbeans Integrated Development Environment uitgegeven.
Netbeans kan voornamelijk voor Java maar ook PHP en andere talen programmeer talen gebruikt worden.
Nieuw in Netbeans 7.0 is de ondersteuning voor Java (1.)7.0, dat de nieuwste versie van Java die nog ontwikkeling is.
Ook is er nu officiële ondersteuning voor PHPDoc en HTML5 voor web development. Voor web development is Netbeans best geschikt, samen met een installatie met xdebug voor PHP is het al mogelijk PHP script daadwerkelijk te debuggen vanuit Netbeans. Ook handig is het dat je een Oracle® database of mysql database direct vanuit de IDE kunt bewerken.
Verder lijkt netbeans versie 7.0 nu iets sneller opstarten dan in 6.9.1. Maar de opstarttijd van netbeans en totdat die eidelijk klaar is met het openen van alle projecten is nog steeds veel langer dan even met notepad++ iets doen. Maargoed  netbeans is dan wel een prima IDE voor Java en PHP. Netbeans 7 is te downloaden vanaf: netbeans.org/downloads/

HTTP headers die je webapplicatie veiliger maken

maandag, november 15th, 2010

Een eenvoudige manier om je bezoeker te beschermen bij een geslaagde hack op je webapplicatie,
is door gebruik te maken van de nieuwe beveiligings features die nu in veel webbrowser komen.
Veel van deze features werken door speciale HTTP header opties te sturen. Een nuttige optie is bijvoorbeeld de X-FRAME-OPTIONS http header die aangeeft of een webpagina in een frame geladen mag worden.
Als je bijvoorbeeld wilt dat je PHP applicatie niet in een frame mag worden weergeven dan moet je dit voordat je html begint te versturen op die pagina de volgende regel opnemen.

header("X-FRAME-OPTIONS: DENY");

Een nog verder gaande beveilig optie is X-Content-Security-Policy HTTP header, die beperkt waar inhoud vandaan geladen mag worden.
Echter zijn er vrij weinig  webbrowser(chrome) die deze beveiligings feature al ondersteunen.
Als je bijvoorbeeld de volgende regel toevoegd mag inhoud (afbeeldingen, css, javascript bestanden enz.) alleen van hetzelfde domein komen.

header("X-Content-Security-Policy: allow 'self';");

d9ping headers in httpfox
Let wel op dat deze maatregelen slechts de impact van misbruikt beperken, als je een XSS probleem hebt is het echte probleem niet opgelost. Daarbij komt nog dat het voor een heleboel oudere webbrowser niet werkt. Maargoed, je bezoekers zouden ook geen Internet Explorer6 meer moeten gebruiken. Deze website heeft de beveiliging features in ieder geval wel al ingebouwd en IE6 gebruikers wordenwerden gewaarschuwd dat ze moesten upgraden naar een hogere versie van hun browser. Een manier om de Http headers te bekijken is door het programma Wireshark of bijv. de Firefox extensie’s als: HttpFox,  Live HTTP Headers of Firebug te gebruiken.
Het is ook nog mogelijk via HTTP headers de XSS(cross scripting) filter van Internet Explorer aan- en uit te zetten. Dit kan met:

header("X-XSS-Protection: 1; mode=block");

maar het is niet nodig deze header te gebruiken want de XSS filter staat standaard al aan.

3 Beveilingtools om PHP script te testen

zaterdag, augustus 28th, 2010

[verrekijker exploitzoeken]Eerder had ik het al over 5 static sourcecode analyzers voor PHP scripts die je kunt gebruiken om je geschreven PHP code op beveiliging te testen. Het is daarnaast ook handig een tool te gebruiken om je eigen webapplicatie daadwerkelijk aan te vallen op een manier dat hackers en scriptkiddies ook kunnen. Dit geeft vaak ook een betere kijk op welke informatie over de interne werking van je webapplicatie je vrijgeeft.

Netsparker®
Dit is mijn favorieten security audit tool. Een groot voordeel ten opzichten van andere producten is dat het probeert geen enkele false positive te geven, en dat doet het erg goed. Dat betekent dat als deze tool je webapplicatie gescant geeft en het aangeeft dat er een SQL injectie is er dan echt een SQL injectie is. Daarnaast heeft het ook wat praktische adviezen zoals bijvoorbeeld autocomplete=off toevoegen aan wachtwoord velden. Het nadeel van geen enkele false postive proberen te geven is wel dat mogelijke bepaalde beveiligingslekken niet gevonden kunnen worden omdat ze onzeker zijn. NetSparker vindt dus vooral de meest belangrijke beveiligingsproblemen. De “Community Edition” is alleen voor niet zakelijk gebruik. Een beperking is dat de instellingen niet gewijzigd kunnen worden.
website www.mavitunasecurity.comwww.netsparker.com

WebCruiser
Deze tool vindt soms wat unieke beveiligings problemen. Er zit ook een tool voor het fuzzy’en naar Cross site scripting beveilings problemen. WebCruiser is behoorlijk snel in vergelijking met de andere tools. Het bevat ook een tool waarmee een proof of concept gegeneerd/uitgevoerd kan worden van een gevonden beveiligingsprobleem. Hiermee kun je dus aantonen dat een beveiligingsprobleem in de webapplicatie dat getest wordt ook echt is. De gratis versie bevat reclame links.
website www.sec4app.comwww.janusec.com

WebSecurify
Deze tool vindt vooral veel beveiligingsproblemen maar het scannen duurt wel ook wat langer. Het doet allerlei extra tests die ik in andere producten nog niet ben tegen gekomen. Het nadeel van veel beveiligingsproblemen proberen op te sporen is naast dat het aanvallen even kan duren ook dat niet elke gevonden beveiligingsprobleem echt een beveiligingsprobleem hoeft te zijn. Het programma is iets minder overzichtelijk dan gebruikers interface van WebCruiser en Netsparker maar WebSecurify is volledig OpenSource en er is geen betaalde versie.
Daarnaast is WebSecurify de enige tool die veel fuzzying doet en daarmee de lastige beveilingsproblemen vindt.
website www.websecurify.com

5 PHP Static sourcecode analyzers

maandag, mei 31st, 2010

php exploits
Static source code analyzers zijn tools die een programmeur helpen om bepaalde bekende beveiligingsfouten in code te vinden.
Een static source code analyzer kan handig zijn. Maar de meeste kunnen maar een beperkt deel van de fouten die een programmeur maakt vinden. Daarnaast kan een static sourcecode analyzer soms een valse beveiligslek als resultaat geven. Dus het houden van code reviews blijft belangrijk voor het garanderen van de veiligheid van een bepaalt stuk code. Maar code analyzer kan wel wat helpen.
De meeste PHP static sourcecode analyzers zijn ook in PHP geschreven, het voordeel daarvan is dat de veiligheid compleet met je server configuratie getest wordt.

Ik heb op het internet gezocht naar PHP sourcecode analyzers en heb deze interessante opensource producten gevonden.

RIPS:
Pas nieuw project, dit project won een tweede plek in de maand van PHP beveiliging 2010.
https://sourceforge.net/projects/rips-scanner/

PHP Security Scanner:
https://sourceforge.net/projects/securityscanner/

spike phpsecaudit:
https://sourceforge.net/projects/phpsecaudit/

PHP-sat:
Update: deze tool is niet meer beschikbaar.

Pixy
Update: dit java programma is ook niet meer beschikbaar.

Snelheid tellen in PHP vs SQL

woensdag, april 21st, 2010

php vs. sqlStel je wilt bent iets aan het tellen bij de ontwikkeling van je dynamische website.
Dan zijn er vaak twee manieren om dit te doen.

1. In PHP tellen bijvoorbeeld:

$numdownloads = mysql_num_rows(mysql_query("SELECT * FROM downloads));

2. in je SQL query tellen bijvoorbeeld:

$sqlnumdownloads =  mysql_fetch_array( mysql_query("SELECT COUNT(*) AS aantal FROM downloads) );
$numdownloads = mysql_fetch_result($sqlnumdownloads,0,'aantal');

Je kunt verwachten dat de 2e methode sneller is. Omdat niet eerst alle data opvraagt wordt en deze van de database server naar de webserver over gestuurt wordt. De netwerk verbinding vormt de grootste bottelneck. Maar wat als de database server en webserver dezelfde computer is? Dan is de ‘overdracht’ van de gegevens niet de bottleneck meer. Maar ook dan is het tellen in SQL vaak sneller dan in PHP. Dit omdat het PHP parser nog het probleem dat het een grotere bulk data moet verwerken omdat deze data niet door de simple SQL query geoptimaliseerd is. Sterker nog als je MyISAM voor opslag gebruikt zal het resultaat direct beschikbaar zijn omdat het al gedaan is door steeds het aantal verwijderen en toevoegen van records bij te houden. M.a.w. het loont qua performance het tellen in SQL te doen.

veiliger PHP6 door minder verwarrende beveiliging

vrijdag, april 2nd, 2010

PHP6 is nu flink in ontwikkeling en het is waarschijnlijk niet lang meer voordat we de eerste php6 release gaan zien. Een ding waar ik blij mee ben is dat in PHP6 magic quotes extensie nu niet meer werkt.

Het probleem met magic quote’s was dat vele PHP programmeur dachten dat ze hun PHP script veilig konden overzetten op een andere hosting terwijl dat niet het geval was. Wat magic qoutes extensie voor PHP scripts namelijk doet is voor elke input via POST en GET variabele de aanhalingstekens en enkele aanhalingsteken escapen.

Dan is het niet mogelijk dat een bezoeker, een string variabel in je script probeert te verlaten en PHP code kan uitvoeren.
Echter gebeurt dit alleen als magic quote op je hosting aanstaat.
Het is dus ook belangrijk dat in de test omgeving en productie omgeving dezelfde instellingen voor magic quotes gebruikt want anders dan is dat vragen om beveiligingsproblemen. Zonder magic quote moet de programmeur zelf ervoor zorgen dat string variabel veilig wordt.

Dan is er ook nog het probleem met magic quote’s dat het de beveiling die de php programmeur wel gemaakt heeft kan opheffen.
Dit gebeurt als Magic Quotes  een slash met aanhalingsteken gaat escape en er dan een dubbele slash staat wat in feit betekent dat de slash ge-escaped wordt en niet het aanhalingsteken meer.

PHP magic quote heeft dus voor veel verwarring en dus beveiligingsproblemen gezorgd terwijl het juist een beveiligingsprobleem automatisch moest oplossen.
Een overzicht van wanneer een php script dus veilig is ziet er dan zo uit:

Een oplossing om een script toch onder zowel hosting met magic quotes aan en magic quote uit veilig te maken was door eerst te controleren of magic quotes aanstond.
Dit kan door de functie get_magic_quotes_gpc() te gebruiken. Echter moet je dan dus wel een aantal dingen dubbel schrijven, een routine waarbij het script niet escaped als magic quote aanstaan en een andere stuk code waarbij de script wel escaped als magic quotes uitstaat. Een slimmer manier om niet overal get_magic_quotes_gpc() te hoeven aanroepen is om een functie te schrijven die je steeds aanroept wanneer je ergens mogelijk moet escapen en in die functie te controleren of magic quotes aanstaat.
Indergeval, in de toekomstige php6 versie zal magic quotes standaard er niet meer zijn en zal de php programmeur dus altijd moeten escapen. Dat maakt het wel een stuk duidelijker.

productie