Beveiligingslogo

Laravel-beveiligingstips: een lijst met tips voor codering

In deze blog beschrijven we een aantal eenvoudige beveiligingsfouten en hoe u deze kunt oplossen.

1. Geen HTTPS gebruiken

  • Fout:Als u uw Laravel-applicatie via HTTP in plaats van HTTPS aanbiedt, is deze kwetsbaar voor man-in-the-middle (MITM)-aanvallen, waarbij gevoelige gegevens kunnen worden onderschept.
  • Oplossing: Gebruik altijd HTTPS in productieomgevingen door SSL-certificaten in te stellen en HTTPS af te dwingen door dit toe te voegen aan ($this->app->environment('production')) { \URL::forceScheme('https'); }

2. Zwakke encryptiesleutels gebruiken

  • Fout: Het niet kunnen vaststellen van een sterke APP_SLEUTEL in de .env bestand, wat cruciaal is voor encryptie, sessiebeveiliging en wachtwoordhashing.
  • Oplossing: Stel een sterke toepassingssleutel in met behulp van de volgende opdracht: bash
    php artisan sleutel:genereren Zorg ervoor dat deze sleutel geheim blijft en nooit openbaar wordt gemaakt.

3. Geen invoergegevens valideren

  • Fout:Als u invoervalidatie overslaat, kan uw toepassing kwetsbaar zijn voor verschillende aanvallen, zoals SQL-injectie, cross-site scripting (XSS) en andere kwetsbaarheden.
  • Oplossing: Gebruik de ingebouwde validatie van Laravel om ervoor te zorgen dat alle invoergegevens worden opgeschoond en de verwachte opmaak volgen.php
    $request->validate([ 'email' => 'verplicht|e-mail', 'wachtwoord' => 'verplicht|min:8', ]);

4. Gevoelige gegevens opslaan in de codebase

  • Fout:Het hardcoderen van gevoelige gegevens, zoals API-sleutels, database-inloggegevens of privétokens rechtstreeks in de codebase kan leiden tot beveiligingsinbreuken als de code wordt gedeeld of openbaar wordt gemaakt.
  • Oplossing: Sla gevoelige informatie op in omgevingsvariabelen (.env) en gebruik Laravel's configuratiesysteem om ze te laden. Commit nooit de .env bestand naar versiebeheer.

5. Onjuiste bestandsrechten

  • Fout: Schrijfrechten toestaan op gevoelige bestanden, zoals de .env bestand, kan ertoe leiden dat onbevoegde gebruikers toegang krijgen tot configuratiegegevens.
  • Oplossing: Stel de juiste bestandsrechten in voor uw Laravel-project. Over het algemeen wilt u mappen zoals opslag en opstarten/cache beschrijfbaar moeten zijn voor de webserver, maar andere bestanden mogen niet beschrijfbaar zijn.

6. Niet ontsnappen aan door gebruikers gegenereerde inhoud

  • Fout:Als u de door de gebruiker gegenereerde gegevens niet kunt ontsnappen voordat u ze op de pagina weergeeft, kan dit leiden tot XSS-aanvallen.
  • Oplossing: Gebruik Laravel's ingebouwde templating engine, Blade, die automatisch output escapet. Als je escapen moet uitschakelen (wat zelden voorkomt), zorg er dan voor dat de content goed is opgeschoond.
{{ $userInput }} // Ontsnapt
{!! $userInput !!} // Unescaped (Wees voorzichtig)

7. Geen beperking van massa-toewijzing

  • Fout:Als u massaal toewijzingen aan modellen toestaat zonder dat u goed kunt bepalen welke velden kunnen worden ingevuld, kunnen aanvallers onbedoeld velden wijzigen.
  • Oplossing: Gebruik de $vulbaar of $bewaakt eigenschappen in uw Eloquent-modellen om aan te geven welke velden massaal kunnen worden toegewezen.php
    beschermd $fillable = ['naam', 'e-mail'];

8. Debugmodus in productie blootstellen

  • Fout:Vertrekken APP_DEBUG=waar in de .env bestand in productieomgevingen kan gevoelige informatie zoals stack traces, database-inloggegevens en API-sleutels in foutmeldingen blootstellen.
  • Oplossing: Altijd ingesteld APP_DEBUG=onwaar in productie en overweeg het gebruik van foutregistratie om fouten vast te leggen en veilig op te slaan zonder ze openbaar te maken.

9. Onveilige verwerking van bestandsuploads

  • Fout:Als u geüploade bestanden niet goed valideert en opschoont, kan dit leiden tot schadelijke bestandsuploads, die server-side code kunnen uitvoeren.
  • Oplossing: Gebruik de validatieregels voor het uploaden van bestanden van Laravel om het type, de grootte en andere kenmerken van geüploade bestanden te controleren.php
    $request->validate([ 'file' => 'verplicht|bestand|mimes:jpg,png,pdf|max:2048', ]);

Sla de bestanden buiten de openbare map op en gebruik veilige methoden om er toegang toe te krijgen.

10. Het niet implementeren van snelheidsbeperking

  • Fout:Als u geen snelheidsbeperking implementeert op gevoelige routes, zoals inlog- of API-eindpunten, kan uw applicatie worden blootgesteld aan brute force-aanvallen of denial-of-service (DoS)-aanvallen.
  • Oplossing: Gebruik Laravel's ingebouwde rate limiting middleware om je routes te beschermen.php
    Route::middleware('throttle:10,1')->group(functie() { Route::post('/login', 'AuthController@login'); });

11. Onnodige blootstelling van gevoelige eindpunten

  • Fout: Gevoelige routes verlaten zoals /telescoop/horizon, of /beheerder die voor het publiek toegankelijk zijn, kunnen waardevolle debug- of beheershulpmiddelen blootleggen.
  • Oplossing: Bescherm deze routes door toegang te beperken via middleware of IP-whitelisting. Beperk bijvoorbeeld de toegang tot Laravel Telescope tot lokale omgevingen:php
    als (app()->environment('local')) { Telescoop::auth(functie () { return true; }); }

12. Verouderde Laravel en afhankelijkheden

  • Fout:Als u verouderde versies van Laravel of de afhankelijkheden daarvan gebruikt, kunnen bekende kwetsbaarheden ongepatcht blijven.
  • Oplossing: Werk Laravel en zijn afhankelijkheden regelmatig bij door het volgende uit te voeren: componist updateen houd beveiligingsadviezen in de gaten voor de pakketten die u gebruikt.

13. Geen gebruik van CSRF-beveiliging

  • Fout:Als u geen Cross-Site Request Forgery (CSRF)-beveiliging implementeert, kunnen aanvallers gebruikers ertoe verleiden namens hen bepaalde acties uit te voeren.
  • Oplossing: Laravel bevat standaard CSRF-beveiliging voor alle POST-, PUT-, PATCH- en DELETE-aanvragen met behulp van de @csrf richtlijn in forms.blade
    @csrf

14. Geen gebruik van veilige wachtwoordhashing

  • Fout:Als u wachtwoorden in platte tekst opslaat of zwakke hash-algoritmen gebruikt, is uw toepassing kwetsbaar als de database wordt gecompromitteerd.
  • Oplossing: Gebruik altijd Laravel's bcrypt (of argon2 voor sterkere beveiliging) voor het hashen van wachtwoorden:php
    gebruik Illuminate\Support\Facades\Hash; $hashedPassword = Hash::make($password);

15. Logboeken en waarschuwingen negeren

  • Fout:Als u de toepassingslogboeken niet controleert op verdachte activiteiten of fouten, kunnen beveiligingsincidenten gemist worden.
  • Oplossing: Controleer regelmatig de Laravel-logs (opslag/logboeken) en stel waarschuwingen in voor kritieke gebeurtenissen. U kunt Laravel integreren met externe monitoringtools zoals Sentry of New Relic voor realtime monitoring.

16. Updaten met $request->all()

Een beetje vergelijkbaar met punt 7.

Hoewel het wel erg handig lijkt, is het handig om een gebruiker op deze manier bij te werken:

$gebruiker->update($aanvraag->alle());

Er is een beveiligingsrisico. Als u bijvoorbeeld een kolom this_is_an_admin=1 hebt, kan een gebruiker deze variabele instellen via de Developer Console van de browser.

Het zou beter zijn om alleen de juiste $request-variabele te filteren met:

$request->only(['naam', 'nieuwsbrief_geabonneerd']);

Heb je nog andere beveiligingspunten? Laat het ons weten in de reacties!

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

nl_NLNederlands
Scroll naar boven