Vylepšete zabezpečení našich aplikací pomocí PHP

Obsah
PHP se ukázal jako univerzální jazyk, který nám umožňuje manipulovat s daty zadanými prostřednictvím formuláře HTMLV jeho ústavě je samozřejmě více nástrojů a schopností, než jen toto.
Všestrannost a snadné použití z něj činí jeden z celosvětově nejpoužívanějších jazyků pro webové projekty, které sahají od jednoduchých kontaktních formulářů až po základ velkých aplikací na začátku, jako je Facebook.
Problém univerzálnosti a snadnosti použití spočívá v tom, že vývojář není nucen psát zabezpečený kód, ale s velmi nejistými funkcemi bude kód fungovat perfektně, a právě zde přicházejí problémy.
Zabezpečení webové aplikace je něco, co od začátku nemáte PHPTo z něj však nedělá nejistý jazyk, protože zabezpečení odpovídá sadě technik a pracovních stylů, které musí programátor znát, aby je mohl použít ve svých skriptech.
RámceJe pravda, že vzhledem rámců Ve výchozím nastavení je zahrnuto mnoho funkcí zabezpečení, ne však každý vývojář použil rámec ve starších aplikacích a je možné, že pro některé funkce použijte a rámec být přebytek.
Klíče k dosažení zabezpečení v našich aplikacích pomocí PHP Jsou to: kontrola a upřesnění dat, která uživatel zadá do formuláře, ověření původu požadavků HTTP kterou naše aplikace přijímá, a nakonec se vyhnout přímému provádění pokynů prostřednictvím formulářů.
V programování existuje pravidlo a je univerzální, to znamená, že se netýká pouze PHPJe to tak, že všechna data, která nejsou generována aplikací, jsou potenciálně škodlivá, to znamená, že pokud to není něco, co je výsledkem, který jsme naprogramovali, nemůžeme věřit.
Tato zásada platí pro hodnoty formulářů, soubory, Databáze, takže prvním krokem ke zlepšení našeho zabezpečení je filtrování dat, pokud musíme s těmito prvky interagovat.
Ukážeme si seznam nejlepších postupů, které můžeme použít při filtrování dat zadaných do našeho formuláře:
Použijte seznamy povolených hodnotDíky této praxi víme, že pokud data, která procházejí formulářem, neprocházejí naším seznamem povolených a bezpečných hodnot, neměli by se dostat do zpracování, v tomto okamžiku musí být uživateli zaslána zpráva, aby opravil svá data.
Nikdy neopravujte neplatná dataMůže to znít lákavě, vytvořit velmi inteligentní systém, který opravuje data s nesrovnalostmi, ale z dlouhodobého hlediska nám to může přinést problémy a zranitelnosti, a proto pokud zjistíme něco nepravidelného, ​​neměli bychom to zpracovávat.
Použijte konvenci pojmenováníDíky této praxi můžeme odlišit bezpečná data a hodnoty od těch dat a hodnot zadaných uživatelem, a tím v rámci programování posílíme jejich použití pro zpracování.
Tady je dva typy filtrování že to můžeme udělat, první je z hodnot, které známe, a druhý z hodnot, které neznáme.
The První Je to velmi snadné, musíme pouze provádět rutiny se seznamy známých prvků a porovnávat je, ale je to těžkopádné a obtížně proveditelné ve větších aplikacích. The druhý Znamená to vytvářet rutiny, které vyhodnocují strukturu hodnoty, a pokud odpovídá té, kterou považujeme za bezpečnou, necháme ji zpracovat, jinak vyhodíme chybu, protože je to dynamický charakter, toto je doporučený formát.
Podívejme se níže na ukázkový kód prvního typu filtrování:
V následujícím kódu uvidíme, jak vytvoříme formulář, který má prvek vybrat Aby si uživatel mohl vybrat barvu, protože uživatel nemusí zapisovat data, která by zadal přímo, můžeme se dostat do chyby neověřování informací, ale to znamená pouze to, že máme bezpečnostní mezeru, protože s formulářem, který platí stejná jména, můžeme přijímat potenciálně nebezpečné informace.
Proto je hodnota formuláře odeslána POŠTA, náš skript vyhodnotí možné hodnoty a v případě, že jde o některou z očekávaných, předáme ji do naší řady bezpečných hodnot, jak vidíme níže.

Tímto jsme problém vyřešili jednoduchým způsobem, ale kdyby seznam místo tří barev měl sto, příběh jednoduchosti by byl jiný.
V následujícím příkladu budeme dynamicky ověřovat pole zadané uživatelem vhodným způsobem, k tomu musíme použít regulární výrazy a tímto způsobem se vyhněte zadávání znaků, které ohrožují naše zpracování, vyhodnoťte také velikost záznamu a vyhněte se tak přetékat nebo přetížení našeho datového typu při zpracování programu. Podívejme se na kód na obrázku:

ZVĚTŠIT

Zde je klíčem k dosažení validace správně vědět, co chceme zpracovat, například v případě uživatelského jména obvykle požadujeme alfanumerické znaky a spojovníky, proto v pravidelná fráze Ověřujeme to, potřebujeme také, aby bylo větší než 0 znaků a maximálně 32, pokud to, co uživatel zadá, splňuje toto vše, projde validací, nejlepší ze všeho je, že to funguje s hodnotou, jako je sto, protože je zcela dynamický.
Další hrozbou, před kterou se musíme chránit, je spouštění skriptů z jiných webů, díky AJAX Můžeme odeslat formuláře z klienta na trasu, včetně typu požadavku a požadovaných hodnot.
SlabostTento druh slabosti umožňuje někomu velmi snadno zkontrolovat naši formu a zkontrolovat naše pole, kde vlastnictvím těchto jmen a metody HTTP Pokuste se odeslat nezabezpečené hodnoty, abychom se tomu vyhnuli, musíme použít techniky, které nám umožní ověřit, odkud požadavek pochází a zda je bezpečné povolit jeho provedení, jinak se vyhněte pokračování cesty v rámci našeho programu.
Aby se tomuto problému vyhnul, systém žetony Y sezení, takže při odeslání formuláře vyhodnotíme, zda je relace stejná jako ta, která byla vytvořena zabezpečeným způsobem, a tedy škodlivý uživatel nemůže pokračovat.
Klíčovým cílem útočníka je umět vložit jeho kód do našeho prostředí, k tomu používají injekce kódu SQLTento útok je známý jako SQL Injection, kde v případě nezabezpečených formulářů a nesprávného zpracování můžeme obdržet pokyny SQL přímo bez omezení. Například pokud naše hodnocení SQL je v našem skriptu následující PHP:

Můžeme použít jakéhokoli uživatele systému jako uživatelské jméno a Heslo používáme dva skripty “--” díky tomu můžeme bez problémů předat zabezpečení, protože dva skripty jsou komentář SQL a proto heslo nebude vyhodnoceno.
Správný způsob vyhodnotit SQL který pochází od uživatele, odstraňuje speciální a nebezpečné znaky a vyhodnocuje pouze bezpečné výrazy. Podívejme se na příklad níže, jak se vyhnout předchozímu případu:
První věc, kterou musíme udělat, je a sanitace dat, to znamená zabránit tomu, aby dorazila čistá z formy do naší SQL; Druhá věc je, že musíme vyhodnotit, že pokud tyto dvě hodnoty odpovídají přístupu, ale ten odpovídá logice každé z nich, podívejme se na obrázek, jak cíle dosáhneme:

ZVĚTŠIT

Zde jsme použili tento nástroj připravená prohlášení co nám knihkupectví umožňuje PDO pro připojení k DatabázeDíky tomu dosáhneme toho, že to, co je zadáno, nebude nikdy bráno v jiném kontextu, než jsou data, vidíme také, že místo použití metody POŠTA Použili jsme naše zabezpečené pole, to znamená, že naše data jsou již ověřena, takže riziko je nižší.
Tímto jsme tento tutoriál dokončili, protože vidíme, že akce, které můžeme podniknout, aby byla naše aplikace bezpečnější, jsou jednoduché, nevyžadují lidské úsilí, ale pomáhají nám vyhnout se nejběžnějším útokům a možná i těm nejčastějším jsou uvedeny. Existuje o tom špatné vnímání PHP těch, kteří říkají, že je to nejistý jazyk, ale realita je taková, že nejistotu vytváří programátor, protože jazyk má pouze nástroje, které můžeme použít ke zlepšení a zabránění útokům na naše aplikace prostřednictvím dat zadaných uživatelem.

Vám pomůže rozvoji místa, sdílet stránku s přáteli

wave wave wave wave wave