SlideShare a Scribd company logo
1 of 24
Django Web Application Security By Levi Gross
About Me Blog: http://www.levigross.com/ Twitter:@levigross Email: levi@levigross.com Python for 5 years Django for 2 ½ Computer Security for 8 years Python and Django are amazing!
Who is attacking us Bots Malicious  SEO Steal user info Hackers ScriptKiddies Hackers ÜberHackers We will bankrupt ourselves in the vain search for absolute security. — Dwight D. Eisenhower
Django from a security standpoint	 Django Rocks! Salted SHA1 Hashes (Yummy) sha1 $ e3164 $ 9595556c4f693158c232f0885d266fe30671ca8a Take that Gawker! Secure session framework Automatic variable escaping XXS SQL Injection CSRF (Cross Site Request Forgery) Protection Protection against Email Header injection Protection against Directory Traversal attacks “If you think technology can solve your security problems, then you don’t understand the problems and you don’t understand the technology”. — Bruce Schneier
Web Vulnerabilities Information Disclosure Input Validation Click Jacking Session Hijacking CSRF Passwords Denial of Service 0 days In theory, one can build provably secure systems. In theory, theory can be applied to practice but in practice, it can't. — M. Dacier, Eurecom Institute
Information Disclosure Your Parts are showing
Attack Surface Admin Site Defaults to /admin Views & URLS Can give someone an intimate view of your application. File Locations REST Use Piston Sentry
How to protect yourself Never deploy with the default settings Long URLS are the best (but your not out of the woods) Change the file name/location of user content Validate uploads Remove unneeded software if not chroot
Input Validation XXS SQL Injection HTTP Response Splitting Directory Traversal CRLF Injection
Cross Site Scripting Django Protects us by autoescaping output return mark_safe(force_unicode(html). replace('&', '&amp;'). replace('<', '&lt;'). replace('>', '&gt;'). replace(' " ', '&quot;'). replace(" ' ", '&#39;')) |safe/{% autoescape off %} is not Safe
Here comes the sleep deprivation My Template Code Secure:<span class={{value}}>{{ value }}</span> Not Secure:<span class="{{value|safe}}">{{value|safe}}</span>  Using this value -> " onclick=alert(document.cookie) type=" Secure: <span class=&quot; onclick=alert(document.cookie) type=&quot;>&quot; onclick=alert(document.cookie) type=&quot;</span> Not Secure:<span class="" onclick=alert(document.cookie) type="">" onclick=alert(document.cookie) type="</span> Oops…
How to protect yourself		 Use the ESAPI (Enterprise Security API) " onclick=alert(document.cookie) type=" '&quot; onclick&#x3d;alert&#x28;document.cookie&#x29; type&#x3d;&quot;’ http://code.google.com/p/owasp-esapi-python/ Use Quotes Use Sanitizers lxml html5lib Use Whitelists Use Markdown
SQL Injection Python protects us Parameterized queries according to PEP 249 Django’s ORM Protects us parameterized queries Person.objects.filter(first_name__icontains=fname,last_name__icontains=lname) fname = % output ->   SELECT "secpre_person"."id", "secpre_person"."first_name", "secpre_person"."last_name" FROM "secpre_person" WHERE ("secpre_person"."first_name" LIKE % % ESCAPE 'apos; AND "secpre_person"."last_name" LIKE %s% ESCAPE 'apos; ) smart_unicode(x).replace("", "").replace("%", "").replace("_", "") NEVER BUILD QUERYIES USING STRING FORMATTING query = 'SELECT * FROM secpre_personWHERE last_name = %s' % lnamePerson.objects.raw(query)  UseParameterizedqueries Person.objects.raw('SELECT * FROM secpre_personWHERE last_name = %s', [lname])
HTTP Response Splitting New Lines in the HTTP Headers HTTP/1.1 302 Moved Temporarily Date: Wed, 24 Dec 2003 15:26:41 GMT  Location: http://10.1.1.1/someview/?lang=foobar Content-Length: 0  HTTP/1.1 200 OK Content-Type: text/html Content-Length: 19 <html>Control</html>  Server: Apache Content-Type: text/html  This was just found on Reddit last week Kudos to Neal Poole from Matasano Django to the rescue   Every HttpResponse object has this code  if '' in value or '' in value:                 raise BadHeaderError("Header values can't contain newlines (got %r)" % (value))
CRLF Injection Hijack email forms to:”me@myaddress.comcc:bill.gates@microsoft.comcc:paul.allen@microsoft.com” Django to the rescue  if '' in val or '' in val:         raise BadHeaderError("Header values can't contain newlines (got %r for header %r)" % (val, name))
Directory Traversal ../../../../../../../../../etc/passwd Django should never serve static files Your webserver should serve all static files and be locked into the web root directory Never allow users to dictate what happends Django Static Serve isn’t powerless drive, part = os.path.splitdrive(part)         head, part = os.path.split(part)         if part in (os.curdir, os.pardir):             # Strip '.' and '..' in path.             continue
Click Jacking Use X-FRAME HTTP header X-FRAME-OPTIONS: DENY https://github.com/paulosman/django-xframeoptions Use a Framekiller <script type="text/javascript">                                                                      if(top != self) top.location.replace(location);                                              </script>  Beware of sites that you visit
Session Hijacking FireSheep Cookie info not sent over HTTPS Pass the hash SESSION_COOKIE_SECURE = True SESSION_COOKIE_HTTPONLY = True Sessions Never store private data in clear text Never display session data without escaping it
Cross Site Request Forgery <imgsrc="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory"> We are logged in so it works Django protects us (unless we are really stupid) HTTP/1.0 200 OK Date: Mon, 17 Jan 2011 21:55:14 GMT Server: WSGIServer/0.1 Python/2.7.1 Expires: Mon, 17 Jan 2011 21:55:14 GMT Vary: Cookie Last-Modified: Mon, 17 Jan 2011 21:55:14 GMT ETag: "4030d6e6a6c31292791e61e8bc58b6e8" Cache-Control: max-age=0 Content-Type: text/html; charset=utf-8 Set-Cookie:  csrftoken=9260e87b366dd2be2515bffffec5a746; Max-Age=31449600; Path=/
Denial Of Service Everything is vulnerable  Impossible to defend against every variant Harden your server Rate limiting Do this on a server level If you need to do this on a view level https://gist.github.com/719502 Fine tune access methods for your views restrict the HTTP method to the appropriate view
Passwords Passwords are your biggest nightmare Don’t trust them Make sure that you are using SHA1 Even though it works md5 and crypt shouldn’t be used.  crypt should NEVER be used!!!  Rate limiting Use Django-axes http://code.google.com/p/django-axes/ Never rely on just a password If you can use 2 factor authentication do it.
0 Day Protection Run for the hills Good security is like a big onion Many layers Bitter Limit your exposure Server monitoring Remember a good programmer looks both ways before crossing a one way street.
Security Tips Be wary of updates Update on security releases Beware of 3rd party apps Separate work from play Don’t rely on passwords Fail2Ban Stick with Django Be careful where you stray Scan often Skipfish
Questions?

More Related Content

What's hot

Neat tricks to bypass CSRF-protection
Neat tricks to bypass CSRF-protectionNeat tricks to bypass CSRF-protection
Neat tricks to bypass CSRF-protectionMikhail Egorov
 
Secure Code Warrior - CRLF injection
Secure Code Warrior - CRLF injectionSecure Code Warrior - CRLF injection
Secure Code Warrior - CRLF injectionSecure Code Warrior
 
Goroutines and Channels in practice
Goroutines and Channels in practiceGoroutines and Channels in practice
Goroutines and Channels in practiceGuilherme Garnier
 
Ekoparty 2017 - The Bug Hunter's Methodology
Ekoparty 2017 - The Bug Hunter's MethodologyEkoparty 2017 - The Bug Hunter's Methodology
Ekoparty 2017 - The Bug Hunter's Methodologybugcrowd
 
OReilly-Web-Application-Security-NGINX.pdf
OReilly-Web-Application-Security-NGINX.pdfOReilly-Web-Application-Security-NGINX.pdf
OReilly-Web-Application-Security-NGINX.pdfRazaMehmood7
 
Bypass file upload restrictions
Bypass file upload restrictionsBypass file upload restrictions
Bypass file upload restrictionsMukesh k.r
 
Cehv8 - Module 02: footprinting and reconnaissance.
Cehv8 - Module 02: footprinting and reconnaissance.Cehv8 - Module 02: footprinting and reconnaissance.
Cehv8 - Module 02: footprinting and reconnaissance.Vuz Dở Hơi
 
Penetration testing web application web application (in) security
Penetration testing web application web application (in) securityPenetration testing web application web application (in) security
Penetration testing web application web application (in) securityNahidul Kibria
 
Cross Site Scripting ( XSS)
Cross Site Scripting ( XSS)Cross Site Scripting ( XSS)
Cross Site Scripting ( XSS)Amit Tyagi
 
Fantastic Red Team Attacks and How to Find Them
Fantastic Red Team Attacks and How to Find ThemFantastic Red Team Attacks and How to Find Them
Fantastic Red Team Attacks and How to Find ThemRoss Wolf
 
Web application security
Web application securityWeb application security
Web application securityKapil Sharma
 
Waf bypassing Techniques
Waf bypassing TechniquesWaf bypassing Techniques
Waf bypassing TechniquesAvinash Thapa
 
Copy & Pest - A case-study on the clipboard, blind trust and invisible cross-...
Copy & Pest - A case-study on the clipboard, blind trust and invisible cross-...Copy & Pest - A case-study on the clipboard, blind trust and invisible cross-...
Copy & Pest - A case-study on the clipboard, blind trust and invisible cross-...Mario Heiderich
 
OWASP Top 10 Web Application Vulnerabilities
OWASP Top 10 Web Application VulnerabilitiesOWASP Top 10 Web Application Vulnerabilities
OWASP Top 10 Web Application VulnerabilitiesSoftware Guru
 
Http response splitting
Http response splittingHttp response splitting
Http response splittingSharath Unni
 

What's hot (20)

ASP.NET Web Security
ASP.NET Web SecurityASP.NET Web Security
ASP.NET Web Security
 
Neat tricks to bypass CSRF-protection
Neat tricks to bypass CSRF-protectionNeat tricks to bypass CSRF-protection
Neat tricks to bypass CSRF-protection
 
Secure Code Warrior - CRLF injection
Secure Code Warrior - CRLF injectionSecure Code Warrior - CRLF injection
Secure Code Warrior - CRLF injection
 
Security testing
Security testingSecurity testing
Security testing
 
Goroutines and Channels in practice
Goroutines and Channels in practiceGoroutines and Channels in practice
Goroutines and Channels in practice
 
Building Advanced XSS Vectors
Building Advanced XSS VectorsBuilding Advanced XSS Vectors
Building Advanced XSS Vectors
 
Ekoparty 2017 - The Bug Hunter's Methodology
Ekoparty 2017 - The Bug Hunter's MethodologyEkoparty 2017 - The Bug Hunter's Methodology
Ekoparty 2017 - The Bug Hunter's Methodology
 
OReilly-Web-Application-Security-NGINX.pdf
OReilly-Web-Application-Security-NGINX.pdfOReilly-Web-Application-Security-NGINX.pdf
OReilly-Web-Application-Security-NGINX.pdf
 
Password Cracking
Password CrackingPassword Cracking
Password Cracking
 
Bypass file upload restrictions
Bypass file upload restrictionsBypass file upload restrictions
Bypass file upload restrictions
 
Cehv8 - Module 02: footprinting and reconnaissance.
Cehv8 - Module 02: footprinting and reconnaissance.Cehv8 - Module 02: footprinting and reconnaissance.
Cehv8 - Module 02: footprinting and reconnaissance.
 
Penetration testing web application web application (in) security
Penetration testing web application web application (in) securityPenetration testing web application web application (in) security
Penetration testing web application web application (in) security
 
Cross Site Scripting ( XSS)
Cross Site Scripting ( XSS)Cross Site Scripting ( XSS)
Cross Site Scripting ( XSS)
 
Fantastic Red Team Attacks and How to Find Them
Fantastic Red Team Attacks and How to Find ThemFantastic Red Team Attacks and How to Find Them
Fantastic Red Team Attacks and How to Find Them
 
ZeroNights 2018 | I <"3 XSS
ZeroNights 2018 | I <"3 XSSZeroNights 2018 | I <"3 XSS
ZeroNights 2018 | I <"3 XSS
 
Web application security
Web application securityWeb application security
Web application security
 
Waf bypassing Techniques
Waf bypassing TechniquesWaf bypassing Techniques
Waf bypassing Techniques
 
Copy & Pest - A case-study on the clipboard, blind trust and invisible cross-...
Copy & Pest - A case-study on the clipboard, blind trust and invisible cross-...Copy & Pest - A case-study on the clipboard, blind trust and invisible cross-...
Copy & Pest - A case-study on the clipboard, blind trust and invisible cross-...
 
OWASP Top 10 Web Application Vulnerabilities
OWASP Top 10 Web Application VulnerabilitiesOWASP Top 10 Web Application Vulnerabilities
OWASP Top 10 Web Application Vulnerabilities
 
Http response splitting
Http response splittingHttp response splitting
Http response splitting
 

Viewers also liked

Case Study of Django: Web Frameworks that are Secure by Default
Case Study of Django: Web Frameworks that are Secure by DefaultCase Study of Django: Web Frameworks that are Secure by Default
Case Study of Django: Web Frameworks that are Secure by DefaultMohammed ALDOUB
 
Two scoops of Django - Security Best Practices
Two scoops of Django - Security Best PracticesTwo scoops of Django - Security Best Practices
Two scoops of Django - Security Best PracticesSpin Lai
 
Ruby on Rails Penetration Testing
Ruby on Rails Penetration TestingRuby on Rails Penetration Testing
Ruby on Rails Penetration Testing3S Labs
 
Django book20 security
Django book20 securityDjango book20 security
Django book20 securityShih-yi Wei
 
Django REST Framework
Django REST FrameworkDjango REST Framework
Django REST FrameworkLoad Impact
 
How to secure your web applications with NGINX
How to secure your web applications with NGINXHow to secure your web applications with NGINX
How to secure your web applications with NGINXWallarm
 

Viewers also liked (6)

Case Study of Django: Web Frameworks that are Secure by Default
Case Study of Django: Web Frameworks that are Secure by DefaultCase Study of Django: Web Frameworks that are Secure by Default
Case Study of Django: Web Frameworks that are Secure by Default
 
Two scoops of Django - Security Best Practices
Two scoops of Django - Security Best PracticesTwo scoops of Django - Security Best Practices
Two scoops of Django - Security Best Practices
 
Ruby on Rails Penetration Testing
Ruby on Rails Penetration TestingRuby on Rails Penetration Testing
Ruby on Rails Penetration Testing
 
Django book20 security
Django book20 securityDjango book20 security
Django book20 security
 
Django REST Framework
Django REST FrameworkDjango REST Framework
Django REST Framework
 
How to secure your web applications with NGINX
How to secure your web applications with NGINXHow to secure your web applications with NGINX
How to secure your web applications with NGINX
 

Similar to Django Web Application Security

Avoiding Cross Site Scripting - Not as easy as you might think
Avoiding Cross Site Scripting - Not as easy as you might thinkAvoiding Cross Site Scripting - Not as easy as you might think
Avoiding Cross Site Scripting - Not as easy as you might thinkErlend Oftedal
 
Xss is more than a simple threat
Xss is more than a simple threatXss is more than a simple threat
Xss is more than a simple threatAvădănei Andrei
 
Pentesting for startups
Pentesting for startupsPentesting for startups
Pentesting for startupslevigross
 
You wanna crypto in AEM
You wanna crypto in AEMYou wanna crypto in AEM
You wanna crypto in AEMDamien Antipa
 
Ajax to the Moon
Ajax to the MoonAjax to the Moon
Ajax to the Moondavejohnson
 
Javascript Security
Javascript SecurityJavascript Security
Javascript Securityjgrahamc
 
Top Ten Tips For Tenacious Defense In Asp.Net
Top Ten Tips For Tenacious Defense In Asp.NetTop Ten Tips For Tenacious Defense In Asp.Net
Top Ten Tips For Tenacious Defense In Asp.Netalsmola
 
Teflon - Anti Stick for the browser attack surface
Teflon - Anti Stick for the browser attack surfaceTeflon - Anti Stick for the browser attack surface
Teflon - Anti Stick for the browser attack surfaceSaumil Shah
 
Top 10 Web Security Vulnerabilities (OWASP Top 10)
Top 10 Web Security Vulnerabilities (OWASP Top 10)Top 10 Web Security Vulnerabilities (OWASP Top 10)
Top 10 Web Security Vulnerabilities (OWASP Top 10)Brian Huff
 
Roberto Bicchierai - Defending web applications from attacks
Roberto Bicchierai - Defending web applications from attacksRoberto Bicchierai - Defending web applications from attacks
Roberto Bicchierai - Defending web applications from attacksPietro Polsinelli
 
Defeating Cross-Site Scripting with Content Security Policy (updated)
Defeating Cross-Site Scripting with Content Security Policy (updated)Defeating Cross-Site Scripting with Content Security Policy (updated)
Defeating Cross-Site Scripting with Content Security Policy (updated)Francois Marier
 
StartPad Countdown 2 - Startup Security: Hacking and Compliance in a Web 2.0 ...
StartPad Countdown 2 - Startup Security: Hacking and Compliance in a Web 2.0 ...StartPad Countdown 2 - Startup Security: Hacking and Compliance in a Web 2.0 ...
StartPad Countdown 2 - Startup Security: Hacking and Compliance in a Web 2.0 ...Start Pad
 

Similar to Django Web Application Security (20)

Avoiding Cross Site Scripting - Not as easy as you might think
Avoiding Cross Site Scripting - Not as easy as you might thinkAvoiding Cross Site Scripting - Not as easy as you might think
Avoiding Cross Site Scripting - Not as easy as you might think
 
dJango
dJangodJango
dJango
 
Xss is more than a simple threat
Xss is more than a simple threatXss is more than a simple threat
Xss is more than a simple threat
 
Xss is more than a simple threat
Xss is more than a simple threatXss is more than a simple threat
Xss is more than a simple threat
 
Pentesting for startups
Pentesting for startupsPentesting for startups
Pentesting for startups
 
PHP Security
PHP SecurityPHP Security
PHP Security
 
You wanna crypto in AEM
You wanna crypto in AEMYou wanna crypto in AEM
You wanna crypto in AEM
 
Ajax to the Moon
Ajax to the MoonAjax to the Moon
Ajax to the Moon
 
Cqcon2015
Cqcon2015Cqcon2015
Cqcon2015
 
Spyware
SpywareSpyware
Spyware
 
Spyware
SpywareSpyware
Spyware
 
Javascript Security
Javascript SecurityJavascript Security
Javascript Security
 
Top Ten Tips For Tenacious Defense In Asp.Net
Top Ten Tips For Tenacious Defense In Asp.NetTop Ten Tips For Tenacious Defense In Asp.Net
Top Ten Tips For Tenacious Defense In Asp.Net
 
&lt;img src="xss.com">
&lt;img src="xss.com">&lt;img src="xss.com">
&lt;img src="xss.com">
 
Fav
FavFav
Fav
 
Teflon - Anti Stick for the browser attack surface
Teflon - Anti Stick for the browser attack surfaceTeflon - Anti Stick for the browser attack surface
Teflon - Anti Stick for the browser attack surface
 
Top 10 Web Security Vulnerabilities (OWASP Top 10)
Top 10 Web Security Vulnerabilities (OWASP Top 10)Top 10 Web Security Vulnerabilities (OWASP Top 10)
Top 10 Web Security Vulnerabilities (OWASP Top 10)
 
Roberto Bicchierai - Defending web applications from attacks
Roberto Bicchierai - Defending web applications from attacksRoberto Bicchierai - Defending web applications from attacks
Roberto Bicchierai - Defending web applications from attacks
 
Defeating Cross-Site Scripting with Content Security Policy (updated)
Defeating Cross-Site Scripting with Content Security Policy (updated)Defeating Cross-Site Scripting with Content Security Policy (updated)
Defeating Cross-Site Scripting with Content Security Policy (updated)
 
StartPad Countdown 2 - Startup Security: Hacking and Compliance in a Web 2.0 ...
StartPad Countdown 2 - Startup Security: Hacking and Compliance in a Web 2.0 ...StartPad Countdown 2 - Startup Security: Hacking and Compliance in a Web 2.0 ...
StartPad Countdown 2 - Startup Security: Hacking and Compliance in a Web 2.0 ...
 

Recently uploaded

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKJago de Vreede
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 

Recently uploaded (20)

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUKSpring Boot vs Quarkus the ultimate battle - DevoxxUK
Spring Boot vs Quarkus the ultimate battle - DevoxxUK
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

Django Web Application Security

  • 1. Django Web Application Security By Levi Gross
  • 2. About Me Blog: http://www.levigross.com/ Twitter:@levigross Email: levi@levigross.com Python for 5 years Django for 2 ½ Computer Security for 8 years Python and Django are amazing!
  • 3. Who is attacking us Bots Malicious SEO Steal user info Hackers ScriptKiddies Hackers ÜberHackers We will bankrupt ourselves in the vain search for absolute security. — Dwight D. Eisenhower
  • 4. Django from a security standpoint Django Rocks! Salted SHA1 Hashes (Yummy) sha1 $ e3164 $ 9595556c4f693158c232f0885d266fe30671ca8a Take that Gawker! Secure session framework Automatic variable escaping XXS SQL Injection CSRF (Cross Site Request Forgery) Protection Protection against Email Header injection Protection against Directory Traversal attacks “If you think technology can solve your security problems, then you don’t understand the problems and you don’t understand the technology”. — Bruce Schneier
  • 5. Web Vulnerabilities Information Disclosure Input Validation Click Jacking Session Hijacking CSRF Passwords Denial of Service 0 days In theory, one can build provably secure systems. In theory, theory can be applied to practice but in practice, it can't. — M. Dacier, Eurecom Institute
  • 6. Information Disclosure Your Parts are showing
  • 7. Attack Surface Admin Site Defaults to /admin Views & URLS Can give someone an intimate view of your application. File Locations REST Use Piston Sentry
  • 8. How to protect yourself Never deploy with the default settings Long URLS are the best (but your not out of the woods) Change the file name/location of user content Validate uploads Remove unneeded software if not chroot
  • 9. Input Validation XXS SQL Injection HTTP Response Splitting Directory Traversal CRLF Injection
  • 10. Cross Site Scripting Django Protects us by autoescaping output return mark_safe(force_unicode(html). replace('&', '&amp;'). replace('<', '&lt;'). replace('>', '&gt;'). replace(' " ', '&quot;'). replace(" ' ", '&#39;')) |safe/{% autoescape off %} is not Safe
  • 11. Here comes the sleep deprivation My Template Code Secure:<span class={{value}}>{{ value }}</span> Not Secure:<span class="{{value|safe}}">{{value|safe}}</span> Using this value -> " onclick=alert(document.cookie) type=" Secure: <span class=&quot; onclick=alert(document.cookie) type=&quot;>&quot; onclick=alert(document.cookie) type=&quot;</span> Not Secure:<span class="" onclick=alert(document.cookie) type="">" onclick=alert(document.cookie) type="</span> Oops…
  • 12. How to protect yourself Use the ESAPI (Enterprise Security API) " onclick=alert(document.cookie) type=" '&quot; onclick&#x3d;alert&#x28;document.cookie&#x29; type&#x3d;&quot;’ http://code.google.com/p/owasp-esapi-python/ Use Quotes Use Sanitizers lxml html5lib Use Whitelists Use Markdown
  • 13. SQL Injection Python protects us Parameterized queries according to PEP 249 Django’s ORM Protects us parameterized queries Person.objects.filter(first_name__icontains=fname,last_name__icontains=lname) fname = % output -> SELECT "secpre_person"."id", "secpre_person"."first_name", "secpre_person"."last_name" FROM "secpre_person" WHERE ("secpre_person"."first_name" LIKE % % ESCAPE 'apos; AND "secpre_person"."last_name" LIKE %s% ESCAPE 'apos; ) smart_unicode(x).replace("", "").replace("%", "").replace("_", "") NEVER BUILD QUERYIES USING STRING FORMATTING query = 'SELECT * FROM secpre_personWHERE last_name = %s' % lnamePerson.objects.raw(query) UseParameterizedqueries Person.objects.raw('SELECT * FROM secpre_personWHERE last_name = %s', [lname])
  • 14. HTTP Response Splitting New Lines in the HTTP Headers HTTP/1.1 302 Moved Temporarily Date: Wed, 24 Dec 2003 15:26:41 GMT Location: http://10.1.1.1/someview/?lang=foobar Content-Length: 0 HTTP/1.1 200 OK Content-Type: text/html Content-Length: 19 <html>Control</html> Server: Apache Content-Type: text/html This was just found on Reddit last week Kudos to Neal Poole from Matasano Django to the rescue Every HttpResponse object has this code if '' in value or '' in value: raise BadHeaderError("Header values can't contain newlines (got %r)" % (value))
  • 15. CRLF Injection Hijack email forms to:”me@myaddress.comcc:bill.gates@microsoft.comcc:paul.allen@microsoft.com” Django to the rescue if '' in val or '' in val: raise BadHeaderError("Header values can't contain newlines (got %r for header %r)" % (val, name))
  • 16. Directory Traversal ../../../../../../../../../etc/passwd Django should never serve static files Your webserver should serve all static files and be locked into the web root directory Never allow users to dictate what happends Django Static Serve isn’t powerless drive, part = os.path.splitdrive(part) head, part = os.path.split(part) if part in (os.curdir, os.pardir): # Strip '.' and '..' in path. continue
  • 17. Click Jacking Use X-FRAME HTTP header X-FRAME-OPTIONS: DENY https://github.com/paulosman/django-xframeoptions Use a Framekiller <script type="text/javascript"> if(top != self) top.location.replace(location); </script> Beware of sites that you visit
  • 18. Session Hijacking FireSheep Cookie info not sent over HTTPS Pass the hash SESSION_COOKIE_SECURE = True SESSION_COOKIE_HTTPONLY = True Sessions Never store private data in clear text Never display session data without escaping it
  • 19. Cross Site Request Forgery <imgsrc="http://bank.example.com/withdraw?account=bob&amount=1000000&for=mallory"> We are logged in so it works Django protects us (unless we are really stupid) HTTP/1.0 200 OK Date: Mon, 17 Jan 2011 21:55:14 GMT Server: WSGIServer/0.1 Python/2.7.1 Expires: Mon, 17 Jan 2011 21:55:14 GMT Vary: Cookie Last-Modified: Mon, 17 Jan 2011 21:55:14 GMT ETag: "4030d6e6a6c31292791e61e8bc58b6e8" Cache-Control: max-age=0 Content-Type: text/html; charset=utf-8 Set-Cookie: csrftoken=9260e87b366dd2be2515bffffec5a746; Max-Age=31449600; Path=/
  • 20. Denial Of Service Everything is vulnerable Impossible to defend against every variant Harden your server Rate limiting Do this on a server level If you need to do this on a view level https://gist.github.com/719502 Fine tune access methods for your views restrict the HTTP method to the appropriate view
  • 21. Passwords Passwords are your biggest nightmare Don’t trust them Make sure that you are using SHA1 Even though it works md5 and crypt shouldn’t be used. crypt should NEVER be used!!! Rate limiting Use Django-axes http://code.google.com/p/django-axes/ Never rely on just a password If you can use 2 factor authentication do it.
  • 22. 0 Day Protection Run for the hills Good security is like a big onion Many layers Bitter Limit your exposure Server monitoring Remember a good programmer looks both ways before crossing a one way street.
  • 23. Security Tips Be wary of updates Update on security releases Beware of 3rd party apps Separate work from play Don’t rely on passwords Fail2Ban Stick with Django Be careful where you stray Scan often Skipfish

Editor's Notes

  1. Salted hashes make it harder to guess the password by making each password unique. They are immune to rainbow table (pre-generated hashes) attacks.
  2. Don’t try to create your own version of REST. Use something like Django-Piston which has a proven track record. Also never use your object ID’s in urls. If needed use UUID’s
  3. The regular Django auto escape helps in almost every case. However you need to protect yourself in every case. That’s why using the ESAPI is one of the best solutions to the overall problem.
  4. The Django ORM is escaping my LIKE query using the function on the bottom. All other queries are parameterized.
  5. SESSION_COOKIE_HTTPONLY should be set if you don’t want JavaScript to touch your cookie.
  6. Without that cookie you get a 403 if you want to post to that form.
  7. Easy 2 factor auth is sending a SMS to a persons cellphone. If your going to use OAUTH then remember to send everything secure (HTTPS).
  8. Django has a lot of security built in so if you ever replace any part of it make sure it’s secure enough to be on your website.