Anything that makes engaging harder (2-factor auth, captchas, which I'll get to sometime next week) will cost conversions and engagement. You have to weigh those things realistically. Security doesn't exist in a vacuum where User Experience doesn't matter.
Does the value of the asset merit the cost of the second factor (considering the 2factor is a per-user cost)?
The idea (for any system) is to start with understanding an adversary's perspective by:
- Listing application entry points (where does data enter into the application?)
- Cataloguing assets (what's being protected?)
- Identifying trust levels (who needs access to what?)
Then defining the security of the app/system by:
- Defining use scenarios
- Identifying implementation assumptions (parameter-based SQL?) and external dependencies (payment system?)
- Modelling the application/solution (data flow diagram that shows interactions with external entities, and machine and process boundaries)
The final stage is identifying threats, analysing them, and determining vulnerabilities. Threats typically fall into one of 6 categories:
- Spoofing
- Tampering
- Repudiation
- Information disclosure
- Denial of service
- Elevation of privilege
That stuff I've just written doesn't begin to do threat modelling justice, but it's enough to start some research.
And before anyone starts suggesting that it's not important/requires big design up front/we need to pivot/etc consider that exactly those arguments are what landed the likes of LinkedIn, Sony, etc. in hot water.
Maybe it's worth adding that the basics are just the basics, not a substitute for real threat modeling and analysis. But there's always a real-world cost/benefit factor.
So, no, let's keep raising awareness of the basics until finally everyone gets it. Then, once the OWASP top ten is filled with MITM, timing and social engineering attacks, that's when we can move on to the broader approach.
The framework isn't fool proof (no one can protect developers from themselves). But I feel that Django does what it needs to do when it comes to protecting its users.
The "last mile" is just making sure your code is using all those tools correctly.