1、sql注入攻击及防范
2、xss攻击和防范
3、csrf攻击和防范
一、sql注入攻击和防范
1、sql注入的危害:
非法读取、篡改、删除数据库中的数据
盗用用户的各种敏感信息,获取利益
通过修改数据库来修改网页上的内容
注入木马
2、攻击的方法:
项目中,执行数据库中操作不是用orm来编写,用原生的sql语句,例如登录页面:
1 from django.shortcuts import render 2 class LoginUnsafeView(View): 3 def get(self,request): 4 return render(request,'login.html') 5 def post(self,request): 6 user_name=request.POST.get('username','') 7 pass_word=request.POST.get('password','') 8 import MySQLdb 9 db=MySQLdb.connect("localhost","root","","testdb",charset='utf8') 10 cursor=db.cursor() 11 cursor.execute("select * from userprofile where username={0} and password={1}".format(user_name,pass_word)) 12 data=cursor.fetchall() 13 db.close()
如果在登录页面用户名输上:'OR 1=1 # 相当于:‘select * from userprofile where user=\\'\\' or 1=1#’ and password=\\'123\\'
1=1一定为真,所以用户会把所有的数据都拿到,然后进行数据库攻击。
预防措施:前端进行表单校验,is_valid(),django的models中操作的数据库方法已经对sql注入攻击进行了处理。
二、xss攻击和预防
1、xss跨站脚本攻击(cross site scripting)的危害:
盗用各类用户账号,如用户网银账号,各类管理员账号、盗用企业重要的具有商业价值的资料
非法转账
控制受害者机器向其他网站发起攻击、注入木马等
2、实例:get请求数据
获取用户本地的session_id和所有本地的缓存
攻击流程:
这样黑客就可以伪装成用户向服务器发起攻击,这就是跨站脚本攻击
3、如何防护
首先代码里对用户输入的地方和变量都进行仔细的检查长度和对“<”">"";" "等字符进行过滤;
避免直接在cookie中泄露用户隐私,例如email,密码等等
通过使用cookie和系统ip绑定来降低cookie泄露后的风险
尽量采用post并非get提交表单
三、crsf攻击
csrf跨站请求伪造(cross-site request forgery)的危害:
以用户名义发送邮件
盗取用户的账户
购买商品
虚拟货币转账
csrf攻击原理:
用户向A服务器(银行)发送请求,返回时会带上请求的sessionid,之后在没有关闭或者说没有sessionid没有过期的情况下,又新打开一个窗口,访问黑客的网站,黑客给他返回一个图片,这个图片隐藏着一个向a服务器发送转账请求的url,然后用户一访问,钱就没了。
post请求也会受到这种攻击,通过iframe,然后执行脚本
csrf攻击的防范措施:在form表单中加{%crsf_token%}