In deze blog beschrijven we een aantal eenvoudige beveiligingsfouten en hoe u deze kunt oplossen.
Inhoud verbergen
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
enopstarten/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.phpbeschermd $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 update
en 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
(ofargon2
voor sterkere beveiliging) voor het hashen van wachtwoorden:phpgebruik 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!