微信JSAPI模式與瀏覽器類型安全訪問

引言:微信瀏覽器是在微信安裝時內置在微信中的,針對瀏覽器的類型我們可以設置相應的安全策略——僅允許在微信內置瀏覽器中打開。 
本文選自《微信企業號開發完全自學手冊》。

1 JSAPI模式介紹

  在介紹JSAPI模式之前,首先需要介紹一下微信內置瀏覽器。可能很多人注意到了,在打開微信“朋友圈”鏈接的時候會出現進度條,如圖5.1所示,這實際上就是微信內置瀏覽器訪問頁面的進度。也就是說,“朋友圈”是通過微信內置的瀏覽器訪問的手機頁面,並且微信瀏覽器是在微信安裝時內置在微信中的。 
          【圖1】
                    微信內置瀏覽器進度條

注意:iPhone(蘋果)和Android(安卓)的微信內置瀏覽器不同,安卓手機上的微信使用的是QQ瀏覽器X5內核,蘋果手機上的微信使用的則是Safari瀏覽器。

  JSAPI模式是通過調用微信JS-SDK開發手機Web頁面的模式,本質上亦是開發B/S(Browser/Server,瀏覽器/服務器模式)服務,只是業務上較以往的PC業務更加方便,功能上也稍具差異。在微信JSAPI模式下,不僅可以調用微信拍照、選圖、語音、位置等手機功能,還可以實現微信分享、掃一掃等微信特有的功能,同時,可以使用HTML5完成頁面效果的豐富,實現更加完美的用戶體驗。

2 瀏覽器類型安全訪問

  針對瀏覽器的類型我們可以設置相應的安全策略—僅允許在微信內置瀏覽器中打開。 
  通過ServletActionContext.getRequest().getHeader(“User-Agent”)獲得當前瀏覽器代理信息,各類型瀏覽器代理信息如下: 
(1)IE瀏覽器:

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)

(2)Google瀏覽器:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36

(3)360安全瀏覽器:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36

(4)UC瀏覽器:

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/5.7.15319.202 Safari/537.36

(5)手機QQ瀏覽器:

Mozilla/5.0 (Linux; Android 4.2.2; N1W Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.2 TBS/036558 Safari/537.36 V1_AND_SQ_6.5.0_390_YYB_D QQ/6.5.0.2835 NetType/WIFI WebP/0.3.0 Pixel/1080

(6)Android微信內置瀏覽器:

Mozilla/5.0 (Linux; Android 4.2.2; N1W Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.2 TBS/036558 Safari/537.36 MicroMessenger/6.3.23.840 NetType/WIFI Language/zh_CN

(7)iPhone微信內置瀏覽器:

Mozilla/5.0 (iPhone; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13G36 MicroMessenger/6.3.24 NetType/4G Language/zh_CN

  通過對比多個瀏覽器的代理信息,可以發現一個關鍵信息“MicroMessenger”。通過“MicroMessenger”便能夠區分請求的來源,從而保證信息只能在微信中打開,示例代碼如下:

    HttpServletRequest req = ServletActionContext.getRequest();
    //識別微信瀏覽器
    String userAgent=req.getHeader("User-Agent");//裏面包含了設備類型
    if(-1==userAgent.indexOf("MicroMessenger")){
        //如果不是微信瀏覽器,則跳轉到安全頁
        return "safePage";
    }

  JSP頁面中,防止外部瀏覽器打開方法的示例代碼如下:

<%
    //識別微信瀏覽器
    String userAgent=request.getHeader("User-Agent");//裏面包含了設備類型
    if(-1==userAgent.indexOf("MicroMessenger")){
        //如果不是微信瀏覽器,則跳轉到安全頁
        request.getRequestDispatcher("noRightPage.jsp").forward(request, response);
    }
%>

  備註:在微信中,可以通過userAgent.indexOf(“iPhone”)來區分是Android手機還是iPhone手機,示例代碼如下:

HttpServletRequest req = ServletActionContext.getRequest();
String userAgent=req.getHeader("User-Agent");//裏面包含了設備類型
if(-1!=userAgent.indexOf("iPhone")){
//-------如果是蘋果手機----------//
//此方法需要瀏覽器自己能夠打開,iOS可以,但是微信Android版內置瀏覽器不支持
}else{
//如果非蘋果手機,則自己處理文檔
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章