Cisco WebVPN訪問Asp.net 遇到的問題

來源:互聯網
上載者:User
前幾日,培訓系統爆出兩個Bug,都是外網通過WebVPN訪問產生的,在內網訪問一 點問題都沒有,該問題描述如下:
  1. 帶有MagicAjax 的頁面都報錯,說找不到 /AjaxCallObject.js
  2. 考試頁面出現一堆ICag的字串

第一個問題,我認為是以用的路徑不對,於是我尋找產生的HTML Dode,發現串連是被改了的,但是還是可以訪問出來,於是我嘗試強制引入該 JS,問題依舊, 我再把該JS檔案的內容Copy 到網頁中,問題依舊頭痛,先放下畢竟只是一個彈出框,不影響使用者的使用,只是少一點Ajax的絢麗。

第二個問題還是通過查看ICag是什麼東東,經過和在內網訪問產生的HTML代碼進行對比發現 ViewState 前面的一段不知所終,那一堆ICag就是ViewState 裡的東西

於是,我想看來是WebVPN對ViewState是有點偏見,於是我想我把ViewState替換替換看看怎麼樣,但是怎麼替換呢?
我突然想到以前看過的文章壓縮ViewState,於是一頓Baidu 找到了
程式如下:        #region 壓縮ViewState

        protected override void SavePageStateToPersistenceMedium(Object pViewState)
        {
            LosFormatter mFormat = new LosFormatter();
            StringWriter mWriter = new StringWriter();

            mFormat.Serialize(mWriter, pViewState); 
            String mViewStateStr = mWriter.ToString(); 

            byte[] pBytes = System.Convert.FromBase64String(mViewStateStr);

            pBytes = Compress(pBytes); 

            String vStateStr = System.Convert.ToBase64String(pBytes); 

            RegisterHiddenField("__MSPVSTATE", vStateStr);
        }

        protected override Object LoadPageStateFromPersistenceMedium()
        {
            String vState = this.Request.Form.Get("__MSPVSTATE");

            byte[] pBytes = System.Convert.FromBase64String(vState);

            pBytes = DeCompress(pBytes);

            LosFormatter mFormat = new LosFormatter();

            return mFormat.Deserialize(System.Convert.ToBase64String(pBytes));
        }

        public static byte[] Compress(byte[] pBytes) 
        { 
            MemoryStream mMemory = new MemoryStream();

            Deflater mDeflater = new Deflater(ICSharpCode.SharpZipLib.Zip.Compression.Deflater.BEST_COMPRESSION);
            ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream mStream = new ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream(mMemory,mDeflater,131072);

            mStream.Write(pBytes,0,pBytes.Length);
            mStream.Close();

            return mMemory.ToArray();
        } 

        public static byte[] DeCompress(byte[] pBytes) 
        { 
            ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream mStream = new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(new MemoryStream(pBytes));
            
            MemoryStream mMemory = new MemoryStream();
            Int32 mSize;

            byte[] mWriteData = new byte[4096];

            while(true)
            {
                mSize = mStream.Read(mWriteData, 0, mWriteData.Length);
                if (mSize > 0)
                {
                    mMemory.Write(mWriteData, 0, mSize);
                }
                else
                {
                    break;
                }
            }

            mStream.Close();
            return mMemory.ToArray();
        } 

        #endregion

運行,成功問題解決了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.