• iframe和伪造ajax


    iframe和伪造ajax

    1.iframe标签

    • <iframe>标签是一个内联框架,即用来在当前HTML页面中嵌入另一个文档的,且所有主流浏览器都支持iframe标签。

    1.1基本用法

    <iframe src="地址、或者html文件">
    </iframe>
    
    • 示例
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h2>Hello World</h2>
        <iframe width="80%" height="300px" src="https://www.bilibili.com/"></iframe>
    </body>
    </html>
    

    image-20211201145429615

    1.2多个嵌套

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h2>Hello World</h2>
        <iframe width="80%" height="300px" src="https://www.bilibili.com/"></iframe>
        <iframe width="80%" height="300px" src="https://music.163.com/"></iframe>
        <!-- HTML文件 -->
        <iframe width="80%" height="300px" src="index.html"></iframe>
    </body>
    </html>
    
    • 有的网站由于存在安全机制的问题不能够直接使用iframe标签进行访问;

    image-20211201150149732

    • 多个嵌套也可以结合Pyecharts的图表构建简单的可视化大屏;

    2.结合Form表单

    2.1 Form表单的提交方式

    • 原生方式提交,<input type="submit" value="提交" />

    • 使用js提交

      <!DOCTYPE html>
      <html lang="en">
      <head>
          <meta charset="UTF-8">
          <title>Title</title>
      </head>
      <body>
          <h2>Hello World</h2>
          <form id="f1" method="post" action="">
              {% csrf_token %}
              用户名:
              <input name="name" id="name" />
              <button id="btn" onclick="submitForm();">提交</button>
          </form>
          <script>
              //JS提交form表单
              function submitForm(){
                  document.getElementById("f1").submit();
              }
          </script>
      </body>
      </html>
      
    • 经实验发先两种提交方式均会跳转界面;因此我们可以借助iframe标签实现form表单的提交

    2.2 iframe伪造Ajax

    • 步骤:
      • 1.添加<iframe>标签,并添加idname,为了在界面上显示的不突兀,我们使用css将iframe标签进行隐藏;
      • 2.在form标签中添加target=“iframe的name”
      • 3.使用js进行数据的发送
    • image-20211201153019345

    • 提交后后台已经能够接收到数据;

    2.3 接收返回值

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <h2>Hello World</h2>
        <!--
        <iframe width="80%" height="300px" src="https://www.bilibili.com/"></iframe>
        <iframe width="80%" height="300px" src="https://music.163.com/"></iframe>
        <iframe width="80%" height="300px" src="index.html"></iframe>
        -->
        <form id="f1" method="post" action="" target="ifr1">
            {% csrf_token %}
            用户名:
            <input name="name" id="name" />
            <button id="btn" onclick="submitForm();">提交</button>
        </form>
        <iframe name="ifr1" id="ifr" style="display: none"></iframe>
        <script>
            function submitForm(){
                //获取内容
                document.getElementById("ifr").onload=loadIframe;//注意不要写括号;或者可以将iframe标签放在最底部因为loadIframe标签加载时可能iframe标签未加载
                document.getElementById("f1").submit();
            }
            function loadIframe(){
                var content=document.getElementById("ifr").contentWindow.document.body.innerText;
                //contentWindow获得iframe的对象,包含document;
                //onload每次接收到请求都会重新加载一次
                alert(content);
            }
        </script>
    </body>
    </html>
    

    image-20211201155355878

    3.补充:django中通过iframe

    • 参考文献:https://blog.csdn.net/weixin_42886895/article/details/88970578

    • django的老版本可能不会有这个问题;返回HttpResponse的时候会遇到拒绝连接的情况

    • 目前我使用的django==3.2.5的版本

    • from django.views.decorators.clickjacking import xframe_options_exempt
      @xframe_options_exempt
      def autohome(request):
          if request.method=="GET":
              return render(request,'autohome.html')
          else:
              name=request.POST.get("name")
              print(name)
              return HttpResponse("123")
      
    • 使用装饰器啊修饰过后仅,改函数可以正常的返回iframe的信息;如果需要设置全部或者更详细的操作请参考参考文献;

    继续努力,终成大器;

  • 相关阅读:
    SDN第二次上机作业
    SDN第二次作业
    SDN第一次上机作业
    个人作业-软件产品案例分析
    pandas之Series
    pandas简答介绍
    python爬取英文名
    python爬取动态网页
    python画树
    Python存储数据的方式
  • 原文地址:https://www.cnblogs.com/Blogwj123/p/15629421.html
Copyright © 2020-2023  润新知