• 常见web攻击及防范


    sql注入攻击
    sql注入的危害
    非法读取、篡改、删除数据库中数据
    盗取用户的各类敏感信息,获取利益
    通过修改数据库来修改网页上的内容
    注入木马等

    下面的例子告诉你,sql实现注入的原理

    def post(self,request):
        user_name = request.POST.get("username", "")
        pass_word = request.POST.get("password", "")
        
        import pyMySQL
        conn = pyMySQL.connect(
            'NAME': "mxonline",
            'USER':'root',
            'PASSWORD':'',
            'HOST':'127.0.0.1'
        )
        cursor = conn.cursor()
        sql_select = "select * from users where username='{0}' and password='{1}'".format(username,password)
        result = cursor.execute(sql_select)
        
        for row in cursor.fetchall():  # 检查数据库是否有该用户
            # 查询到用户
            pass
        print("没有查询到用户")

    前端输入:
    用户名:' or 1=1#
    密码随便输入:1234
    前端没有做任何处理就会原原本本的传给后端,
    后端收到用户名和密码,没有做任何处理,传进sql后就会是下面这样子:
    sql_select = "select * from users
    where username=\'\' or 1=1#\' and password=\'1234'\"

    username='' or 1=1 用户名=空 或者 1=1一定会成立,sql_select语句执行一定会,然后绕过,后面的因为被注释了不会执行
    该sql一定会执行通过,然后登录到系统

    预防的措施很简单,
    1.前端对输入的用户名和密码做有效检查,比如不能出现单引号等特殊符号
    2.后端同样对前端传过来的数据做有效性识别,对无效的数据直接抛弃

    xss跨站脚本攻击 cross site scripting

    xss攻击流程

    上面这个流程是常见的一个客户端向服务器发起请求url,服务器响应数据给客户端的过程
    下面黑客可以通过url的key=value
    (key=)

    场景描述:
    黑客控制了受害者(受害者成为了肉鸡),将url伪装成上面括号的样子,发送到服务器,服务器执行脚本后返回cookie给受害者,受害者把cookie中的sessionid发送给黑客,黑客拿到用户的sessionid就可以伪装成用户直接请求服务器中的数据,比如黑客已经窃取了后台管理员账号的cookie,那么就可以进入用户中心,拿到用户中心的所有用户数据。

    xss预防措施:
    1.代码里对用户输入的地方和变量都需要仔细检查长度和对" < "," > "," ; "," ' "等字符做过滤或者转义,把他encode掉。
    2.避免直接在cookie中泄露用户隐私,例如email、密码等,通过使用cookie和系统ip绑定来降低cookie泄露后的危险
    3.尽量采用post而非get请求表单

    csrf 跨站点请求伪造 cross-site request forgery

    csrf危害
    以你的名义发送邮件
    盗取你的账号
    购买商品
    虚拟货币转账

    csrf攻击原理

    场景:
    在浏览器打开一个信任的网站,(session有效)然后在该浏览器新打开一个标签页(危险网站)。

    <img src=http://www.mybank.com/Transfer/toBankId=11*&money=1000>

    既是使用post请求,也一样会被攻击,以下面这段代码为例(实际就是哦攻击网站的源码):
    自定义一个form,在用户浏览器加载完html后,自动执行该段代码发起post请求,实现csrf攻击

    <!DOCTYPE html>
    <html>
    <head>
      <script type="text/javascript">
        function steal()
        {
            iframe = document.frames["steal"];
            iframe.document.Submit("transfer");
        }
      </script>
    </head>
    <body onload="steal()">
      <iframe name="steal" display="none">
        <form method="POST" name="transfer" action="http://www.myBank.com/Transfer">
          <input type="hidden" name="toBankId" value="622909123456">
          <input type="hidden" name="money" value="1000">
        </form>
      </iframe>
    </body>
    </html>>

    预防措施:
    django在前端页面表单提交里面,每次表单提交都一定要带上{% csrf_token %},才能完成表单提交,以此来防护csrf攻击,攻击网站是无法生成 csrf_token的,即使生成了,他也无法完成后台验证

  • 相关阅读:
    对于进程的理解
    反汇编引擎实现——流程分析
    window异常处理——except_handler4以及栈展开分析
    对于硬盘驱动的理解
    对文件系统的理解
    移动端适配flexible.js
    vue学习(5)-评论功能(利用父组件的方法)
    vue学习(4)-组件的创建,父子组件传值,$refs
    vue学习(3)-增删改查
    vue学习(2)-过滤器
  • 原文地址:https://www.cnblogs.com/kknote/p/16103464.html
Copyright © 2020-2023  润新知