Balíček Spatie, konkrétně balíček Laravel-Permission, pomáhá zabránit injekci SQL především prostřednictvím jeho integrace s vestavěnými bezpečnostními mechanismy Laravel, spíše než prováděním vlastních vlastních preventivních funkcí SQL. Jak to podrobně přispívá k prevenci injekce SQL:
1. Využití Laravel's Builder a Eloquent Orm
Balíček Spatie používá k interakci s databází Laravel's Eloquent Orm a Query Builder. LaRavel's Query Builder a Eloquent automaticky používají parametrizované dotazy a připravené příkazy, které oddělují kód SQL od vstupních dat uživatele. To znamená, že vstupy uživatelů nejsou nikdy zřetězeny přímo do řetězců SQL, což útočníkům zabrání vstřikování škodlivého kódu SQL. LaRavel před provedením dotazů správně uniká vstupním hodnotám, čímž zmírňuje rizika injekce SQL [1] [5].
2. správa role a povolení bez surových dotazů
Balíček Spatie spravuje role a oprávnění prostřednictvím výmluvných modelů jako „Role` a„ povolení “. Když přiřadíte oprávnění nebo role, používáte metody jako `$ role-> GivePermissionto ($ Permission)`, které interně používají bezpečné metody budování dotazů Laravel. Tím se zabrání surovým dotazům SQL, které jsou náchylné k zranitelnosti injekce [1].
3. vyhýbání se nebezpečným dynamickým dotazům
Zatímco Laravel's Query Builder chrání před injekcí v hodnotách, automaticky chrání dynamické názvy sloupců ani surové fragmenty SQL. Balíček Spatie se vyhýbá nebezpečnému dynamickému SQL tím, že nedovolí nefiltrovaný vstup uživatele přímo ovlivňovat strukturu dotazu (jako jsou názvy sloupců nebo klauzule objednávky), což je běžný vektor injekce. To je důležité, protože ochrana Laravel se vztahuje na hodnoty, ale nikoli na identifikátory SQL, jako jsou názvy sloupců [7].
4. Podpora principu nejmenších privilegií
Balíček také podporuje osvědčené postupy, jako je omezení oprávnění databáze pro uživatele. Přiřazením pouze nezbytných oprávnění uživatelům databáze, i když dojde k injekčnímu útoku, je poškození omezeno. Tento princip nejméně privilegií doplňuje prevenci injekce SQL snížením potenciálního dopadu útoku [1].
5. Žádné přímé surové použití SQL
Balíček se vyhýbá používání surových dotazů SQL, pokud je to možné. Jsou -li nezbytné surové dotazy, je Laravel doporučený přístup k použití připravených prohlášení nebo parametrů výslovně pro zajištění dezinfikace vstupů, na které se Spatie dodržuje tím, že se spoléhá na Laravel's Builder a výmluvný orm [5].
Stručně řečeno, balíček Spatie pomáhá zabránit injekci SQL spoléháním na bezpečné budování dotazů Laravel a mechanismy vázání parametrů, zabránění nebezpečným surovým SQL a podporuje osvědčené postupy, jako je nejmenší privilegium. Sama samo o sobě implementuje prevenci injekce SQL, ale využívá Laravel robustní vlastnosti, aby zajistila bezpečné interakce databáze při řízení rolí a oprávnění [1] [5] [7].
Citace:
[1] https://escape.tech/blog/laravel-sql-injection-guide/
[2] https://www.stackhawk.com/blog/sql-injection-prevention-laravel/
[3] https://www.reddit.com/r/laravel/comments/bbxhoc/unsafe_sql_functions_be_aware_of_your/
[4] https://sitcher.io/blog/unsafe-sql-functions-in-laravel
[5] https://pentest-tools.com/blog/laravel-application-security-guide
[6] https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-intphp
[7] https://swiftmade.co/blog/2019-04-10-orderby-sql-injection/
[8] https://www.acunetix.com/websitesecurity/sql-injection/