PHP 模擬用戶點擊按鈕自動登錄網站后臺

  • PHP二次開發
  • 2018-8-2 08:24
  • PHP二次開發
  • 閱讀(1395)
  • 評論(8
  • 摘要: 實現目標:用戶點擊按鈕,自動登錄到某網站后臺。前提:知道網站的用戶名密碼哈,不存在破解思路。疑難點:1.驗證碼的識別2.ajax提交的跨域問題驗證碼的識別技術上的實現這里不做討論,本人是采用的融合接口來實現的 ...
    實現目標:用戶點擊按鈕,自動登錄到某網站后臺。
    前提:知道網站的用戶名密碼哈,不存在破解思路。
    疑難點:
    1.驗證碼的識別
    2.ajax提交的跨域問題

    驗證碼的識別技術上的實現這里不做討論,本人是采用的融合接口來實現的,這里討論的驗證碼的識別是指的抓取驗證碼的步驟。
    剛開始是想著,PHP服務端抓取驗證碼,然后直接提交給接口識別,后來發現一個問題,PHP是在服務端跑的程序,其訪問驗證碼攜帶的session信息與客戶端瀏覽器訪問的時候是不同的,會導致提交登錄信息的時候,驗證碼會跟隨改變,無法通過驗證。
    最終實現方案:
    比如:模擬登錄的代碼在A服務器,需要登錄到B服務器,客戶端代號為C

    實現代碼:
    index.php
    <?php
    header("Content-type:text/html;charset=utf-8");

    ?>
    <!--HTML-->
    <script src="http://10.1.0.18:82/Public-shandong/js/jquery-1.10.2.min.js" type="text/javascript"></script>
    正在跳轉中,請稍后。。。
    <div style="display:none">
    <form action="http://10.1.0.18:82/Home/Index/login.html" method="post" id="test_form">
        <input type="hidden" name="username" value="admin"  />
        <input type="hidden" name="passwd" value="www.fujvln.live" />
        <input type="text" name="verifyCode" id="verifyCode" value="<?php echo $code; ?>" />
        <button type="button" id="btn_login">提交<button/>
    </form>
    </div>
    <script type="text/javascript">
        $(function () {
            $('#test_form').submit(function(){
                $.post("http://10.1.0.18:82/Home/Index/login.html", $('#test_form').serialize(), function (data) {
                    if (data.ret) {
    alert(data.ret);
                        $('.error').show().html(data.msg);
                        $(':input[name="verifyCode"]').val('');
                        return;
                    }
                    window.location.href = data.data;
                }, 'json',true);
                return false;
            });
            $('#btn_login').click(function () {
                $('#test_form').submit();
            })
        })

          var url = "http://10.1.0.18:82/Home/Index/verifyCode.html";//這是驗證碼地址
       convertImgToBase64(url, function(base64Img){
            //轉化后的base64
            //console.log(base64Img);
              $.post("http://10.1.0.18:82/autologin/identify.php",{iddentify:base64Img},function(result){
                   console.log(result);
                  $("#verifyCode").val(result);
    $('#test_form').submit();
              });
       }); 

        //實現將項目的圖片轉化成base64
        function convertImgToBase64(url, callback, outputFormat){
           var canvas = document.createElement('CANVAS'),
          ctx = canvas.getContext('2d'),
          img = new Image;
          img.crossOrigin = 'Anonymous';
          img.onload = function(){
              canvas.height = img.height;
              canvas.width = img.width;
              ctx.drawImage(img,0,0);
              var dataURL = canvas.toDataURL(outputFormat || 'image/png');
              callback.call(this, dataURL);
              canvas = null; 
            };
          img.src = url;
        }
    </script>

    identify.php
    <?php
    header("Content-type:text/html;charset=utf-8");
    $ch = curl_init('http://op.juhe.cn/vercode/index');
    $cfile = $_POST['iddentify'];
    $arr = explode(",",$cfile);
    $cfile = $arr[1];
    //echo $cfile;
    $data = array(
      'key' => '這里寫自己的key', //請替換成您自己的key
      'codeType' => '6001', // 驗證碼類型代碼,請在https://www.juhe.cn/docs/api/id/60/aid/352查詢
      'base64Str' => $cfile,
    );
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1);
    $response = curl_exec($ch);
    curl_close($ch);
    $code1 = json_decode($response,true);
    $code = $code1['result'];
    echo $code;

    根據以上的思路,解決驗證碼問題,并實現數據提交,因為提交數據也是采用的ajax的形式,A服務器與B服務器處于不同的域名下,這樣就存在跨域問題。
    跨域問題的解決思路:
    跨域其實就是域名不同,不在一個服務器下,那么可以通過反向代理,弄到一個域名下,本人這里使用的是Nginx服務
    反代的代碼如下:
    server
    {
        listen 82;
        server_name 10.1.0.18:82;

        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://10.1.0.8:80;
        }
        location /autologin/ {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://10.1.0.18:85/autologin/;
        }
    }


    PHP技術交流QQ群:422137578

    除非注明,文章均為 PHP二次開發 原創,轉載請注明本文地址:http://www.fujvln.live/article-2690-1.html

    相關閱讀

    發表評論

    最新評論

    引用 玩轉英語語法   2019-7-29 15:15
    思維導圖做得不錯,今后我編程時也要這樣做。
    引用 公主家   2019-5-10 00:55
    支持博主
    引用 保皇游戲   2019-4-10 09:03
    文章寫得真專業,支持博主
    引用 怎么在網絡上賺錢   2019-3-23 09:59
    支持博主
    引用 中國律師庫   2018-8-27 16:50
    財神進家門,好運進家門,有許多人會在新年時,祈求新的一年能賺大錢
    引用 分板機   2018-8-22 17:31
    這個思路不錯,很詳細
    引用 盧松松博客   2018-8-21 20:37
    只夠技術的!試試看怎么樣
    引用 廣安網站建設   2018-8-15 09:36
    支持博主

    查看全部評論(8)

    用戶名:  *

    郵 箱:  *

    網 址: 注意加上“http://”哦!