常见web攻击

一、sql注入攻击及防范

1、sql注入的危害

  • 非法读取,篡改,删除数据库中的数据
  • 通过修改数据库来修改网页上的内容
  • 盗取用户的各类敏感信息
  • 注入木马等
  • 是黑客攻击常用的手段

2、sql注入攻击原理

class LoginUnsafeView(View):
    def get(self, request):
        return render(request, "login.html", {})
    def post(self, request):
        user_name = request.POST.get("username", "")
        pass_word = request.POST.get("password", "")

        import MySQLdb
        conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='root', db='mxonline', charset='utf8')
        cursor = conn.cursor()
        sql_select = "select * from users_userprofile where email='{0}' and password='{1}'".format(user_name, pass_word)

        result = cursor.execute(sql_select)
        for row in cursor.fetchall():
            # 查询到用户
            pass
        print 'test'

用户在登录的时候用户名如果输入 ' OR 1=1, 密码随便输入,SQL语句就变成了这样:

  select * from users_userprofile where email='' OR 1=1' and password='123',email='' or 1=1这条件就直接为True了,不用去执行后面的and语句了,那么是不是直接就将用户的信息拿到了呢,所以这种写法是非常危险的。

  那么如何去防护呢?可以尽量不去使用SQL原生语句去获取数据,可以通过django的orm去查询数据,在登录的使用使用django的login函数,这个函数是安全的。

2、xss攻击与防护

(1) xss跨站脚本攻击的危害

  • 控制受害者机器向其他网站发起攻击,注入木马
  • 盗取各类用户账号
  • 非法转账等

(2)xss攻击原理

  黑客将一段带有js代码的url发送给用户,用户点击这个url后发送请求到服务器,服务器返回数据给受害者,然后浏览器执行这段js脚本将用户的cookie信息发送给黑客,然后黑客拿着用户的cookie伪装成用户向服务器发送请求,这时黑客就可以进行任何攻击或者其他操作。

(3)xss防护

  • 对用户输入的地方和变量都检查长度和对<>;'等字符做一些过滤
  • 不要在cookie中泄露用户的隐私数据,如用户名和密码
  • 将cookie和系统ip绑定来降低cookie泄露后的危险
  • 尽量采用POST方法而非GET提交表单

3、csrf攻击与防护

(1)csrf攻击的危害

  • 以用户的名义去发送邮件
  • 盗取账号
  • 购买商品
  • 虚拟货币转账

(2) csrf攻击的原理

  用户登录受信任的A服务器,服务器返回cookie,用户之后的每次请求都会带上cookie去访问A服务器,但是用户在同时的时候没有登出或者关闭A服务器的页面,直接去访问危险的B服务器,然后B服务器要求用户去访问A的一个url,这时信息就会泄露。

(3) csrf攻击的防护

  在每个form中加上{{ csrf_token }}即可

你可能感兴趣的:(Django)