多くの場所で、QRコードを使用してログイン、QRコード支払い、QRコードアカウント(ここではQRコードスタリオン、詐欺については話しません)、QRコード検証、マルチ末端補助認証アプリケーションが増加し始めました。 QRコードとは何かについて話しましょう。実際、QRコードは、保存されているバイナリデータの白黒画像です。 QRコードがログインする必要がある場合、サーバーは一時的な一意のQRコード情報を生成し、クライアントに送信され、QRコード(写真)の形でWebページに書き込まれます。次に、4つの正方形のQRコードが表示されます。うまくいけば、このQRコード情報は時間効率の良いものでなければなりません。当面はこれらを考慮しません。例として、シンプルなWeChatログインをしましょう。
許可プロセス全体について話しましょう。
クライアントWebページは常にサーバーにHTTPS接続を送信し、データをほとんど送信した後、接続が切断されます。 WeChat WebページのLogin1c709c.jsファイルを見てみましょう。
(function($、_aowin){_aowin.qrlogin = {}; _aowin.loginlog = ""; var _sbasehost = ""、_ologinqrcodeimg = document.getElementbyid( "loginqrcode"); if(document.domain = "qq =" q q = " 「weixin.qq.com」 _ODETACTWEBMMINTERVAL = SETINTERVAL(function(){_aowin.webmm){clearInterval(_odetactwebmminterval); var callback; _loginpage(_aslog){_aowin.loginlog = _aslog + "/n"} afterloadwebmmdo(コールバック) _ReportNow(テキスト){_loginpage(text); ClearInterval(loadqrimgwatchdog); src: " + img.src +"、time: " +(new date()。gettime() - loadqrcodetime) +" ms ");}、loadqrimgwatchdog = null; function _loadqrimg(uuid){_poll(uuid); _loginpage(qurcode load(" load qrcode ");日付(); "https:// login _img.onload = function(!_ ologinqrcodeimg.onload = null; _img.src = _ologinqrcodeimg.src + " + new time()、5000)引数、_ntime = 0; "/cgi-bin/mmwebwx-bin/login?uuid =" + _asuuid + "&tip =" + show_tip、datatype: "script"、cache:false、timeout:_najaxtimeout、success:function(data、textstatus、jqxhr) +()。gettime() + "ms"); _fnewloginfunc = function(){$ .ajax({url:_aowin.redirect_uri + "&fun = new"、//新しいログインページタイプ: "get"、get "、success:function(msg){_loginpage(" new func reponse、reponsemsg: " + msg); msg.match(。*)<// skey = msg.(。*)<// skey>/){code [1]); webmm.model( "account")。setskey(skey [1]); _REPORTNOW(_aowin.redirect_uri + " + _nnewloginfuncerrcount(_fnewloginfunc、500); _Reportnow(cgi-bin/mmwebwx-bin/login、 " + _asuuid +"、 " + _scondrequesttime +" ms ") $( '。normldesc') _suuid); _afterloadwebmmdo(){_ aowin.log.d( "500、login svr except);}}}}}その他{function(){_asuuid)、5000); = 0、_getuuidwatchdog、_bgetuuidsuccess = false; // ajax成功_getuuid(){getuidcount ++、_loaderror = function(errortext){_reportnow( "load urutext + getuuidcount){confirm( "load uuid?"){reload()} {_ self(); if(_ aowin.qrlogin.code){_loginpage( "getuuid timeout、watchdog run"); "/jslogin?appid=wx782c26e4c19acffb&redirect_uri="+encodeuricomponent(locet.protocol+"//"+location.host+"/cgi-bin/mmwebwx-bin/webwxnewloginpage" 「スクリプト」、false、success:function(){_getuuidwatchdog); _getuuidsuccess = true; _loadqrimg(qrlogin.uuid); _LoadError(Qrlogin.code = " + qrloging)、function(xhr、erserther){_loginpage(" getuuidエラー、 if( "#login_container") ) "+" webwxuvid "+" =([^;]*)(; | $) ")) 「/cgi-bin/mmwebwx-bin/webwxstatreport?funkey = indexdemo&uvid = "+_ suvid+"&uuid = "+_ scuruuid} if(" img.guide ")。 $( "#guidetrigger、#tiptrigger")、_omask $ = $( "。mask"); _oguide $ .stop()。animate({magneleft: "-120px"、ofacity:0}、 "400"、function(){_oguide $ .hide();}、100); _oguidetrigger $ .css({"backgroundcolor": "white"、 "ofacity": "0"}); "block")。 cleartimeout(_ntimer);JSを注意深く読んだ後、Webクライアントからログイン側が表示されます。 Webクライアントは、500ミリ秒ごとにSSL要求をサーバーに開始し、現在のQRコードが他のクライアント(携帯電話)によって承認されているかどうかを要求します。戻り結果が201の場合、スキャンQRコード端子と同じアカウントを取得してログインしたことを意味します。他の状況の場合は、500ミリ秒後に再度リクエストを送信します。このプロセスは、QRコードがスキャンされるか、QRコードがタイムアウトされるまで続きます(無効)。
使用されるツールは次のとおりです。パッケージグラビングツールフィドラー、Chrome F12開発者ツール。偶然にも、WeChatのクライアントにはmin-WebMM1CBA21.jsがあり、XSSフィルター仕様ではっきりと表示されていることに注意してください。これは、白い箱でXSSをテストしたい人のためにQを取得することを期待しています! ! !
この記事は「JavaScript Wechat Development Skillsの要約」にまとめられており、誰もが学習して読むことを歓迎します。
「Wechat Mini Program Development Tutorial」の編集者が皆のために慎重にコンパイルしているWechatアプレットに関するチュートリアルをお勧めします。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。