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

jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...Edureka!
 
REST-API overview / concepts
REST-API overview / conceptsREST-API overview / concepts
REST-API overview / conceptsPatrick Savalle
 
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
 
XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?Yurii Bilyk
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Aaron Gustafson
 
A Basic Django Introduction
A Basic Django IntroductionA Basic Django Introduction
A Basic Django IntroductionGanga Ram
 
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...Garage4hackers.com
 
jQuery - Chapter 3 - Effects
jQuery - Chapter 3 - Effects  jQuery - Chapter 3 - Effects
jQuery - Chapter 3 - Effects WebStackAcademy
 
Build RESTful API Using Express JS
Build RESTful API Using Express JSBuild RESTful API Using Express JS
Build RESTful API Using Express JSCakra Danu Sedayu
 
Cross Site Request Forgery
Cross Site Request ForgeryCross Site Request Forgery
Cross Site Request ForgeryTony Bibbs
 

What's hot (20)

Best PHP Frameworks
Best PHP FrameworksBest PHP Frameworks
Best PHP Frameworks
 
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
jQuery Tutorial For Beginners | Developing User Interface (UI) Using jQuery |...
 
REST-API overview / concepts
REST-API overview / conceptsREST-API overview / concepts
REST-API overview / concepts
 
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
 
jQuery
jQueryjQuery
jQuery
 
Building Advanced XSS Vectors
Building Advanced XSS VectorsBuilding Advanced XSS Vectors
Building Advanced XSS Vectors
 
jQuery
jQueryjQuery
jQuery
 
XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?XSS - Do you know EVERYTHING?
XSS - Do you know EVERYTHING?
 
Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]Fundamental JavaScript [UTC, March 2014]
Fundamental JavaScript [UTC, March 2014]
 
Firebase slide
Firebase slideFirebase slide
Firebase slide
 
Restful web services ppt
Restful web services pptRestful web services ppt
Restful web services ppt
 
Rest API
Rest APIRest API
Rest API
 
API for Beginners
API for BeginnersAPI for Beginners
API for Beginners
 
Offzone | Another waf bypass
Offzone | Another waf bypassOffzone | Another waf bypass
Offzone | Another waf bypass
 
A Basic Django Introduction
A Basic Django IntroductionA Basic Django Introduction
A Basic Django Introduction
 
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...
Garage4Hackers Ranchoddas Webcast Series - Bypassing Modern WAF's Exemplified...
 
jQuery - Chapter 3 - Effects
jQuery - Chapter 3 - Effects  jQuery - Chapter 3 - Effects
jQuery - Chapter 3 - Effects
 
Google Dorks
Google DorksGoogle Dorks
Google Dorks
 
Build RESTful API Using Express JS
Build RESTful API Using Express JSBuild RESTful API Using Express JS
Build RESTful API Using Express JS
 
Cross Site Request Forgery
Cross Site Request ForgeryCross Site Request Forgery
Cross Site Request Forgery
 

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

Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 

Recently uploaded (20)

Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 

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.