Nog een paar aanvullingen aangezien ik nu meer tijd heb:
Aangezien dit een voorbeeld ".env" is (check de naam: example = voorbeeld) is het prima standaard ingesteld. De applicatie zal immers eerst op een dev(eloper) omgeving ontwikkeld worden waar gedetaileerde exceptions handig zijn en tijd kunnen besparen. Als je de documentatie erbij pakt staat bij de configuratie letterlijk:
Your .env file should not be committed to your application's source control, since each developer / server using your application could require a different environment configuration. Furthermore, this would be a security risk in the event an intruder gains access to your source control repository, since any sensitive credentials would get exposed.
Met andere woorden: het is de bedoeling om de .env aan te passen voor elke omgeving die je hebt. Elke zichzelf respecterende developer die meer doet dan simpelweg copy&paste zal in het bestand zien dat bepaalde debug variable aan/uit gezet kunnen worden en/of opzoeken wat dingen betekenen.
PieterjanDC schreef op dinsdag 1 januari 2019 @ 11:02:
@Barryvdh
Het idee van de wildcard debug_blacklist klinkt als muziek in mijn oren. Hopelijk wordt de config/app.php dan standaard hiermee aangepast naar:
'debug_blacklist' => [
'*_PASS',
'*_PASSWORD',
'*_KEY',
]
Interessanter nog zou zijn om een
debug_whitelist te gebruiken. Hierdoor worden de nieuwe variabelen die aan de .env file toegevoegd worden by-default verborgen. Sommigen beweren dat het beter is te whitelisten dan te blacklisten... Maar met wildcards kan je IMO ook al ongeveer hetzelfde effect bekomen.
Dit is grotendeels persoonlijke voorkeur. Zelf ben ik het er niet helemaal mee eens, het kan zeker handig zijn om deze data op de
dev(eloper) omgeving te printen. Zelf werk ik in een omgeving met zeer stricte beveiligingspolicies en ondanks dat onze dev(eloper) omgevingen
geen productie data bevatten (waar wij ook
niet bij kunnen) verlopen bijna alle wachtwoorden na een bepaalde tijd. Als ik het wachtwoord gewijzigd heb vind ik het best handig dat een exceptie pagina de wachtwoorden weergeeft die de applicatie gebruikt - zo zie ik snel wat fout gaat zonder dat ik tijden aan het zoeken ben.
Tevens maakt het helemaal niets uit dat dit wachtwoord over het "minst beveiligde protocol in de webdevelopment" gaat. Als het goed is draait je dev(eloper) omgeving toch lokaal of op een eigen server en worden er geen productie wachtwoorden gebruikt. In mijn geval zal het wachtwoord over https van localhost naar localhost gaan waarbij de poorten zijn afgeschermd door de firewall (echt alleen localhost bereikbaar).
PieterjanDC schreef op dinsdag 1 januari 2019 @ 11:02:
Het mag dan al zijn dat een virus in je netwerk terechtkomt en een devserver vindt, hij kan toch al niet je service-account-passwords aflezen van de html-pagina. E-mailadressen voor deze accounts zijn minder belangrijjk om te verbergen.
Als het goed is staat er totaal geen gevoelige data op je dev-omgeving. Als dat wel zo is zijn de e-mailadressen net zo belangrijk. Anders heb je immers een (klein) data lek. Wanneer een virus in jouw netwerk weet door te dringen heb je een groter probleem dan een "whoops" pagina die ".env" gegevens print. Waarom zou dat virus niet gewoon de ".env" uitlezen of andere bestanden? Rechtstreeks voor de database server gaan?
Heb je de link zelf ook gelezen? Die developer heeft zelf de "whoops" pagina op een of andere hacky manier getriggered en de
dev(eloper) dependencies op de
prod(uction) omgeving gezet:
quote: Murphy's law
If you make something idiot-proof, someone will just make a better idiot
Als de chain of security zo belangrijk is neem ik aan dat je grondig de documentatie leest van de producten/libraries/frameworks die je gebruikt en daar de best-practices van overneemt. Als je "app_debug" op "true" zet en de developer dependencies in productie gebruikt is de chain of security niet belangrijk (genoeg) om je druk over te maken.
PieterjanDC schreef op dinsdag 1 januari 2019 @ 11:02:
Ik had dit al eerder op Laracasts gevraagd. Daar werd mijn vraag onmiddellijk naar de prullenmand gestuurd.
Alle verantwoordelijkheid wordt in directe lijn naar de eindontwikkelaar gestuurd en Laravel bleek hier geen verantwoordelijkheid te willen dragen. Poor default settings, ... Het antwoord is onmiddellijk dat je nooit debug aan moet hebben staan public (ok, hier ben ik het mee eens), maar dit belet niet dat iemand je netwerk hackt en onmiddellijk alle environment variables kan opvragen via
het minst beveiligde protocol in de web development. Zelf als bewezen is dat de Whoops-page tevoorschijn kan komen bij APP_DEBUG=FALSE, wordt hier nog steeds geen graten in gezien.
Tja, alles kan tevoorschijn komen als de developer incompetent is. Laten we gewoon maar de hele ".env" weghalen aangezien een "developer" ook gewoon de inhoud van die file kan weergeven in z'n foutmelding omdat dat lekker makkelijk is. Daarnaast snap ik prima dat Laravel geen verantwoordelijkheid wil dragen voor developers die niet instaat zijn of tijd willen investeren om documentatie te lezen.
PieterjanDC schreef op dinsdag 1 januari 2019 @ 11:02:
Je stelt een vraag of geeft een suggestie en krijgt direct het deksel op de neus. Vervolgens zoek je op internet, vind je forumposts van mensen die exact hetzelfde zeggen:
Plaats nooit een wachtwoord in een HTTP-response, onmiddellijk 30 resultaten en het antwoord hierop is steeds, steeds
It's not us, we're innocent.
Dit geeft al onmiddellijk de blijk dat de ontwikkelaars achter dit project niet van plan zijn om alle security holes in hun framework zo goed mogelijk dicht te maken. Zonde want Laravel is qua performantie superefficiënt (veel efficiënter dan ASP.NET of zelfs andere PHP-frameworks). Vervolgens krijg je op GitHub dezelfde reacties van de project-beheerders. Dan kun je wel denken dat de webapp-developers hier niet echt happy mee zijn toch?
Was die vraag op dezelfde manier gesteld als je
GitHub isssue? Daarnaast vind ik 30 resultaten op internet niet zo heel erg veel. Dat je nooit een wachtwoord in een HTTP-response plaatst klopt voor productie. Bij dev-omgevingen kan je andere regels hanteren om het proces te versnellen (zie mijn voorbeeld hierboven) mits je het goed afhandeld. Dat is in dit geval gebeurd (app_debug & dev dependencies).
PieterjanDC schreef op dinsdag 1 januari 2019 @ 11:02:
Ik begrijp niet waarom men zo losbandig kan omspringen met het exposen van secret values via HTTP (zoals ik al zei het minst beveiligde protocol in web development). Bij SSH of FTP moet je een wachtwoord opgeven vooraleer je kan verbinden, een HTTP-request is zo gestuurd en duurt maar 20 ms.
"Secret values" hoe secret kan een secret value van een dev-omgeving zijn? En als de chain of security zo belangrijk is zou ik zeker geen FTP gebruiken. Dat is in feiten de HTTP van file transfer waarbij je wachtwoord
PLAIN TEXT over de verbinding gaat.
Aanvullend op bovenstaande heb ik geen idee hoe je erbij komt dat Laravel sneller is dan ASP.net (Core) maar het
tegenovergestelde is, net als bij de rest van je aannamens, waar.
Nog een stukje constructief:
Als beveiliging zo belangrijk is voor je omgeving kan je deployment altijd automatiseren waarbij gedeployed word naar een nieuwe (virtuele) host. Op de host kan je vervolgens de health status checken en basale tests uitvoeren (exception triggeren waarbij de response word gevalideerd bijvoorbeeld). Pas als dat succesvol verloopt én iemand bevestigd de deployment nogmaals switch je, zonder down-time, de live omgeving met de nieuwe deployment. Vervolgens kan je nog een stukje zekerheid toevoegen door een reverse-proxy te gebruiken die alle error pagina's vervangt met een eigen error pagina.
[
Voor 3% gewijzigd door
xh3adshotx op 01-01-2019 19:30
]