Spatie pakete, it īpaši laravel-Permision pakete, palīdz novērst SQL injekciju galvenokārt, izmantojot tās integrāciju ar Laravel iebūvētajiem drošības mehānismiem, nevis tieši ieviešot savas SQL injekcijas profilakses funkcijas. Lūk, kā tas sīki veicina SQL injekcijas profilaksi:
1. Laravela vaicājumu veidotājs un daiļrunīgs orm
Spatie paketē tiek izmantots Laravela daiļrunīgais ORM un vaicājumu veidotājs, lai mijiedarbotos ar datu bāzi. Laravela vaicājumu veidotājs un daiļrunīgs automātiski izmanto parametrizētus vaicājumus un sagatavotus paziņojumus, kas atdala SQL kodu no lietotāja ievades datiem. Tas nozīmē, ka lietotāju ievadi nekad netiek tieši savienoti SQL virknēs, neļaujot uzbrucējiem ievadīt ļaunprātīgu SQL kodu. Laravel pirms vaicājumu izpildīšanas pareizi izlaiž ievades vērtības, tādējādi mazinot SQL injekcijas riskus [1] [5].
2. lomu un atļauju pārvaldība bez neapstrādātiem vaicājumiem
Spatie pakete pārvalda lomas un atļaujas, izmantojot daiļrunīgus modeļus, piemēram, “lomu” un `atļauju”. Piešķirot atļaujas vai lomas, jūs izmantojat tādas metodes kā `$ loma-> gecperMissionto ($ atļauja)`, kas iekšēji izmanto Laravela drošas vaicājumu veidošanas metodes. Tas ļauj izvairīties no neapstrādātiem SQL vaicājumiem, kas ir pakļauti injekcijas ievainojamībām [1].
3. Izvairīšanās no nedrošiem dinamiskiem vaicājumiem
Kamēr Laravela vaicājumu veidotājs aizsargā pret vērtību injekciju, tas automātiski neaizsargā dinamiskos kolonnu nosaukumus vai neapstrādātus SQL fragmentus. Spatie pakete ļauj izvairīties no nedrošas dinamiskas SQL, neļaujot nefiltrētam lietotāja ievadei tieši ietekmēt vaicājuma struktūru (piemēram, kolonnu nosaukumus vai pasūtījumu klauzulas), kas ir izplatīts injekcijas vektors. Tas ir svarīgi, jo Laravel aizsardzība attiecas uz vērtībām, bet ne uz SQL identifikatoriem, piemēram, kolonnu nosaukumiem [7].
4. Iedrošinot vismazāko privilēģiju principu
Pakete veicina arī labāko praksi, piemēram, datu bāzes atļauju ierobežošanu lietotājiem. Piešķirot tikai nepieciešamās atļaujas datu bāzes lietotājiem, pat ja notiek injekcijas uzbrukums, kaitējums ir ierobežots. Šis vismazākās privilēģiju princips papildina SQL injekcijas profilaksi, samazinot iespējamo uzbrukuma ietekmi [1].
5. Nav tiešu neapstrādātu SQL lietojumu
Ja iespējams, pakete izvairās izmantot neapstrādātus SQL vaicājumus. Ja ir nepieciešami neapstrādāti vaicājumi, Laravel ieteicamā pieeja ir skaidri izmantot sagatavotos paziņojumus vai parametru saistīšanos, lai nodrošinātu, ka ievadi tiek sanitāriski, un Spatie ievēro, paļaujoties uz Laravela vaicājumu veidotāju un daiļrunīgu Orm [5].
Rezumējot, Spatie pakete palīdz novērst SQL injekciju, paļaujoties uz Laravel drošo vaicājumu veidošanu un parametru saistīšanas mehānismiem, izvairoties no nedrošas RAW SQL un veicinot paraugpraksi, piemēram, vismazāko privilēģiju. Tas pats par sevi neīsteno SQL injekcijas profilaksi, bet izmanto Laravel spēcīgās funkcijas, lai nodrošinātu drošu datu bāzes mijiedarbību, pārvaldot lomas un atļaujas [1] [5] [7].
Atsauces:
[1] https://escape.tech/blog/laravel-sqlinjekcijas-guide/
[2] https://www.stackhawk.com/blog/sqlinjekcijas-prope-laravel/
[3] https://www.reddit.com/r/laravel/comments/bbxhoc/unsafe_sql_functions_be_aware_of_your/
[4] https://stitcher.io/blog/unsafe-sql-functions-in-inavel
[5] https://pentest-tools.com/blog/laravel-application-security-guide
[6] https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injecti-in-php
[7] https://swiftmade.co/blog/2019-04-10-orderby-sqlinjekcijas/
[8] https://www.acunetix.com/websitesecurity/sqlinjekcijas/