Tips för att utveckla säkra applikationer i PHP

27 januari 2017

PHP är ett av de mest populära programmeringsspråken för webben. Det hjälper utvecklarna att programmera de finaste applikationerna och skapa nya riktmärken inom mobil- och webbutveckling. Det största problemet med att utveckla en PHP-applikation är dock säkerheten, vilket gör utvecklingen av säkrade PHP-applikationer till en stor utmaning, speciellt för amatörerna. I den här artikeln kommer vi att ge dig 3 viktiga tips som hjälper dig att undvika några vanliga PHP-säkerhetsfällor och utveckling.

Tips 1: Lämplig felrapportering är ett måste

Applikationsfelrapportering är till stor hjälp under utvecklingsprocessen. Felrapporter hjälper dig inte bara att hitta stavfel i variablerna utan också fånga upp eventuell felaktig funktionsanvändning.

Men när webbplatsen släpps kan samma rapportering som hjälpte dig under utvecklingen vända sig mot säkerheten för din applikation genom att berätta mycket mer för användarna om din webbplats än du kanske vill att de ska veta (till exempel informationen om programvaran körs och mappstrukturen etc.). Innan webbplatsen går live bör du se till att eliminera alla sådana fel för att hålla sådan känslig information under tak. Detta kan göras genom att skriva följande rader i våra ansökningar.

error_reporting(0);

För eventuella fel som fortfarande uppstår känner vi fortfarande ett behov av att hålla oss uppdaterade om dessa. Så vi måste se till att alla våra fel loggas till en skyddad fil, vilket kan göras med en PHP-funktion som kallas set_error_handler.

Tips 2: Det är tillrådligt att inaktivera PHPs funktioner som inte längre används

Från början av PHP fortsatte PHP:s designers regelbundet med att inkludera några funktioner som var avsedda att göra utvecklingen lättare. Eller åtminstone tänkte de göra det så! Vissa av dessa förment användbara funktioner kan lika gärna visa sig ha oönskade konsekvenser. Vi kallar dessa som "dåliga funktioner" eftersom dessa tillåter datavalidering och skapade en väg för buggar att hitta in i skript. Detta är anledningen till att vi föreslår att du inaktiverar några av dessa funktioner som en av de första sakerna att göra när du börjar utvecklingsprocessen.

Obs: Dessa funktioner kan eller kanske inte är avstängda för din webbplats baserat på din värd. Om du utvecklar på din egen dator eller annan liknande lokal miljö kommer dessa förmodligen inte att stängas av. Vissa av dessa funktioner har eliminerats i PHP6, men finns fortfarande kvar i PHP4-applikationer och kommer så småningom att fasas ut från och med PHP5-applikationerna.

Registrera globaler (register_globals)

'register_globals' var i grunden avsedd för att hjälpa snabb applikationsutveckling som involverade en frågesträng. De 'register_globals' uttalande tillåter oss att komma åt värdet med $var istället för $_GET['var'] automatiskt. Detta kan låta användbart för oss, men tyvärr inkluderar alla variabler i koden nu denna egenskap, så det är nu lätt att komma in i PHP-applikationer som inte skyddar mot sådana oönskade konsekvenser. Kodavsnittet nedan är bara ett vanligt exempel som vi kommer att se i PHP-skript:

if( !empty( $_POST['användarnamn'] ) && $_POST['användarnamn'] == 'test' && !empty( $_POST['lösenord'] ) && $_POST['lösenord'] == ”test123” )
{
$access = sant;
}

Om applikationen körs med register_globals PÅ, kan en användare bara placera access=1 i en frågesträng och skulle sedan ha tillgång till det skriptet som körs. Även om det inte är möjligt att inaktivera register_globals från skriptsidan (med ini_set, som i vanliga fall), men en .htaccess-fil kan användas för att göra detta. Förutom detta tillåter vissa värdar oss att ha en php.ini-fil på servern också för att göra detta.

Inaktiverar med .htaccess

php_flagga register_globals 0

Inaktivera med php.ini

register_globals = Av

Det bör noteras att om vi planerar att använda en anpassad php.ini-fil som inte är tillämplig på hela servern, måste vi se till att inkludera dessa deklarationer i varje undermapp som har PHP.

Tips 3: Håll ett öga på Cross Site Scripting (XSS) attacker i användarinmatning

En webbapplikation tar vanligtvis input från användarna för att så småningom visa densamma i den ena eller den andra formen, vilket kan vara någon av de många olika inklusive kommentarer, blogginlägg eller trådar som alla är i grunden i form av HTML-kod. Det är dock anmärkningsvärt att det kan vara riskabelt för din applikation att tillåta HTML när du accepterar indata, eftersom detta lämnar gott om utrymme för JavaScript att köras på ett av de många oväntade sätten. Och detta gör till och med att kakorna lätt kan kapas om även något riktigt litet förblir obevakat. Kaparna kan sedan enkelt använda denna cookiesdata för att fejka ett riktigt konto och få olaglig tillgång till din webbplats data. Du kan skydda din webbplats mot sådana attacker genom att inte tillåta HTML helt och hållet, vilket så småningom också inaktiverar JavaScript för att köras. Detta är dock kanske inte alltid ett genomförbart alternativ eftersom detta också inaktiverar formatering helt, vilket kanske inte är möjligt att klara sig utan, speciellt i fallet med en blogg eller ett forum.

För att lösa det här problemet kan du ha HTML för det mesta inaktiverat med undantag för viss enkel formatering tillåten. Detta kan uppnås genom att bara tillåta ett fåtal av HTML-taggarna (utan attribut), till exempel "strong"-taggen eller "em"-taggen. Eller helt enkelt några populära taggar som "BBCode" eller "BB-taggar" som vanligtvis skrivs på forum i formatet [b]test[/b]. BBCode kan också implementeras med hjälp av redan existerande paket som HTML_BBCodeParser eller genom att skriva vår egen BBCode-implementering med reguljära uttryck och en serie 'preg_replace'-satser.

Referens: http://www.sks.com.np/basic-security-vulnerabilities-in-php-code/

Som ledande PHP utvecklingsföretag , Carmatec erbjuder från början till slut PHP utveckling lösningar baserade på spjutspetsteknologi, både front-end och back-end. Förutom modern stil och design arbetar vi med att hålla gränssnitten enkla och användarvänliga. Användarvänlighet är vårt mål även i komplexa webbplatsfunktioner.

sv_SESwedish