Fórumok
Sziasztok!
Keresek olyan könyvet vagy egyéb oktatóanyagot, ami a biztonságos PHP-MySQL-JavaScript alkalmazások fejlesztését mutatja be akár gyakorlati példákon keresztül is. Van a témában két könyvem, de mindkettő 2009/2010-es kiadásu, úgyhogy én valami olyat keresek, ami ma is aktuális lehet.
Hozzászólások
Értem, hogy mit szeretnél, de. A fejlesztési technológiák változtak az egyik irányba, érdemes őket használni: table helyett div, css2-3-4-5..., natív app helyett valami bootstrap vagy Laravel (ne!) + doctrine. A biztonságtechnika pedig elmozdult (a világ által indukálva) egy másik dimenzióban valamerre. Spam-ek ellen küzdünk, biztonságos beléptetés kell, de már nem SMS, hanem pl. Google Authenticator. Ezt összefoglaló szakirodalomból nehéz megtalálni, mert ahogy létezik LAMP (mert összefügg), nem létezik "Világ minden problémájára megoldás" könyv. A developer skilleket neked kell secu. skillekkel kiegészíteni.
Már ha biztonság alatt ugyanazt értjük. Ha mégis félreértettem és hibatűrő, könnyen ellenőrizhető, fast-deploy + dont break alkalmazást csinálnál, akkor könnyebb a dolgod: valamelyik hithű keretrendszert kiválasztod... majd rájössz hogy írni kellene egy sajátot... majd mégis választasz egy lightwight fajtát. De ezen az úton neked kell végigmenni.
----------------------------
ps: bocs, kijött belőlem.
én nem ismerem de cimbi laravel hívő. néhány pontban leírnád mi vele a baj/rossz tapasztalatod?
Univerzális fejlesztéshez nagyon jó, kezdőknek nagyon jó. Ha speciális dolgot csinálnál vele, lehet mélyen kell beledolgozni. Sokkal egyszerűbb lehet egy saját routing, saját autoloader, saját DepInj, saját template.
Saját minden?! :O Fentebb azt hittem, hogy mondjuk Symfonyt ajánlasz neki. Saját dolgok írásából persze sokat lehet tanulni, de végül mind szemétdombra kerül. Hacsak nem próbálsz ki minden elérhető megoldást és írsz egy jobbat, de ez elég ritka.
Ha a biztonságon van a hangsúly, akkor OWASP top 10 mondjuk kiindulásnak jó lesz, aztán utánanézhet, hogy azokra milyen standard megoldások vannak (pl. prepared statement: PDO -> Doctrine DBAL -> Doctrine ORM).
"Világ minden problémájára megoldás könyv" - majdnem létezik, az a könyvsorozat címe, hogy "Tudományok és alkalmazásuk", ennek a "Világítástechnika és táblaelhelyezés" fejezetét alkottuk meg még egyetemistaként :-D
Table-k helyett már régóta div-eket használok és CSS-t, de azokat a legtöbbször nem én írom meg. Sosem használtam keretrendszereket, mert a saját kódomat jobban ismerem, így az általános célokra mindig saját keretrendszert készítettem. Amiben szeretnék fejlődni és új dolgokat tanulni, az főleg az adatbázisokban tárolt személyes adatok védelme és az alkalmazás réseinek a minimalizálása (az XSS-en és az SQL-Injection-ön felül), illetve a legújabb programozási megoldások ismerete (példa: kezdetben $HTTP_GET_VARS['valami']-t kellett használnom, majd később már $_GET['valami']), mert a PHP 5.x-nél leragadtam és az elmúlt években nem volt energiám követni, hogy mi lett benne depricated és removed.
A biztonságos beléptetés, stb. már másik tészta lenne, de a célom az lenne első sorban, hogy amit írok és felrakom egy szerverre annak ne legyen tele a logja a depriciated bejegyzésekkel és ma is biztonságosnak minősített függvényeket használjak.
Ha table helyett divet használsz nem lesz biztonságosabb az oldal vagy a web app, nincs összefüggés.
Ellenőrízd szigorúan az öszes bemenő paramétert (POST, GET, PUT, SESSION, stb) szűrd, castold, ugyanezt játszd el azokkal a változókkal is amiket az sql lekérdezésekben használsz, és már sokat tettél az alkalmazás biztonságáért.
A keretrendszerek ebben (is) segítenek, megoldásokat szállítanak a fentiekre (is) persze ezeket is lehet nem, vagy rosszul használni. Attól hogy valami keretrendszerben - laravel, zend, stb - készült még jelenti azt hogy biztonságosabb mint egy saját motor.
Jó hozzáállásnak tartom, hogy zavarnak a szerver logban a deprecated bejegyzések. Állítsd a saját környezetedben ugyanazt a szószátyár módot vagy magasabbat mint ami az éles helyen is van, és amire azt mondja hogy deprecated azt meg kell kerseni és ki kell cserélni a jelenleg ajánlott nem elavult cuccra.
A kész alkalmazást be lehet vizsgáltatni erre szakosodott szakikkal is, ha még a forrást is odaadod nekik elemezgetni, még hatékonyabban tudnak kötözködni:) Persze ez plusz költségekkel jár, és így sem lesz 100% a biztonság, mert soha nem az.
A table-div dolgot csak azért írtam, mert fentebb hoztak erre példát és csak leírtam, hogy már jóideje nem table-val oldom meg az oldal elrendezését :)
Webes biztonság témakörében - ha még nem ismernéd - az OWASP közösség írásai kötelezők: https://owasp.org
OWASP TOP10: https://owasp.org/www-project-top-ten/
Cheat sheet-ek: https://owasp.org/www-project-cheat-sheets/cheatsheets/
Ha használsz valamilyen keretrendszert, akkor érdemes annak az API-ját teljes körűen megismerni és használni, mert egy csomó biztonsági funkciót már ezzel megkapsz (pl input validáció, XSS/CSRF protection, stb).
Vagy keress rá erre: serverless
Itt kiesik a PHP és MySQL, viszont emiatt is biztonságosabb. Marad helyette a Javascript, HTML, CSS. De nem mindenre jó.
Én eslő körben ezeket javaslom átnézni: https://owasp.org/www-project-top-ten/
Illetve: https://cheatsheetseries.owasp.org/
A leggyengébb láncszem az ember, nem az adott programnyelv vagy framework. Tanuld meg, hogyan lehet leültetni/kihasználni a rendszert/alkalmazást => ültess le/használj ki egy tesztrendszert, alakíts ki egy mini lab környezetet dedikáltan erre a saját hálózatodban.
Az OWASP 10 pedig valóban alap. Ha innen indulsz ki 1 lépést tettél előre a biztonság felé a többi pedig sok gyakorlás és tanulás után alakul ki. Rengeteg kapcsolódó anyag van. A legelső lépés egyébként bármerre is, a keresők használatának megtanulása, hogyan találsz publikus információkat (akár tananyagokat is), amelyek tálcán kínálnak neked mindent....
Érdekes lehet abból a szempontból is mérlegelni, hogy mi ezzel a célod.
Lehet, hogy nem is igazán arra kellene koncentrálnod, hogy a PHP--MySQL--JavaScript keretein belül ismerd meg az aktuális biztonsági (és egyéb "best practice") ajánlásokat és véleményeket (néha csak: divatokat), hanem az absztraktabb trendeket is meg kéne vizsgálnod, hogy értsd, mit miért csinálnak: pl. OAuth/2stepAuth, Serverless/SaaS stb.
(Azt már csak zárójelben biggyesztem ide, anélkül, hogy bármi konkrétumot tudnék a motivációdról, hogy hátha valami mobilfejlesztéses irány még hasznosabb lenne, mondjuk a Flutter, és akkor nem kell "elfelejteni" az elavult tudást, hanem tiszta lappal kezdhetsz. Rengeteg lehetőség van, mind számtalan előnnyel és hátránnyal.)
Jogos a kérdés :) Kb. 12 éve írok PHP alapú dolgokat. Főleg mindig az aktuális munkahelyeimnek belső használatra "vállalatirányítási" rendszert és egyéb olyan dolgokat, amit központosítani kell, illetve filléres költségvetésű alapítványi honlapokat és kislátogatottságú híroldalt. Minden esetben a legjobb tudásom szerint védem a bemenő adatokat (GET,POST) és validálom, mielőtt az bármilyen SQL lekérdezésben megjelenhetne. Illetve az oldalak külön látogatói és külön adminisztrációs felületekkel rendelkeznek, külön aldomaineken, így a látogató oldalnak csaki kizárólag olvasási funkciói vannak és admin felületre is kitaláltam egy sajátos jelszóellenőrzési módot, mert az ördög nem alszik. Viszont ha egyszer kapnék egy olyan ajánlatot, ahol már mondjuk a felhasználónak regisztrálnia kellene, esetleg webáruházot létrehozni, amiben már ugye személyes adatokat is kellene tárolni és azt a legjobban védeni, akkor legyen hozzá megfelelő tudásom, ami nélkül nem vállalnám el a munkát. Webáruházat létre tudnék hozni minden további nélkül, de hogy az úgy működjön, egy programhiba miatt ne érje anyagi kár se a felhasználót, se a tulajdonost (tranzakciókezelésről van kisebb tapasztalatom, de szerintem nem elég), illetve ha esetleg napvilágot lát egy PHP-bug, akkor ne tudjanak könnyen hozzáférni a MySQL adattáblákhoz.
Nincsen konkrét ajánlat, de ha lenne, akkor nem szeretném a megfelelő ismeretanyag hiánya miatt elutasítani.
Mobilfejlesztésben nem gondolkodom.
EDIT: Meg persze, az eddig fejlesztéseimet is szeretném mégbiztonságosabbá tenni.
"a bemenő adatokat (GET,POST) és validálom, mielőtt az bármilyen SQL lekérdezésben megjelenhetne"
--> van egy többlépéses módszer, de ekkor strukturálisan nem hibázhatsz, így nem kell jól/rosszul validálnod se.
1. prepare
2. változók hozzákötése. Lásd: https://www.php.net/manual/en/pdostatement.bindparam.php
3. execute
Megjegyzem, a magáról biztonságosságot hírdető Rust esetén szintén ezt a módszert javasolják: https://docs.rs/mysql/17.0.0/mysql/
Szerintem:
Egy senior programozó sem tud mindig mindenre figyelni ezért vállalati környezetben mindenképpen ajánlott kód analizáló és weboldal sérülékenység vizsgáló rendszerek alkalmazása.