Django之sql注入,XSS攻击,CSRF攻击原理及防护

Django之sql注入,XSS攻击,CSRF攻击原理及防护

sql注入的危害

非法操作用户数据库的数据来获取利益,
通过修改数据库来修改网页的内容,

注入木马等

比如下面的用户登录时进行sql注入


       
       
       
       
  1. class LoginUnsafeView(View):
  2. def get(self,request):
  3. return render(request, 'login.html')
  4. def post(self,request):
  5. user_name = request.POST.get( 'username', '')
  6. pwd = request.POST.get( 'password', '')
  7. import MYSQLdb
  8. conn = MYSQLdb.connect(host= "127.0.0.1",user= 'root',password= 'root',db= 'test',charset= 'utf8')
  9. cursor = conn.cursor()
  10. sql_select = "select * from users_userprofile where email='{0}' and password='{1}' ".format(user_name,pwd)
  11. result = cursor.execute(sql_select)
  12. for row in cursor.fetchall():
  13. pass

Django的ORM是不会有sql注入的。他会将单引号等转义的。如果在登录页面随便写个错误的用户名后端不会查询到该用户,但是当在登录页面写上sql比如有 单引号和OR 语句, 后端能查询到sql注入的用户

Django之sql注入,XSS攻击,CSRF攻击原理及防护_第1张图片

点击 登录 ,后台就会查询到所有的数据。因为该sql注入,会使下面的查询为真的,这个1=1 就使条件为真

Django之sql注入,XSS攻击,CSRF攻击原理及防护_第2张图片


xss攻击

危害:

1 盗取各类用户帐户,如网银账户

2 盗取企业重要的具有商业价值的资料

3 非法转账

4 控制受害者及其向其他网站发起攻击,注入木马等

攻击流程

Django之sql注入,XSS攻击,CSRF攻击原理及防护_第3张图片

如果黑客发送的链接没有了“<” 那么xss发送来的script代码就无法执行了,所以可以通过以下方式防护

1 代码里对用户输入的地方和变量都需要仔细检查长度和对“>”,"<" ,  " ; " ,  " ' "等字符做过滤;
2 避免直接在cookie中泄露用户隐私,例如email、密码等等
3 通过使cookie和系统ip绑定来降低cookie泄露后的危险
4 尽量采用POST而非GET提交表单 


csrf攻击

csrf跨站请求伪造(Cross-site request forgery)的危害
1 以你名义发送邮件
2 盗取你的账号
3 购买商品
4 虚拟货币转账 

攻击原理

Django之sql注入,XSS攻击,CSRF攻击原理及防护_第4张图片

攻击示例过程


Django之sql注入,XSS攻击,CSRF攻击原理及防护_第5张图片

 

信任网站bank.com页面的情况下访问了wenxian.com(关闭后可能导致cookie消失,csrf攻击就无用了),这时浏览器会自动加载比如image中的代码(即危险网站要求访问bank网站),这时浏览器就会带着用户的cookie去访问bank网站,bank网站以为是用户就通过,从而达到了一次csrf(跨站请求伪造)攻击

Django之sql注入,XSS攻击,CSRF攻击原理及防护_第6张图片

上面的是get方式发起攻击,下面的post也能完成攻击,当用户点击了危险网站后,自动执行下面的post代码,完成攻击

Django之sql注入,XSS攻击,CSRF攻击原理及防护_第7张图片

所以在处理敏感数据的时候就用表单进行post提交,然后加上{% csrf_token %}。攻击网站即使生成自定义的csrf_token码也无法完成后台验证


你可能感兴趣的:(Django)