Ultimate PHP Security Best Practices

php security guide

aangezien PHP de backbone is voor bijna elke website, moet PHP security niet te verwaarlozen zijn ten koste van alles. Echter, PHP-ontwikkelaars hebben het voorrecht om gemeenschappelijke bedreigingen zoals cross-site request forgery, SQL injecties, en data knoeien te voorkomen. En dit alles komt van pas met de hulp van PHP ingebouwde beveiligingsfuncties die het makkelijker maken voor ontwikkelaars om de website te beschermen.

PHP is de krachtigste server-side taal, PHP maakt gebruik van 80 procent van ‘ s werelds web, met top 10 miljoen domeinen. Om deze reden zelf, het is om te begrijpen dat PHP zal u helpen om te beschermen tegen aanvallers.

webapplicaties beveiligen tegen allerlei vervalste aanvalspogingen is de ultieme taak van een webontwikkelaar. Je moet bouwen uw web apps Beschermend genoeg om geen beveiligingsproblemen of mazen hebben.

PHP is de meest gebruikte server-side web programmeertaal over de hele wereld. Verschillende PHP-toepassingen delen verschillende delen van hun code en scripts met andere webapplicaties. In het geval dat het gedeelde stuk code wordt gevonden ontdekt kwetsbaar, alle toepassingen met behulp van dat gedeelde stuk code worden in gevaar gebracht en als kwetsbaar beschouwd.

Houd uw Apps veilig op Cloud

Cloudways biedt 2FA, gratis SSL en meer geavanceerde beveiligingsfuncties op beheerde servers die uw applicatie veilig houden.

PHP is de meest bekritiseerde scripttaal als het gaat om beveiliging. Een groot deel van de ontwikkelaars en QA experts denken dat PHP heeft geen robuuste technieken om applicaties te beveiligen. Het vonnis heeft ook enige grond, omdat PHP is de oudste en veel gebruikte taal voor web app ontwikkeling. Maar voor een lange tijd sinds PHP 5.6, we hebben geen grote updates gezien met betrekking tot de veiligheid en dus de taal wordt geconfronteerd met een aantal beveiligingsproblemen.

hoe veilig is PHP

PHP is net zo veilig als elke andere belangrijke taal. PHP is net zo veilig als elke grote server-side taal. Met de nieuwe PHP frameworks en tools die de afgelopen jaren zijn geïntroduceerd, is het nu gemakkelijker dan ooit om top-notch beveiliging te beheren.

als we een vergelijking maken is PHP gelijk beveiligd. Rails, Java, Javascript, en andere talen, hebben allemaal hun kwetsbaarheden door de jaren heen. “Als je een taal die niet een kwetsbaarheid van een vorm of vorm heeft gehad, kunt u veilige code in PHP perfect te schrijven.

beveiligingsproblemen in PHP CMS

populaire CMS zoals WordPress, Joomla, Magento en Drupal zijn gebouwd in PHP en volgens Sucuri kwamen de meeste kwetsbaarheden in PHP CMS aan het licht tijdens het jaar 2017:

  • WordPress beveiligingsproblemen steeg van 74% in 2016 Q3 naar 83% in 2017.
  • Joomla beveiligingsproblemen zijn gedaald van 17% in 2016 Q3 naar 13,1% in 2017.De veiligheidsproblemen van Magento stegen marginaal van 6% in het derde kwartaal van 2016 naar 6,5% in 2017.
  • Drupal security issues daalden licht van 2% in het derde kwartaal van 2016 naar 1,6% in 2017.

cms infectie vergelijking

CMS infection comparison

de huidige situatie is niet goed genoeg, maar dankzij open source bijdragers, die hard proberen om de problemen te overwinnen en we hebben een aantal drastische veranderingen in PHP de laatste tijd gezien. PHP 7.x werd vorig jaar gelanceerd met verschillende updates en fixes. Het beste van PHP 7.x heeft betrekking op de beveiligingsupgradaties die het beveiligingsprotocol van de taal echt hebben vernieuwd.

wat bevat deze PHP Beveiligingshandleiding?

ik werk al heel lang aan PHP-beveiligings-en prestatieproblemen.ik ben zeer actief in de PHP-gemeenschap en vraag topontwikkelaars naar de tips en trucs die ze gebruiken in hun live-projecten. Daarom is het belangrijkste doel van deze PHP security tutorial is om u bewust te maken over de best practices voor beveiliging in PHP webapplicaties. Ik zal de volgende problemen definiëren en mogelijke oplossingen daarvoor noemen.

  • PHP regelmatig bijwerken
  • Cross site scripting (XSS)
  • SQL-injectieaanvallen
  • Cross site request forgery XSRF/CSRF
  • Session Hijacking
  • bestanden vanuit de Browser verbergen
  • veilig bestanden uploaden
  • SSL-certificaten gebruiken voor HTTPs
  • PHP-Apps op Clouds

opmerking: beschouw het niet als een volledig spiekbriefje. Er moeten betere manieren en meer unieke oplossingen ontwikkelaars zou toepassen op de hun toepassingen om het perfect beveiligd te maken.

PHP Security Best Practice

tijdens het maken van een PHP webapplicatie moet een web engineer zich bezighouden met security best practices. Een onveilige webapplicatie geeft hackers de kans om waardevolle gegevens, zoals klantgegevens of creditcardgegevens, mee te nemen. Bovendien kan een datalek een extreem effect hebben op de geldigheid en toekomstige activiteiten van uw organisatie.

update PHP regelmatig

op dit moment is PHP 8 de meest stabiele en nieuwste versie van PHP beschikbaar. Ik adviseer dat u uw PHP-applicatie moet updaten naar deze nieuwe. Als u nog steeds met behulp van PHP 5.6 OF 7 dan zul je veel deprecations tijdens het upgraden van PHP apps. U zult ook uw code moeten bijwerken en een aantal functionele logica ‘ s zoals wachtwoordhashing enz.moeten wijzigen. Er zijn ook enkele tools beschikbaar om de veroudering van uw code te controleren en u te helpen bij het migreren van deze. Ik heb een aantal tools hieronder vermeld:

  1. PHP Compatibility Checker
  2. PHP MAR
  3. Phan

Als u PHPStorm gebruikt, kunt u PHP 7 Compatibility Inspection gebruiken, die u zal laten zien welke code u problemen zal veroorzaken.

Lees Meer: PHP Hosting op Cloudways

Cross-site scripting (XSS)

Cross-site scripting is een type kwaadaardige webaanval waarbij een extern script wordt geïnjecteerd in de code of uitvoer van de website. De aanvaller kan geïnfecteerde code te sturen naar de eindgebruiker, terwijl de browser kan het niet identificeren als een vertrouwd script. Deze aanval vindt meestal plaats op de plaatsen waar de gebruiker de mogelijkheid heeft om gegevens in te voeren en in te dienen. De aanval heeft toegang tot cookies, sessies en andere gevoelige informatie over de browser. Laten we eens kijken naar het voorbeeld van een GET request die is het verzenden van een aantal gegevens via URL:

URL: http://example.com/search.php?search=<script>alert('test')</script>$search = $_GET ?? null;echo 'Search results for '.$search;

u kunt deze aanval achterhalen met behulp van htmlspecialchars. Ook door ENT_QUOTES te gebruiken, kunt u enkele en dubbele aanhalingstekens ontsnappen.

$search = htmlspecialchars($search, ENT_QUOTES, 'UTF-8');echo 'Search results for '.$search;

Ondertussen kunnen XSS-aanvallen ook worden uitgevoerd via attributen, gecodeerde URI-schema ‘ s en codecodering.

Lees meer: Prevent XSS in Laravel

SQL injectie aanvallen

de SQL injectie is de meest voorkomende aanval in PHP scripting. Een enkele query kan de hele toepassing in gevaar brengen. In SQL injection attack, de aanvaller probeert de gegevens die u via queries te wijzigen. Stel dat u direct gebruikersgegevens verwerkt in SQL-queries, en plotseling gebruikt een anonieme aanvaller in het geheim verschillende tekens om het te omzeilen. Zie de onderstaande SQL query:

$sql = "SELECT * FROM users WHERE username = '" . $username . "';

de $ username kan gewijzigde gegevens bevatten die de database kunnen beschadigen inclusief het verwijderen van de hele database in een oogwenk. Wat is de oplossing? Bob. Ik raad u aan altijd voorbereide verklaringen te gebruiken. PDO helpt u bij het beveiligen van SQL-queries.

$id = $_GET ?? null;

de verbinding tussen de database en de toepassing wordt gemaakt met onderstaande verklaring:

$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'dbusername', 'dbpassword');

u kunt gebruikersnaam selecteren op basis van bovenstaande ID, maar wacht! Hier SQL code ‘GET data’ wordt geïnjecteerd in uw vraag. Wees voorzichtig om dergelijke codering te vermijden en gebruik in plaats daarvan voorbereide verklaringen:

$sql = "SELECT username, email FROM users WHERE id = ".$id." ;foreach ($dbh->query($sql) as $row) { printf ("%s (%s)\n", $row, $row);}

nu kunt u de bovenstaande SQL-injectiemogelijkheid vermijden door

$sql = "SELECT username, email FROM users WHERE id = :id";$sth = $dbh->prepare($sql, );$sth->execute();$users = $sth->fetchAll();

te gebruiken. ook is het een goede gewoonte om ORM-achtige doctrine of eloquent te gebruiken, omdat er de minste mogelijkheid is om SQL-query ‘ s daarin te injecteren.

Lees Meer: Php Website beschermen tegen SQL injectie

cross site request forgery XSRF / CSRF

de CSRF aanval is heel anders dan XSS aanvallen. In CSRF aanval, de eindgebruiker kan ongewenste acties uit te voeren op de geverifieerde websites en kan kwaadaardige commando ‘ s naar de site om eventuele ongewenste actie uit te voeren. CSRF kan de aanvraaggegevens niet lezen en richt zich meestal op de status veranderende aanvraag door het verzenden van een link of gewijzigde gegevens in HTML-tags. Het kan de gebruiker dwingen om statusveranderende verzoeken uit te voeren, zoals het overmaken van geld, het wijzigen van hun e-mailadressen, enz. Laten we eens kijken deze URL waarin GET requests is het verzenden van geld naar een andere rekening:

GET http://bank.com/transfer.do?acct=TIM&amount=100 HTTP/1.1

als iemand de webtoepassing wil uitbuiten zal hij / zij de URL veranderen met naam en bedrag als deze

http://bank.com/transfer.do?acct=Sandy&amount=100000

nu kan deze URL via e-mail worden verzonden in elk bestand, afbeelding etc en de aanvaller kan u vragen om het

bestand te downloaden of op de afbeelding te klikken. En zodra je dat doet, je direct eindigen met het verzenden van enorme hoeveelheid geld die je nooit weet over.

Session hijacking

Session hijacking is een specifiek type kwaadaardige webaanval waarbij de aanvaller in het geheim de sessie-ID van de gebruiker steelt. Die sessie-ID wordt verzonden naar de server waar de bijbehorende $_SESSION array de opslag in de stack valideert en toegang verleent tot de toepassing. Session hijacking is mogelijk via een XSS-aanval of wanneer iemand toegang krijgt tot de map op een server waar de sessiegegevens zijn opgeslagen.

om sessiekaping te voorkomen, bind sessies altijd aan uw IP-adres aan:

$IP = getenv ( "REMOTE_ADDR" );

let op wanneer u aan localhost werkt, omdat het u niet het exacte IP-adres geeft, maar :::1 of::: 127 typewaarden. U moet de sessie snel ongeldig maken (Cookie uitschakelen, sessieopslag uitschakelen, sporen verwijderen) wanneer een overtreding optreedt en moet altijd proberen om ID ‘ s Onder geen enkele omstandigheid bloot te leggen.

voor cookies is het het beste om nooit serialize-gegevens te gebruiken die in een cookie zijn opgeslagen. Hackers kunnen cookies gemakkelijk manipuleren, wat resulteert in het toevoegen van variabelen aan uw scope. Verwijder de cookies veilig op deze manier:

setcookie ($name, "", 1);setcookie ($name, false);unset($_COOKIE);

de eerste regel van de code zorgt ervoor dat de cookie verloopt in de browser, de tweede regel toont de standaard manier om een cookie te verwijderen (U kunt dus niet onwaar opslaan in een cookie). De derde regel verwijdert de cookie uit je script.

Lees meer: Redis Server As A PHP Session Handler

Hide Files from the Browser

Als u micro-frameworks van PHP hebt gebruikt, dan moet u de specifieke mapstructuur hebben gezien die ervoor zorgt dat bestanden correct worden geplaatst. Frameworks maken het mogelijk om verschillende bestanden zoals controllers, modellen, configuratiebestand (.yaml) etc in die directory, maar meestal verwerkt browser niet alle bestanden, maar ze zijn beschikbaar om te zien in de browser. Om dit probleem op te lossen, moet u uw bestanden niet in de hoofdmap plaatsen, maar in een openbare map, zodat ze niet altijd toegankelijk zijn in de browser. Kijk naar de directory structuur van het Slim framework hieronder:

slanke directory structuur

slim directorystructuur

veilig bestanden uploaden

het uploaden van bestanden is een noodzakelijk onderdeel van elke toepassing voor de verwerking van gebruikersgegevens. Maar vergeet niet op sommige punten, bestanden worden ook gebruikt voor XSS-aanvallen zoals ik hierboven in het artikel al heb uitgelegd. Terugkerend naar de basis, Gebruik altijd de POST request in het formulier en verklaar de eigenschap enctype=”multipart/form-data” in <form> tag. Valideer dan het bestandstype met behulp van finfo klasse als deze:

$finfo = new finfo(FILEINFO_MIME_TYPE);$fileContents = file_get_contents($_FILES);$mimeType = $finfo->buffer($fileContents);

ontwikkelaars kunnen hun eigen aangepaste en ultra-veilige bestandsvalidatieregels maken, maar sommige frameworks zoals Laravel, Symfony en codeigniter hebben al vooraf gedefinieerde methoden om bestandstypen te valideren.

laten we een ander voorbeeld bekijken. De HTML van het formulier zou als volgt moeten zijn:

<form method="post" enctype="multipart/form-data" action="upload.php"> File: <input type="file" name="pictures" multiple="true"> <input type="submit"></form>

en uploaden.php bevat de volgende code:

foreach ($_FILES as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmpName = $_FILES; $name = basename($_FILES); move_uploaded_file($tmpName, "/var/www/project/uploads/$name"); }}

correct declareren van de upload_err en basename() kan voorkomen dat directory traversal aanvallen, maar weinig andere validaties – zoals Bestandsgrootte, bestand hernoemen en opslaan van geüploade bestanden in privé – locatie-zijn ook nodig om de veiligheid van de toepassingen te versterken.

Lees meer: Upload van afbeeldingen en bestanden in PHP

gebruik SSL-certificaten voor HTTPS

alle moderne browsers zoals Google Chrome, Opera, Firefox en anderen raden aan om HTTPS-protocol te gebruiken voor webtoepassingen. HTTPs biedt een beveiligd en versleuteld toegangskanaal voor niet-vertrouwde sites. U moet https opnemen door SSL-certificaat op uw website te installeren. Het versterkt ook uw webapplicaties tegen XSS-aanvallen en voorkomt dat de hackers om getransporteerde gegevens te lezen met behulp van codes. Cloudways biedt gratis SSL-certificaten met één klik die 90 dagen geldig zijn en u kunt ze eenvoudig intrekken of verlengen met een klik. U kunt de handleidingen volgen voor het instellen van SSL certificaten in uw PHP, WordPress, Magento en Drupal applicaties.

PHP-Apps implementeren op Clouds

Hosting is de laatste en belangrijkste stap voor elke webapplicatie, omdat u het project altijd op lokale PHP-servers maakt en implementeert op live-servers die gedeelde, cloud-of dedicated hosting aanbieden. Ik raad altijd aan om cloud hosting te gebruiken zoals DigitalOcean, Linode, AWS. Ze zijn snel, veilig en veilig voor elke vorm van website en applicatie. Ze bieden altijd beveiligde laag om DDOS, Brute kracht en phishing-aanvallen te voorkomen die zeer schadelijk zijn voor webapplicaties.

u vindt het misschien ook interessant: valkuilen van Laravel Shared Hosting voor uw projecten

om PHP-toepassingen op cloudservers te implementeren, moet u over goede Linux-vaardigheden beschikken om krachtige webstacks zoals LAMP of LEMP te maken, wat u vaak tijd en budget kost voor Linux-professionals. In plaats daarvan, Cloudways managed PHP en MySQL hosting platform biedt u de gemakkelijke manier om servers te implementeren met Thunderstack binnen enkele klikken op de hierboven genoemde cloud providers. De Thunderstack helpt uw PHP-applicatie volledig te worden beveiligd tegen verschillende kwaadaardige aanvallen en garandeert geoptimaliseerde prestaties.

Lees meer: verbeterde Cloudways Staging Environment Is nu beschikbaar voor alle gebruikers

Document Root Setup

de document root voor PHP applicaties op elke server moet worden ingesteld op var / www/html, zodat gebruikers toegang tot uw website via de browser. Maar in sommige gevallen, wanneer u API `s ontwikkelt met frameworks zoals Laravel, Symfony en Slim, moet u de webroot updaten naar ‘ /public folder.

/ public dient de uitvoer van applicatie vergelijkbaar met eenvoudige PHP website met index.php bestand. Het doel om de webroot in te stellen op var/www/html/public is om de gevoelige bestanden te verbergen zoals .htaccess en .env die de omgevingsvariabelen en referenties van database, mail, betaling API ‘ s bevatten.

ook raden frameworks zoals Laravel, Symfony aan om niet al uw bestanden naar de hoofdmap te verplaatsen, maar om in plaats daarvan een mooie mapstructuur te creëren om gerelateerde bestanden zoals view, models en controllers op te slaan is een meer redelijke aanpak.

Log alle fouten in en verberg ze in productie

zodra u de website hebt ontwikkeld en op live server hebt geïmplementeerd. Het eerste wat je moet doen is het uitschakelen van de weergave van fouten, omdat hackers dezelfde waardevolle informatie uit de fouten zou kunnen krijgen. Stel deze parameter in je php.ini-bestand:

display_errors=Off

nu, na het uitschakelen van display, log PHP-fouten in een specifiek bestand voor toekomstige behoeften:

log_errors=Onerror_log=/var/log/httpd/php_scripts_error.log

Uiteraard kunt u de bestandsnaam wijzigen zoals u wilt.

u zult het ook leuk vinden: vereenvoudig Laravel Error Logging met PHP Rollbar Integration

Whitelist Public IP voor Mysql

bij het werken met PHP apps moet u vaak de MySQL database in zowel interne scripts als in MySQL clients instellen. De meeste clients worden gebruikt voor het opzetten van MySQL remote connection die het IP-adres of een andere hostnaam nodig heeft om verbinding te maken met de hostingserver.

het publieke IP-adres voor de externe MySQL-verbinding moet op de whitelist worden gezet op uw hostingserver, zodat een anonieme gebruiker geen toegang kan krijgen tot de database. Bijvoorbeeld, op Cloudways kunt u IP whitelist als:

nu kunt u SQLyog of MySQL workbench verbinden om op afstand met de database te werken.

Q: hoe PHP beveiliging te testen?

A: Er zijn weinig codescanner tools beschikbaar in de markt die u kunnen helpen de code kwaliteit en veiligheid van uw PHP applicaties te analyseren. PHP Malware Finder (PMF) is een van de top security testing tools die helpt om kwaadaardige codes te vinden in de bestanden. U kunt ook gebruik maken van RIPS, dat is een populaire code analyse tool die helpt om code kwetsbaarheden in real-time te vinden.

Q: hoe PHP-databasebeveiliging te garanderen?

A: om de databasebeveiliging te garanderen, moet u altijd gebruik maken van praktijken zoals SQL-injectiebeveiliging, database firewalls, regelmatige gegevensversleuteling en soortgelijke andere.

Q: Wat is een veilige methode om wachtwoord te versleutelen in PHP?

A: Md5 is het acroniem voor Message Process 5, en sha1 is het acroniem voor Secure Hash Algorithm 1. Ze worden beide gebruikt om strings te versleutelen. Zodra een tekenreeks is versleuteld, wordt het repetitief om het te decoderen. Md5 en sha1 zijn bijzonder handig bij het opslaan van wachtwoorden in de database.

Q: Wat is een PHP-kwetsbaarheid?

A: PHP Object Injection is een kwetsbaarheid op applicatieniveau die een aanvaller in staat lijkt te stellen verschillende soorten schadelijke aanvallen uit te voeren, zoals Code-injectie, SQL-injectie, Path Traversal en Denial of Service.

een DDoS-aanval brengt aanvallen van meerdere computersystemen in gevaar. De gebruikelijke doelen zijn servers, websites of andere netwerkbronnen.

dit gebeurt wanneer door de gebruiker aangeleverde invoer niet wordt beheerd voordat deze wordt doorgegeven aan de UNSERIALIZE () PHP functie. Aangezien PHP object serialisatie toestaat, kunnen agressors ad-hoc serialized strings doorgeven aan een weerloze unserialize() call.

Inpakken.

wel, de PHP security best practices is een zeer uitgebreid onderwerp. Ontwikkelaars van over de hele wereld hebben de neiging om verschillende use cases te ontwikkelen om web apps te beveiligen. Terwijl veel bedrijven lopen verschillende bounty programma ‘ s om uit te vinden veiligheid mazen en kwetsbaarheden in hun toepassingen en dus belonen die security experts die wijzen op kritieke mazen in de toepassingen. Dit artikel behandelt fundamentele PHP beveiligingsproblemen, om u te helpen begrijpen hoe u uw PHP-projecten te beveiligen tegen verschillende kwaadaardige aanvallen. Ik zal ook schrijven over enkele meer PHP security tips en trucs in de toekomst ook. Tot dan kunt u uw gedachten en beveiligingspraktijken in de commentaren hieronder bij te dragen.

deel uw mening in de sectie commentaar. COMMENTAAR NU

Share Dit Artikel

Customer Review op

“Cloudways hosting is één van de beste service en hosting snelheid”

Sanjit C

Shahroze Nawaz

Shahroze is een PHP-Community Manager van Cloudways – Een Geslaagd PHP Hosting Platform. Naast zijn werk, houdt hij van films en reizen. Je kunt hem e-mailen op

Get Connected op: Twitter Community Forum

Leave a Reply

Het e-mailadres wordt niet gepubliceerd.