41
Practical Django Security Andy Dai

Practical django secuirty

Embed Size (px)

Citation preview

Page 1: Practical django secuirty

Practical Django Security

Andy Dai

Page 2: Practical django secuirty

Software Security is HARD!

Page 3: Practical django secuirty

Quick Investigation

Page 4: Practical django secuirty

OWASP TOP 10 2013

Page 5: Practical django secuirty

10. Unvalidated Redirects and Forwards

Page 6: Practical django secuirty

http://www.example.com/redirect.jsp?url=evil.com

Page 7: Practical django secuirty

SOLUTION: Be careful!

Page 8: Practical django secuirty

9. Using Components with Known Vulnerabilities

Page 9: Practical django secuirty

SOLUTION: Check often and Upgrade often

Page 10: Practical django secuirty

8. Cross Site Request Forgery

Page 11: Practical django secuirty

SOLUTION: CSRF token & CAPTCHA

Page 12: Practical django secuirty

7. Missing Function Level Access Control

Page 13: Practical django secuirty

SOLUTION: Control your access

Page 14: Practical django secuirty

Django Provides

• @login_required

• Access Mixins in django-braces

Page 15: Practical django secuirty

6. Sensitive Data Exposure

Page 16: Practical django secuirty

Forget your password

Page 17: Practical django secuirty

NO SSL

Page 18: Practical django secuirty

SOLUTION: SSL & Encrypt all sensitive data

Page 19: Practical django secuirty

django-encrypted-fields

Page 20: Practical django secuirty

5. Security Misconfiguration

Page 21: Practical django secuirty

• Use default username/password

• Directory listing

• Debug Mode

Page 22: Practical django secuirty

4. Insecure Direct Object References

Page 23: Practical django secuirty

http://example.com/app/accountInfo?acct=notmyacct

Page 24: Practical django secuirty

SOLUTION: Access Control

Page 25: Practical django secuirty

3. Cross-Site Scripting(XSS)

Page 26: Practical django secuirty

SOLUTION: Check user input. Escape!

Page 27: Practical django secuirty

Django Template will do this for you

Page 28: Practical django secuirty

2. Broken Authentication and Session Management

Page 29: Practical django secuirty

h\p://example.com/sale/saleitems;jsessionid=

2P0OC2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii

Page 30: Practical django secuirty

1. Injection

Page 31: Practical django secuirty

SOLUTION

• Don’t Use SQL directly

• Check user input

• Turn off debug mode

Page 32: Practical django secuirty

Software Security is HARD!

Page 33: Practical django secuirty

Other Rules

Page 34: Practical django secuirty

Don’t mixing up data and code

Page 35: Practical django secuirty

What is code? What is data?

Page 36: Practical django secuirty

Explicit is better than implicit

Page 37: Practical django secuirty

class ArticleForm(ModelForm): class Meta: model = Article fields = ['pub_date', 'headline', 'content', ]

class ArticleForm(ModelForm): class Meta: model = Article exclude = ['id', ]

v.s

Page 38: Practical django secuirty

Don’t reinvent the wheel

Page 39: Practical django secuirty

Look to assert what is supposed to happen in

your application

Page 40: Practical django secuirty

Software Security is IMPORTANT!!

Page 41: Practical django secuirty

Q&A