Ultimate PHP Security Best Practices
da PHP er rygraden for næsten alle hjemmesider, bør PHP-sikkerhed derfor ikke betragtes som ubetydelig for enhver pris. PHP-udviklere har dog privilegiet at undgå almindelige trusler som forfalskning af anmodninger på tværs af steder, indsprøjtninger og manipulation af data. Og alt dette er praktisk ved hjælp af PHP indbyggede sikkerhedsfunktioner, der gør det lettere for udviklere at beskytte hjemmesiden.
PHP siges at være den mest magtfulde server-side sprog, PHP udnytter 80 procent af verdens internet, med top 10 millioner domæner. Af denne grund er det at forstå, at PHP vil hjælpe dig med at beskytte mod angribere.
sikring af internetapplikationer fra alle mulige forfalskede angrebsforsøg er den ultimative pligt for en internetudvikler. Du bør bygge dine internet apps beskyttende nok til at have ingen sikkerhedsproblemer eller smuthuller.
PHP er det mest anvendte programmeringssprog på serversiden i hele verden. Forskellige PHP applikationer deler forskellige dele af deres kode og scripts med andre internet applikationer. Hvis det delte stykke kode findes opdaget sårbart, alle applikationer, der bruger det delte stykke kode, bringes i fare og betragtes som sårbare.
Hold dine Apps sikre på Cloud
Cloud tilbyder 2FA, gratis SSL og mere avancerede sikkerhedsfunktioner på administrerede servere, der holder din applikation sikker.
PHP er det mest kritiserede scriptsprog, når det kommer til sikkerhed. En stor del af udviklere og KVALITETSSIKRINGSEKSPERTER mener, at PHP ikke har nogen robuste teknikker til at sikre applikationer. Dommen har også noget grund, fordi PHP er det ældste og udbredte sprog til udvikling af apps. Men i lang tid siden PHP 5.6 har vi ikke set nogen større opdateringer vedrørende sikkerhed, og derfor står sproget over for nogle sikkerhedsproblemer.
hvor sikker er PHP
PHP er lige så sikker som ethvert andet større sprog. PHP er lige så sikkert som ethvert større server-side sprog. Med de nye PHP-rammer og-værktøjer, der er introduceret i de sidste par år, er det nu lettere end nogensinde at styre førsteklasses sikkerhed.
hvis vi gør en sammenligning PHP er jævnt sikret. Rails, Java, Javascript og andre sprog har alle haft deres sårbarheder gennem årene. “Hvis du finder et sprog, der ikke har haft en sårbarhed af en eller anden form eller form, kan du skrive sikker kode i PHP helt godt.
sikkerhedsproblemer i PHP CMS
populære CMS som Joomla, Magento og Drupal er bygget i PHP, og ifølge Sucuri kom de fleste af sårbarhederne i PHP CMS frem i løbet af året 2017:
- sikkerhedsproblemerne steg fra 74% i 2016 i 3.kvartal til 83% i 2017.
- Joomla-sikkerhedsspørgsmål er faldet fra 17% i 2016 i 3.kvartal til 13,1% i 2017.
- Magento-sikkerhedsspørgsmål steg marginalt fra 6% i 3.kvartal 2016 til 6,5% i 2017.
- Drupal sikkerhedsproblemer faldt en smule fra 2% i 3.kvartal 2016 til 1,6% i 2017.
den aktuelle situation er ikke god nok, men takket være open source-bidragydere, der prøver hårdt på at overvinde problemerne, og vi har set nogle drastiske ændringer i PHP for sent. PHP 7.K blev lanceret sidste år med forskellige opdateringer og rettelser. Det bedste ved PHP 7.det drejer sig om sikkerhedsopgraderinger, der virkelig moderniserede sprogets sikkerhedsprotokol.
hvad denne PHP sikkerhed Tutorial indeholder?
jeg har arbejdet med PHP-sikkerheds-og ydelsesproblemer i meget lang tid og er meget aktiv i PHP-samfundet og spørger topudviklere om de tip og tricks, de bruger i deres live-projekter. Derfor er hovedformålet med denne PHP-sikkerhedsvejledning at gøre dig opmærksom på de bedste fremgangsmåder til sikkerhed i PHP-applikationer. Jeg vil definere følgende problemer og nævne mulige løsninger for dem.
- Opdater PHP regelmæssigt
- Cross site scripting (KSS)
- KKL injektion angreb
- Cross site anmodning forfalskning KSRF/CSRF
- Session kapring
- Skjul Filer fra bro.ser
- upload sikkert filer
- brug SSL-certifikater til https
- implementer PHP-apps på skyer
Bemærk: overvej det ikke som et komplet snydeark. Der skal være bedre måder, og mere unikke løsninger udviklere ville anvende på deres applikationer for at gøre det perfekt sikret.
PHP Security Best Practice
når du opretter en PHP-applikation, skal en internetingeniør være bekymret for bedste sikkerhedspraksis. En usikker internetapplikation giver hackere chancen for at tage værdifulde data, såsom klientoplysninger eller kreditkortoplysninger. Derudover kan et databrud have en ekstrem effekt på din organisations gyldighed og fremtidige operationer.
Opdater PHP regelmæssigt
lige nu er den mest stabile og nyeste version af PHP tilgængelig PHP 8. Jeg anbefaler, at du skal opdatere din PHP-applikation til denne nye. Hvis du stadig bruger PHP 5.6 eller 7, vil du have mange afskrivninger, mens du opgraderer PHP-apps. Du bliver også nødt til at opdatere din kode og ændre nogle funktionelle logikker som adgangskode hashing osv. Der er også nogle værktøjer til rådighed til at kontrollere afskrivningen af din kode og hjælpe dig med at migrere dem. Jeg har listet nogle værktøjer nedenfor:
- PHP Compatibility Checker
- PHP MAR
- Phan
hvis du bruger PHPStorm, kan du bruge PHP 7 Compatibility Inspection, som viser dig, hvilken kode der vil give dig problemer.
Læs Mere: PHP Hosting på Cloudveje
Cross-site scripting
Cross site scripting er en type ondsindet internetangreb, hvor et eksternt script injiceres i hjemmesidens kode eller output. Angriberen kan sende inficeret kode til slutbrugeren, mens bro.ser ikke kan identificere det som en betroet script. Dette angreb forekommer mest på de steder, hvor brugeren har mulighed for at indtaste og indsende data. Angrebet kan få adgang til cookies, sessioner og andre følsomme oplysninger. Lad os se på eksemplet på en GET-anmodning, der sender nogle data via URL:
URL: http://example.com/search.php?search=<script>alert('test')</script>$search = $_GET ?? null;echo 'Search results for '.$search;
du kan finde ud af dette angreb ved hjælp af htmlspecialchars. Også ved at bruge ENT_CITATER kan du undslippe enkelt-og dobbeltcitater.
$search = htmlspecialchars($search, ENT_QUOTES, 'UTF-8');echo 'Search results for '.$search;
i mellemtiden kan HSS-angreb også udføres via attributter, kodede Uri-ordninger og kodekodning.
Læs mere: Forebyggelse i Laravel
injektion angreb
injektion er den mest almindelige angreb i PHP scripting. En enkelt forespørgsel kan kompromittere hele applikationen. I injection attack forsøger angriberen at ændre de data, du sender via forespørgsler. Antag, at du direkte behandler brugerdata i forespørgsler, og pludselig bruger en anonym angriber i hemmelighed forskellige tegn til at omgå dem. Se nedenstående spørgsmål:
$sql = "SELECT * FROM users WHERE username = '" . $username . "';
$ – brugernavnet kan indeholde ændrede data, der kan beskadige databasen, herunder sletning af hele databasen med et øjeblik. Så hvad er løsningen? Bob. Jeg anbefaler, at du altid bruger forberedte udsagn. PDO hjælper dig med at sikre forespørgsler.
$id = $_GET ?? null;
forbindelsen mellem databasen og applikationen er lavet med nedenstående erklæring:
$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'dbusername', 'dbpassword');
du kan vælge brugernavn baseret på ovenstående ID, men vent! Her bliver koden ‘Hent data’ injiceret i din forespørgsel. Vær forsigtig med at undgå sådan kodning og brug forberedte udsagn i stedet:
$sql = "SELECT username, email FROM users WHERE id = ".$id." ;foreach ($dbh->query($sql) as $row) { printf ("%s (%s)\n", $row, $row);}
nu Kan du undgå ovenstående mulighed for injektion ved at bruge
$sql = "SELECT username, email FROM users WHERE id = :id";$sth = $dbh->prepare($sql, );$sth->execute();$users = $sth->fetchAll();
en god praksis er også at bruge ORM-lignende doktrin eller veltalende, da der er mindst mulighed for at injicere kvm-forespørgsler i dem.
Læs Mere: CSRF-angreb er helt anderledes end CSRF-angreb.Dette er en af de mest populære typer af CSRF-angreb, der kan bruges til at beskytte PHP-hjemmeside mod injektion
forfalskning på tværs af stedet. I CSRF attack, slutbrugeren kan udføre uønskede handlinger på de godkendte hjemmesider og kan overføre ondsindede kommandoer til stedet for at udføre enhver uønsket handling. CSRF kan ikke læse anmodningsdataene og er for det meste målrettet mod den tilstandsændrende anmodning ved at sende et link eller ændrede data i HTML-tags. Det kan tvinge brugeren til at udføre statslige skiftende anmodninger som at overføre penge, ændre deres e-mail-adresser osv. Lad os se denne URL, hvor GET-anmodninger sender penge til en anden konto:
GET http://bank.com/transfer.do?acct=TIM&amount=100 HTTP/1.1
hvis nogen nu ønsker at udnytte internetapplikationen, vil han / hun ændre URL ‘ en med navn og beløb som dette
http://bank.com/transfer.do?acct=Sandy&amount=100000
nu kan denne URL sendes via e-mail i enhver fil, billede osv., og angriberen kan bede dig om at hente filen
eller klikke på billedet. Og så snart du gør det, du straks ender med at sende enorme beløb, du aldrig vide om.
Session kapring
Session kapring er en bestemt type ondsindet internetangreb, hvor angriberen i hemmelighed stjæler brugerens session-ID. Sessions-ID ‘ et sendes til serveren, hvor det tilhørende $_SESSION-array validerer dets opbevaring i stakken og giver adgang til applikationen. Session kapring er mulig gennem et HSS-angreb, eller når nogen får adgang til mappen på en server, hvor sessionsdataene er gemt.
for at forhindre session kapring altid binde sessioner til din IP-adresse til:
$IP = getenv ( "REMOTE_ADDR" );
Hold øje med det, når du arbejder på localhost, da det ikke giver dig den nøjagtige IP, men :::1 eller :::127 type værdier. Du bør ugyldiggøre (unset cookie, unset session storage, fjerne spor) session hurtigt, når en overtrædelse opstår, og bør altid forsøge ikke at afsløre id ‘ er under nogen omstændigheder.
for cookies er den bedste praksis aldrig at bruge serialiserede data, der er gemt i en cookie. Hackere kan nemt manipulere cookies, hvilket resulterer i at tilføje variabler til dit omfang. Sikkert slette cookies som denne:
setcookie ($name, "", 1);setcookie ($name, false);unset($_COOKIE);
den første linje i koden sikrer, at cookie udløber. Den tredje linje fjerner cookien fra dit script.
Læs mere: Redis Server som PHP Session Handler
Skjul Filer fra Bro.Sereren
hvis du har brugt mikro-rammer af PHP, skal du have set den specifikke mappestruktur, der sikrer placeringen af filer korrekt. Rammer gør det muligt at have forskellige filer som controllere, modeller, konfigurationsfil(.yaml) osv. i den mappe, men det meste af tiden behandler ikke alle filerne, men de er tilgængelige for at se i Bro.sereren. For at løse dette problem skal du ikke placere dine filer i rodmappen, men i en offentlig mappe, så de ikke er tilgængelige hele tiden. Se på katalogstrukturen i Slim-rammen nedenfor:
sikker Upload af filer
fil upload er en nødvendig del af enhver bruger databehandling ansøgning. Men husk på nogle punkter, filer bruges også til KSS-angreb, som jeg allerede har forklaret ovenfor i artiklen. Når du vender tilbage til det grundlæggende, skal du altid bruge POSTANMODNINGEN i formularen og erklære egenskaben enctype=”multipart/form-data” i <form> tag. Valider derefter filtypen ved hjælp af finfo-klassen som denne:
$finfo = new finfo(FILEINFO_MIME_TYPE);$fileContents = file_get_contents($_FILES);$mimeType = $finfo->buffer($fileContents);
udviklere kan oprette deres egne brugerdefinerede og ultra-sikre filvalideringsregler, men nogle rammer som Laravel, Symfony og codeigniter har allerede foruddefinerede metoder til at validere filtyper.
lad os se på et andet eksempel. HTML-formularen skal være sådan:
<form method="post" enctype="multipart/form-data" action="upload.php"> File: <input type="file" name="pictures" multiple="true"> <input type="submit"></form>
og upload.php indeholder følgende kode:
foreach ($_FILES as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmpName = $_FILES; $name = basename($_FILES); move_uploaded_file($tmpName, "/var/www/project/uploads/$name"); }}
korrekt erklære UPLOAD_ERR og basename () kan forhindre mappe traversal angreb, men få andre valideringer – ligesom filstørrelse, fil omdøbe og gemme uploadede filer i privat placering – er også forpligtet til at styrke sikkerheden af de programmer.
Læs mere: Billede og Fil Upload i PHP
brug SSL-certifikater til HTTPS
alle de moderne bro.sere som Google Chrome, Opera, Firefoks og andre, anbefaler at bruge HTTPS-protokollen til internetapplikationer. HTTPs giver en sikret og krypteret adgang kanal for ikke tillid sites. Du skal medtage HTTPS ved at installere SSL-certifikat på din hjemmeside. Det styrker også dine applikationer mod angreb og forhindrer hackere i at læse transporterede data ved hjælp af koder. Vi tilbyder gratis SSL-certifikater med et enkelt klik, som er gyldige i 90 dage, og du kan nemt tilbagekalde eller forny dem med et klik. Du kan følge vejledningerne til opsætning af SSL-certifikater i dine PHP -, Magento-og Drupal-applikationer.
Deploy PHP Apps On Clouds
Hosting er det sidste og altafgørende trin for enhver internetapplikation, da du altid opretter projektet på lokale PHP-servere og implementerer dem på live-servere, der tilbyder enten delt, sky eller Dedikeret hosting. Jeg anbefaler altid at bruge cloud hosting som DigitalOcean, Linode. De er hurtige, sikre og sikre til enhver form for hjemmeside og applikation. De leverer altid sikret lag for at forhindre DDOS, Brute force og phishing-angreb, som er meget skadelige for internetapplikationer.
du vil måske også synes om: Fallgrubs of Laravel Shared Hosting til dine projekter
for at implementere PHP-applikationer på cloud-servere skal du have gode evner til at oprette kraftfulde netstakke som LAMP eller LEMP, hvilket ofte koster dig tid og budget for professionelle. I stedet giver cloud managed PHP og hosting platform dig den nemme måde at implementere servere med Thunderstack inden for få klik på de ovennævnte cloud-udbydere. Thunderstack hjælper din PHP-applikation med at være helt sikret mod forskellige ondsindede angreb og garanterer optimeret ydeevne.
Læs mere: forbedret Cloud-Staging miljø er nu tilgængelig for alle brugere
Document Root Setup
document root for PHP programmer på enhver server skal være indstillet til var/h/html, så brugerne kan få adgang til din hjemmeside via bro.ser. Men i nogle tilfælde, når du udvikler API `er med rammer som Laravel, Symfony og Slim, skal du opdatere hjemmesiden til ‘ /public folder.
/offentlig tjener output af ansøgning ligner simpel PHP hjemmeside med indeks.php-fil. Formålet med at indstille den til var/html/public er at skjule de følsomme filer som .htaccess og .env, der indeholder miljøvariabler og legitimationsoplysninger for database, mail, betalings-API ‘ er.
også rammer som Laravel, Symfony anbefaler ikke at flytte alle dine filer til rodmappen, i stedet for at oprette en god mappestruktur for at gemme relaterede filer som visning, modeller og controllere er en mere rimelig tilgang.
Log alle fejl og skjul i produktionen
når du har udviklet hjemmesiden og implementeret på live server. Den første ting du skal gøre er at deaktivere visning af fejl, fordi hackere kan få samme værdifulde oplysninger fra fejlene. Indstil denne parameter i din php.INI-fil:
display_errors=Off
nu, efter at gøre display off, log PHP fejl til en bestemt fil til fremtidige behov:
log_errors=Onerror_log=/var/log/httpd/php_scripts_error.log
det er klart, at du kan ændre filnavnet, som du vil.
du vil måske også synes om: Simplificer Laravel fejllogning med PHP Rollbar Integration
hvidliste offentlig IP til PHP
når du arbejder med PHP apps, skal du ofte opsætte min database i interne scripts såvel som i mine klienter. De fleste klienter bruges til at oprette en ekstern forbindelse, der har brug for IP-adressen eller et andet værtsnavn, der leveres af hostingserveren for at oprette forbindelse.
den offentlige IP til fjernforbindelsen skal være hvidlistet på din hostingserver, så en anonym bruger ikke kan få adgang til databasen. For eksempel på Skyveje kan du hvidliste IP som:
nu Kan du oprette forbindelse til arbejdsbænken for at arbejde eksternt med databasen.
spørgsmål: hvordan testes PHP-sikkerhed?
A: der er få kodescannerværktøjer tilgængelige på markedet, der kan hjælpe dig med at analysere kodekvaliteten og sikkerheden i dine PHP-applikationer. PHP finder (PMF) er et af de bedste sikkerhedstestværktøjer, der hjælper med at finde ondsindede koder i filerne. Du kan også bruge RIPS samt, som er en populær kode analyseværktøj, der hjælper med at finde kode sårbarheder i realtid.
spørgsmål: Hvordan sikres PHP-databasesikkerhed?
A: for at sikre databasesikkerhed skal du altid bruge praksis som f.eks.
spørgsmål: Hvilken er en sikker metode til at kryptere adgangskode i PHP?
A: Md5 er forkortelsen for Message Process 5, og sha1 er forkortelsen for Secure Hash Algorithm 1. De bruges begge til at kryptere strenge. Når en streng er blevet krypteret, bliver det gentagne at afkode det. Md5 og sha1 er usædvanligt nyttige, når du gemmer adgangskoder i databasen.
spørgsmål: Hvad er en PHP-sårbarhed?
A: PHP Object Injection er en sårbarhed på applikationsniveau, der synes at gøre det muligt for en angriber at udføre forskellige former for skadelige overgreb, såsom Kodeinjektion, indsprøjtning af et objekt, Stigennemgang og lammelsesangreb.
et DDoS-angreb kompromitterer flere computersystemangreb. De sædvanlige mål er servere, hjemmesider eller andre netværksressourcer.
dette sker, når brugerleveret input ikke administreres, før det sendes til PHP-funktionen unserialisering (). Da PHP tillader objektserialisering, kan aggressorer passere ad hoc-serialiserede strenge til et forsvarsløst opkald uden serialisering ().
Indpakning!
nå, PHP sikkerhed bedste praksis er et meget stort emne. Udviklere fra hele verden har tendens til at udvikle forskellige brugssager til at sikre internetapps. Mens mange virksomheder kører forskellige bounty-programmer for at finde ud af sikkerhedshuller og sårbarheder i deres applikationer og dermed belønne de sikkerhedseksperter, der påpeger kritiske smuthuller i applikationerne. Denne artikel dækker grundlæggende PHP-sikkerhedsproblemer, for at hjælpe dig med at forstå, hvordan du sikrer dine PHP-projekter mod forskellige ondsindede angreb. Jeg vil også skrive om nogle flere PHP sikkerhedstips og tricks i fremtiden også. Indtil da kan du bidrage med dine tanker og sikkerhedspraksis i kommentarfeltet nedenfor.
del denne artikel
kundeanmeldelse på
“hosting har en af de bedste kundeservice og hosting hastighed”
Sanjit C
er en PHP Community Manager hos – en administreret PHP Hosting Platform. Udover sit arbejdsliv elsker han film og rejser. Du kan e-maile ham på
få forbindelse på: kvidre Community Forum