végső PHP biztonsági bevált gyakorlatok

php biztonsági útmutató

mivel a PHP szinte minden weboldal gerince, ezért a PHP biztonságát nem szabad elhanyagolhatónak tekinteni. A PHP fejlesztőknek azonban megvan az a kiváltságuk, hogy elkerüljék az olyan gyakori fenyegetéseket, mint a webhelyek közötti kérelemhamisítás, az SQL injekciók és az adatok manipulálása. Mindez jól jön a PHP beépített biztonsági funkcióinak segítségével, amelyek megkönnyítik a fejlesztők számára a webhely védelmét.

azt mondják, hogy a PHP A legerősebb szerveroldali nyelv, a PHP a világ webének 80%-át használja, 10 millió domainnel. Ezért maga is meg kell érteni, hogy a PHP segít a támadók elleni védelemben.

a webes alkalmazások mindenféle hamis támadási kísérletből történő biztosítása a webfejlesztő végső kötelessége. Meg kell építeni a webes alkalmazások védő ahhoz, hogy nincs biztonsági problémák vagy kiskapukat.

a PHP A leggyakrabban használt szerveroldali webes programozási nyelv az egész világon. A különböző PHP alkalmazások megosztják kódjuk és szkriptjeik különböző részeit más webes alkalmazásokkal. Abban az esetben, ha a megosztott kódrészlet sérülékenynek bizonyul, az adott megosztott kódot használó összes alkalmazás veszélybe kerül, és sebezhetőnek tekinthető.

Tartsa biztonságban alkalmazásait a felhőben

a Cloudways 2FA-t, ingyenes SSL-t és fejlettebb biztonsági funkciókat kínál a felügyelt kiszolgálókon, amelyek biztonságban tartják az alkalmazást.

a PHP a leginkább kritizált szkriptnyelv a biztonság szempontjából. A fejlesztők és a minőségbiztosítási szakértők jelentős része úgy gondolja, hogy a PHP nem rendelkezik robusztus technikákkal az alkalmazások biztonságához. Az ítéletnek van némi alapja is, mert a PHP a legrégebbi és széles körben használt nyelv a webalkalmazások fejlesztéséhez. De a PHP 5.6 óta hosszú ideig nem láttunk semmilyen nagyobb frissítést a biztonsággal kapcsolatban, ezért a nyelv bizonyos biztonsági problémákkal szembesül.

mennyire biztonságos a PHP

a PHP ugyanolyan biztonságos, mint bármely más fő nyelv. A PHP ugyanolyan biztonságos, mint bármely nagyobb szerveroldali nyelv. Az elmúlt években bevezetett új PHP keretrendszerekkel és eszközökkel most könnyebb, mint valaha kezelni a csúcsminőségű biztonságot.

ha összehasonlítást végzünk, a PHP egyenletesen biztosított. A Rails, a Java, A Javascript és más nyelvek mindegyike sebezhetőséget mutatott az évek során. “Ha olyan nyelvet talál, amely nem rendelkezik valamilyen alakú vagy formájú sebezhetőséggel, akkor tökéletesen írhat biztonságos kódot a PHP-be.

biztonsági problémák a PHP CMS-ben

az olyan népszerű CMS-ek, mint a WordPress, a Joomla, a Magento és a Drupal, PHP-ben épültek, és a Sucuri szerint a PHP CMS legtöbb sebezhetősége az év során derült fényre 2017:

  • a WordPress biztonsági problémái az 74% – ról az 2016 Q3-ról 83% – ra emelkedtek az 2017-ban.
  • a Joomla biztonsági problémái az 17 2016 Q3% – ról az 13.1% – ra csökkentek az 2017-ban.
  • Magento biztonsági kérdések kismértékben emelkedett 6% Q3 2016 6.5% 2017-ben.
  • Drupal biztonsági kérdések enyhén csökkent 2% Q3 2016 1.6% – ban 2017.

CMS fertőzés összehasonlítása

CMS fertőzés összehasonlítása

a jelenlegi helyzet nem elég jó, de hála a nyílt forráskódú közreműködőknek, akik keményen próbálják leküzdeni a problémákat, és drasztikus változásokat láttunk a PHP-ben az utóbbi időben. PHP 7.az x-et tavaly indították el különféle frissítésekkel és javításokkal. A legjobb dolog a PHP 7-ben.x a biztonsági frissítésekre vonatkozik, amelyek valóban megújították a nyelv biztonsági protokollját.

mit tartalmaz ez a PHP biztonsági oktatóanyag?

nagyon régóta dolgozom a PHP biztonsági és teljesítményproblémáin, nagyon aktív vagyok a PHP közösségben, és a legjobb fejlesztőket kérdezem az élő projektjeikben használt tippekről és trükkökről. Ezért ennek a PHP biztonsági oktatóanyagnak az a fő célja, hogy megismertesse Önt a PHP webes alkalmazások biztonságával kapcsolatos legjobb gyakorlatokkal. A következő problémákat fogom meghatározni,és megemlítem a lehetséges megoldásokat.

  • rendszeresen frissítse a PHP-t
  • Cross site scripting (XSS)
  • SQL Injection támadások
  • cross site request hamisítás XSRF/CSRF
  • Session eltérítés
  • fájlok elrejtése a böngészőből
  • fájlok biztonságos feltöltése
  • SSL tanúsítványok használata HTTPS-hez
  • PHP alkalmazások telepítése felhőkön

Megjegyzés: Kérjük, ne tekintse teljes Csalólapnak. Jobb módoknak kell lenniük, és több egyedi megoldást kell alkalmazniuk a fejlesztőknek az alkalmazásaikra, hogy tökéletesen biztonságosak legyenek.

PHP security Best Practice

PHP webalkalmazás létrehozásakor a webmérnöknek a legjobb biztonsági gyakorlatokkal kell foglalkoznia. A nem biztonságos webes alkalmazás lehetőséget ad a hackereknek értékes adatok, például ügyféladatok vagy hitelkártya-adatok megszerzésére. Ezenkívül az adatok megsértése rendkívüli hatással lehet a szervezet érvényességére és jövőbeli működésére.

rendszeresen frissítse a PHP-t

jelenleg a PHP legstabilabb és legfrissebb verziója a PHP 8. Azt javaslom, hogy frissítse a PHP alkalmazást erre az újra. Ha még mindig a PHP 5.6 vagy 7, akkor lesz, amelyek egy csomó elavult, miközben frissíti a PHP apps. Frissítenie kell a kódot, és módosítania kell néhány funkcionális logikát, például a jelszó kivonatolását stb. Vannak még néhány eszköz áll rendelkezésre, hogy ellenőrizze a Elavult a kódot, és segít a migráló azokat. Az alábbiakban felsoroltam néhány eszközt:

  1. PHP kompatibilitás ellenőrző
  2. PHP MAR
  3. Phan

ha Phpstormot használ, akkor használhatja a PHP 7 kompatibilitási ellenőrzést, amely megmutatja, hogy melyik kód okoz problémákat.

Tudjon Meg Többet: PHP tárhely a Cloudways-en

Cross-site scripting (XSS)

Cross site scripting egy olyan rosszindulatú webes támadás, amelyben egy külső szkriptet fecskendeznek be a webhely kódjába vagy kimenetébe. A támadó küldhet fertőzött kódot a végfelhasználó, míg a böngésző nem tudja azonosítani, mint egy megbízható script. Ez a támadás elsősorban azokon a helyeken fordul elő, ahol a felhasználó képes adatokat bevinni és benyújtani. A támadás hozzáférhet a cookie-khoz, a munkamenetekhez és a böngészővel kapcsolatos egyéb érzékeny információkhoz. Nézzük meg a GET kérés példáját, amely néhány adatot küld az URL-en keresztül:

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

a htmlspecialchars segítségével kitalálhatja ezt a támadást. Az ENT_QUOTES használatával elkerülheti az egy-és dupla idézőjeleket is.

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

eközben az XSS támadások attribútumokon, kódolt URI sémákon és kódkódoláson keresztül is végrehajthatók.

További információ: az XSS megelőzése a Laravelben

SQL injekciós támadások

az SQL injekció a leggyakoribb támadás a PHP szkriptekben. Egyetlen lekérdezés veszélyeztetheti az egész alkalmazást. Az SQL injection attack alkalmazásban a támadó megpróbálja megváltoztatni a lekérdezéseken keresztül továbbított adatokat. Tegyük fel, hogy közvetlenül feldolgozza a felhasználói adatokat SQL lekérdezésekben, és hirtelen egy névtelen támadó titokban különböző karaktereket használ a megkerülésére. Lásd az alább említett SQL lekérdezést:

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

a $felhasználónév módosított adatokat tartalmazhat, amelyek károsíthatják az adatbázist, beleértve az egész adatbázis törlését egy szempillantás alatt. Szóval, mi a megoldás? OEM. Azt javaslom, hogy mindig használjon előkészített nyilatkozatokat. Az OEM segít az SQL lekérdezések biztosításában.

$id = $_GET ?? null;

az adatbázis és az alkalmazás közötti kapcsolat az alábbi nyilatkozattal történik:

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

a fenti azonosító alapján kiválaszthatja a felhasználónevet, de várjon! Itt az SQL kód ‘GET data’ kerül befecskendezésre a lekérdezésben. Ügyeljen arra, hogy elkerülje az ilyen kódolást, és inkább elkészített utasításokat használjon:

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

most elkerülheti a fenti SQL befecskendezési lehetőséget a

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

használatával is jó gyakorlat az ORM-szerű doktrína vagy az eloquent használata, mivel a legkevesebb lehetőség van SQL lekérdezések befecskendezésére bennük.

Tudjon Meg Többet: Védje a PHP webhelyet az SQL Injection-től

Cross site request hamisítás XSRF/CSRF

a CSRF támadás egészen más, mint az XSS támadások. A CSRF támadás során a végfelhasználó nem kívánt műveleteket hajthat végre a hitelesített webhelyeken, és rosszindulatú parancsokat továbbíthat a webhelyre a nemkívánatos műveletek végrehajtása érdekében. A CSRF nem tudja elolvasni a kérés adatait, és többnyire az állapotváltoztató kérelmet célozza meg, bármilyen hivatkozás vagy módosított adat HTML-címkékben történő elküldésével. Ez arra kényszerítheti a felhasználót, hogy állami változó kéréseket hajtson végre, például pénzátutalást, e-mail címük megváltoztatását stb. Lássuk ezt az URL-t, amelyben a GET requests pénzt küld egy másik számlára:

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

most, ha valaki ki akarja használni a webes alkalmazást, akkor megváltoztatja az URL-t névvel és összeggel, mint ez

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

most ez az URL elküldhető e-mailben bármilyen fájlban, képben stb., és a támadó kérheti, hogy töltse le a

fájlt, vagy kattintson a képre. És amint ezt megteszi, azonnal hatalmas mennyiségű pénzt küld, amiről soha nem tud.

munkamenet-eltérítés

a munkamenet-eltérítés egy bizonyos típusú rosszindulatú webes támadás, amelyben a támadó titokban ellopja a felhasználó munkamenet-azonosítóját. Ez a munkamenet-azonosító arra a kiszolgálóra kerül, ahol a társított $_SESSION tömb ellenőrzi a veremben lévő tárhelyét, és hozzáférést biztosít az alkalmazáshoz. A munkamenet-eltérítés XSS támadással lehetséges, vagy ha valaki hozzáférést kap a szerver mappájához, ahol a munkamenet adatait tárolják.

a munkamenetek eltérítésének megakadályozása érdekében mindig kösse össze a munkameneteket az IP-címével:

$IP = getenv ( "REMOTE_ADDR" );

figyeljen rá, amikor a localhoston dolgozik, mivel nem adja meg a pontos IP-t, hanem :::1 vagy :::127 típusú értékeket. A munkamenetet gyorsan érvénytelenítenie kell (cookie-k törlése, munkamenet-Tárolás törlése, nyomok eltávolítása), amikor jogsértés történik, és mindig meg kell próbálnia, hogy semmilyen körülmények között ne tegye ki az azonosítókat.

a cookie-k esetében a legjobb gyakorlat az, hogy soha ne használja a cookie-ban tárolt sorosított adatokat. A hackerek könnyen manipulálhatják a cookie-kat, ami változókat ad hozzá a hatóköréhez. Biztonságosan törölje a cookie-kat, mint ez:

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

a kód első sora biztosítja, hogy a cookie lejár a böngészőben, a második sor a cookie eltávolításának szokásos módját mutatja be (így nem tárolhat hamisat egy cookie-ban). A harmadik sor eltávolítja a cookie-t a szkriptből.

Olvass tovább: Redis Server mint PHP munkamenet kezelő

fájlok elrejtése a böngészőből

ha a PHP mikro-keretrendszereit használta, akkor látnia kell azt a könyvtárszerkezetet, amely biztosítja a fájlok megfelelő elhelyezését. Keretek lehetővé teszik, hogy a különböző fájlokat, mint a vezérlők, modellek, konfigurációs fájl (.yaml) stb Abban a könyvtárban, de a legtöbb időt a böngésző nem dolgozza fel az összes fájlt, mégis rendelkezésre állnak, hogy a böngészőben. A probléma megoldásához a fájlokat nem a gyökérkönyvtárba, hanem egy nyilvános mappába kell helyeznie, hogy azok ne legyenek folyamatosan elérhetők a böngészőben. Nézze meg az alábbi Slim keretrendszer könyvtárszerkezetét:

vékony könyvtárszerkezet

slim könyvtár felépítése

fájlok biztonságos feltöltése

a fájlok feltöltése minden felhasználói adatfeldolgozó alkalmazás szükséges része. De ne feledje, hogy bizonyos pontokon a fájlokat XSS támadásokhoz is használják, amint azt a cikkben már fentebb kifejtettem. Visszatérve az alapokhoz, mindig használja a POST kérést az űrlapon, és deklarálja az enctype=”multipart/form-data” tulajdonságot < form> címkében. Ezután érvényesítse a fájltípust a finfo osztály segítségével:

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

a fejlesztők létrehozhatják saját egyedi és rendkívül biztonságos fájlellenőrzési szabályaikat, de néhány keretrendszer, például a Laravel, a Symfony és a codeigniter már előre meghatározott módszerekkel rendelkezik a fájltípusok érvényesítésére.

nézzünk egy másik példát. Az űrlap HTML-jének így kell lennie:

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

és feltölteni.a php a következő kódot tartalmazza:

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

az UPLOAD_ERR és a basename () helyes deklarálása megakadályozhatja a címtáráthaladási támadásokat, de kevés más érvényesítés – például a fájlméret, a fájl átnevezése és a feltöltött fájlok privát helyen történő tárolása – szintén szükséges az alkalmazások biztonságának megerősítéséhez.

Tudjon meg többet: Kép – és fájlfeltöltés PHP-ben

SSL tanúsítványok használata HTTPS-hez

minden modern böngésző, mint a Google Chrome, Opera, Firefox és mások, a HTTPS protokoll használatát javasolja webes alkalmazásokhoz. A HTTPs biztonságos és titkosított hozzáférési csatornát biztosít a nem megbízható webhelyek számára. Meg kell adnia a HTTPS-t az SSL tanúsítvány telepítésével a webhelyére. Ezenkívül erősíti a webes alkalmazásokat az XSS támadások ellen, és megakadályozza, hogy a hackerek kódokkal olvassák a szállított adatokat. A Cloudways egy kattintással ingyenes SSL tanúsítványokat biztosít, amelyek 90 napig érvényesek, és egy kattintással könnyen visszavonhatja vagy megújíthatja őket. A PHP, WordPress, Magento és Drupal alkalmazásokban követheted az SSL tanúsítványok beállítására vonatkozó útmutatókat.

PHP alkalmazások telepítése felhőkön

a tárhely minden webes alkalmazás utolsó és legfontosabb lépése, mivel a projektet mindig helyi PHP szervereken hozza létre, és élő szervereken telepíti, amelyek megosztott, felhőalapú vagy dedikált tárhelyet kínálnak. Mindig azt javaslom, hogy olyan felhőalapú tárhelyet használjon, mint a DigitalOcean, Linode, AWS. Gyorsak, biztonságosak és biztonságosak bármilyen weboldal és alkalmazás számára. Mindig biztonságos réteget biztosítanak a DDoS, a Brute force és az adathalász támadások megelőzésére, amelyek rendkívül károsak a webes alkalmazások számára.

még tetszhet: a Laravel megosztott tárhelyének buktatói a projektjeihez

a PHP alkalmazások felhőszervereken történő telepítéséhez jó Linux-ismeretekkel kell rendelkeznie ahhoz, hogy olyan erős webes stackeket hozzon létre, mint a LAMP vagy a LEMP, ami gyakran időt és költségvetést jelent a Linux szakemberek számára. Ehelyett a Cloudways managed PHP és a MySQL hosting platform egyszerű módot kínál a kiszolgálók telepítésére a Thunderstack segítségével néhány kattintással a fent említett felhőszolgáltatókra. A Thunderstack segít abban, hogy a PHP alkalmazás teljesen védve legyen a különböző rosszindulatú támadásoktól, és garantálja az optimális teljesítményt.

További információ: a továbbfejlesztett Cloudways Staging környezet mostantól minden felhasználó számára elérhető

Document Root Setup

a PHP alkalmazások dokumentumgyökérét minden kiszolgálón var/www/html értékre kell állítani, hogy a felhasználók a böngészőn keresztül hozzáférhessenek az Ön webhelyéhez. De bizonyos esetekben, amikor API-kat fejleszt olyan keretrendszerekkel, mint a Laravel, a Symfony és a Slim, frissítenie kell a webroot-ot `/public folder.

/ nyilvános szolgálja a kimeneti alkalmazás hasonló egyszerű PHP honlapján index.php fájl. A webroot var/www/html/public beállításának célja az érzékeny fájlok elrejtése .htaccess és .env, amely tartalmazza az adatbázis, a mail, a Fizetési API-k környezeti változóit és hitelesítő adatait.

az olyan keretrendszerek, mint a Laravel, a Symfony azt javasolják, hogy ne helyezze át az összes fájlt a gyökérmappába, ehelyett egy szép könyvtárstruktúra létrehozása a kapcsolódó fájlok, például a nézet, a modellek és a vezérlők mentéséhez ésszerűbb megközelítés.

jelentkezzen be az összes hibát, és elrejteni a termelés

miután kifejlesztette a honlap és telepített élő szerver. Az első dolog, amit meg kell tennie, hogy letiltja a hibák megjelenítését, mert a hackerek ugyanolyan értékes információkat kaphatnak a hibákból. Állítsa be ezt a paramétert a php-ben.ini fájl:

display_errors=Off

most, miután kikapcsolta a kijelzőt, naplózja a PHP hibákat egy adott fájlba a jövőbeli igényekhez:

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

nyilvánvaló, hogy meg lehet változtatni a fájl nevét, amit akar.

Ön is szeretne: egyszerűsítse Laravel hiba naplózás PHP Rollbar integráció

Whitelist nyilvános IP MySQL

amikor dolgozik PHP alkalmazások gyakran kell beállítani mysql adatbázis belső szkriptek, valamint a MySQL kliensek. A legtöbb ügyfél használják, hogy hozzanak létre MySQL távoli kapcsolat, amelynek szüksége van az IP-címet, vagy más hostname által biztosított tárhely szerver kapcsolat létrehozásához.

a távoli Mysql kapcsolat nyilvános IP-címét engedélyezőlistára kell tenni a tárhelyszerveren, hogy egy névtelen felhasználó ne férhessen hozzá az adatbázishoz. Például a Cloudways-en engedélyezheti az IP-t:

most csatlakoztathatja az SQLyog vagy a Mysql workbench alkalmazást, hogy távolról működjön az adatbázissal.

K: Hogyan teszteljük a PHP biztonságát?

V: kevés olyan kódolvasó eszköz áll rendelkezésre a piacon, amely segíthet a PHP alkalmazások kódminőségének és biztonságának elemzésében. A PHP Malware Finder (PMF) az egyik legfontosabb biztonsági tesztelő eszköz, amely segít megtalálni a rosszindulatú kódokat a fájlokban. Használhatja a RIP-eket is, amely egy népszerű kódelemző eszköz, amely segít valós időben megtalálni a kód sebezhetőségét.

K: Hogyan biztosítható a PHP adatbázis biztonsága?

V: az adatbázis biztonságának biztosítása érdekében mindig használjon olyan gyakorlatokat, mint az SQL injekcióvédelem, az adatbázis tűzfalak, a rendszeres adattitkosítások és hasonló egyéb.

k: melyik biztonságos módszer a jelszó titkosítására a PHP – ben?

A: Az Md5 a Message Process 5 rövidítése, az sha1 pedig a Secure Hash Algorithm 1 rövidítése. Mindkettőt a karakterláncok titkosítására használják. Miután egy karakterláncot titkosítottak, ismétlődővé válik a dekódolása. Md5 és sha1 rendkívül hasznos, ha tárolja a jelszavakat az adatbázisban.

K: Mi a PHP biztonsági rése?

A: A PHP Object Injection egy alkalmazásszintű biztonsági rés, amely úgy tűnik, hogy lehetővé teszi a támadó számára, hogy különféle káros támadásokat hajtson végre, például Kódinjekciót, SQL-injekciót, Útvonalátjárást és szolgáltatásmegtagadást.

egy DDoS támadás több számítógépes rendszer támadását veszélyezteti. A szokásos célok szerverek, webhelyek vagy más hálózati erőforrások.

ez akkor fordul elő, ha a felhasználó által megadott bemenetet nem kezelik, mielőtt átadnák az unserialize() PHP függvénynek. Mivel a PHP engedélyezi az objektumok sorosítását, az agresszorok ad-hoc sorosított karakterláncokat adhatnak át egy védtelen unserialize() hívásnak.

Csomagolok!

Nos, a PHP biztonsági bevált gyakorlatok nagyon hatalmas téma. A világ minden tájáról érkező fejlesztők általában különböző felhasználási eseteket fejlesztenek ki a webes alkalmazások biztonsága érdekében. Míg sok vállalat különböző bounty programokat futtat, hogy megtudja a biztonsági réseket és sebezhetőségeket az alkalmazásaikban, és így jutalmazza azokat a biztonsági szakértőket, akik rámutatnak az alkalmazások kritikus kiskapukra. Ez a cikk az alapvető PHP biztonsági kérdéseket ismerteti, hogy segítsen megérteni, hogyan védheti meg PHP projektjeit a különböző rosszindulatú támadásoktól. A jövőben néhány további PHP biztonsági tippet és trükköt is írok. Addig is hozzájárulhatsz gondolataidhoz és biztonsági gyakorlataidhoz az alábbi megjegyzések részben.

ossza meg véleményét a megjegyzés részben. Hozzászólás most

ossza meg ezt a cikket

ügyfél felülvizsgálata itt:

” Cloudways hosting az egyik legjobb ügyfélszolgálat és tárhely sebesség ”

Sanjit C

Shahroze Nawaz

Shahroze egy PHP Közösségi menedzser a Cloudways – nél-egy menedzselt PHP Hosting Platform. A munkája mellett szereti a filmeket és az utazást. Akkor írjon neki

Get Connected on: Twitter közösségi fórum

Leave a Reply

Az e-mail-címet nem tesszük közzé.