{"guid":"73bfb044-dc49-4cba-928e-b69ee77e695b","title":"How to make Django insecure","subtitle":null,"slug":"sps26-110861-how-to-make-django-insecure","link":"https://talks.python-summit.ch/swiss-python-summit-2026/talk/FM9WWJ/","description":"Django is one of the most security-conscious web frameworks in any language. SQL injection, cross-site scripting, CSRF, password hashing - Django handles all of it out of the box, often before you even know the attack exists. But what does Django actually *do*? And what happens when you - accidentally or on purpose - turn those protections off?\n\nThis talk walks through the OWASP by doing everything wrong first. For each vulnerability, I'll show you the insecure version - the f-string in a raw SQL query, the `|safe` on user input, the `@csrf_exempt` on a money transfer, the `DEBUG = True` in production - and then open Django's source code to show you exactly how the framework prevents it. Not as a black box, but line by line: how the ORM keeps parameters separate from SQL, how the template engine escapes every variable, how the CSRF middleware validates tokens, and why Django hashes your passwords 870,000 times.\n\nBy the end you'll know where Django protects you, where it can't, and what one management command to run before every deployment.","original_language":"eng","persons":["Gaweng Tan"],"view_count":0,"promoted":false,"date":"2026-10-22T12:20:00.000+02:00","release_date":"2026-11-11T00:00:00.000+01:00","updated_at":"2026-11-11T05:17:18.559+01:00","tags":["110861","2026","sps26","Python, the programming language you love","Aula","sps26-eng"],"length":1472,"duration":1472,"thumb_url":"https://static.media.ccc.de/media/conferences/sps26/110861-73bfb044-dc49-4cba-928e-b69ee77e695b.jpg","poster_url":"https://static.media.ccc.de/media/conferences/sps26/110861-73bfb044-dc49-4cba-928e-b69ee77e695b_preview.jpg","timeline_url":"https://static.media.ccc.de/media/conferences/sps26/110861-73bfb044-dc49-4cba-928e-b69ee77e695b.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/conferences/sps26/110861-73bfb044-dc49-4cba-928e-b69ee77e695b.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/sps26-110861-how-to-make-django-insecure","url":"https://media.ccc.de/public/events/73bfb044-dc49-4cba-928e-b69ee77e695b","conference_title":"Swiss Python Summit 2026","conference_url":"https://media.ccc.de/public/conferences/sps26","related":[],"recordings":[{"length":1472,"mime_type":"video/mp4","language":"eng","filename":"import-110861-eng-How_to_make_Django_insecure_hd.mp4","state":"new","folder":"h264-hd","high_quality":true,"width":1920,"height":1080,"updated_at":"2026-11-11T03:26:43.754+01:00","label":"eng 1080p","size":130,"recording_url":"https://cdn.media.ccc.de/events/sps26/h264-hd/import-110861-eng-How_to_make_Django_insecure_hd.mp4","url":"https://media.ccc.de/public/recordings/107333","event_url":"https://media.ccc.de/public/events/73bfb044-dc49-4cba-928e-b69ee77e695b","conference_url":"https://media.ccc.de/public/conferences/sps26"},{"length":1472,"mime_type":"audio/opus","language":"eng","filename":"import-110861-eng-How_to_make_Django_insecure_opus.opus","state":"new","folder":"opus","high_quality":false,"width":0,"height":0,"updated_at":"2026-11-11T04:45:36.727+01:00","label":"eng","size":15,"recording_url":"https://cdn.media.ccc.de/events/sps26/opus/import-110861-eng-How_to_make_Django_insecure_opus.opus","url":"https://media.ccc.de/public/recordings/107362","event_url":"https://media.ccc.de/public/events/73bfb044-dc49-4cba-928e-b69ee77e695b","conference_url":"https://media.ccc.de/public/conferences/sps26"},{"length":1472,"mime_type":"audio/mpeg","language":"eng","filename":"import-110861-eng-How_to_make_Django_insecure_mp3.mp3","state":"new","folder":"mp3","high_quality":false,"width":0,"height":0,"updated_at":"2026-11-11T04:45:40.240+01:00","label":"eng","size":23,"recording_url":"https://cdn.media.ccc.de/events/sps26/mp3/import-110861-eng-How_to_make_Django_insecure_mp3.mp3","url":"https://media.ccc.de/public/recordings/107363","event_url":"https://media.ccc.de/public/events/73bfb044-dc49-4cba-928e-b69ee77e695b","conference_url":"https://media.ccc.de/public/conferences/sps26"},{"length":1472,"mime_type":"video/mp4","language":"eng","filename":"import-110861-eng-How_to_make_Django_insecure_sd.mp4","state":"new","folder":"h264-sd","high_quality":false,"width":720,"height":576,"updated_at":"2026-11-11T04:45:44.158+01:00","label":"eng 576p","size":51,"recording_url":"https://cdn.media.ccc.de/events/sps26/h264-sd/import-110861-eng-How_to_make_Django_insecure_sd.mp4","url":"https://media.ccc.de/public/recordings/107364","event_url":"https://media.ccc.de/public/events/73bfb044-dc49-4cba-928e-b69ee77e695b","conference_url":"https://media.ccc.de/public/conferences/sps26"},{"length":1472,"mime_type":"video/webm","language":"eng","filename":"import-110861-eng-How_to_make_Django_insecure_webm-sd.webm","state":"new","folder":"webm-sd","high_quality":false,"width":720,"height":576,"updated_at":"2026-11-11T05:17:18.519+01:00","label":"eng 576p","size":64,"recording_url":"https://cdn.media.ccc.de/events/sps26/webm-sd/import-110861-eng-How_to_make_Django_insecure_webm-sd.webm","url":"https://media.ccc.de/public/recordings/107421","event_url":"https://media.ccc.de/public/events/73bfb044-dc49-4cba-928e-b69ee77e695b","conference_url":"https://media.ccc.de/public/conferences/sps26"}]}