微調你的Web站點以適應Windows XP Service Pack 2(翻譯) --- Windows XP SP 2-對Web開發者的安全信息(一)

微調你的Web站點以適應Windows XP Service Pack 2

原作:Microsoft Corporation 2004年7月
譯者:Amom 2004年8月
原文鏈接:http://msdn.microsoft.com/security/productinfo/xpsp2/default.aspx?pull=/library/en-us/dnwxp/html/xpsp2web.asp

應用於:
  • Microsoft ActiveX控件
    Microsoft IE瀏覽器
    Microsfot Outlook
    Microsoft Windows XP SP2

摘要:確保你的站點在Windows XP Service Pack 2的新安全特性下運行良好,這些特性將影響到ActiveX控件,文件下載,彈出窗口等很多方面。

包含的主題:

你的Web站點使用微軟ActiveX控件嗎?

在Windows XP Service Pack 2中,通過使用信息欄(Information Bar)可以從一開始就將ActiveX控件的模態安裝提示攔截。當你升級已安裝的ActiveX控件時,倘若遇到下列情況之一,系統將生成一個異常:

  • ActiveX控件必須通過信任代碼技術的驗證才能在計算機上註冊。(它引用於HKEY_CLASSES_ROOT/CLSID/{control_clsid}/InProcServer32,在這裏control_clsid是用OBJECT標籤表示的CLSID)
  • 新控件上數字簽名的發佈者名稱必須匹配已存在控件上數字簽名的發佈者名稱。
  • 如果ActiveX控件是用CAB文件打包,那麼它必須通過驗證。DLL或OCX也必須驗證來保證以後的升級中不再被信息欄攔截。

如果信息欄攔截了一個ActiveX控件,IE瀏覽器將顯示一個內嵌圖標和替代控件安裝指示信息的文字。用戶可以點擊這個區域或信息欄去安裝這個ActiveX控件。

ActiveX控件是用CAB文件分發的嗎?

如果是,注意以後升級控件時安裝提示同樣會被信息欄攔截,除非你通過簽名DLL或OCX註冊了ActiveX控件。

當一個ActiveX控件是否被安裝時你的Web站點是否有不同的處理?(例如,自動轉向或者在刷新時特殊處理)

一些Web網頁在用戶選擇不安裝ActiveX控件時自動轉向或者刷新頁面後採取不同的處理。在某些情形下,通過這種方式你的站點可以使用戶不安裝控件,避免了一次糟糕的用戶體驗。

當你碰到網頁不能夠區別是用戶拒絕安裝還是控件被信息欄攔截時,推薦的做法是在一個獨立頁面中創建一個新的控件實例來解釋安裝此控件的用途。同樣,請在<OBJECT>標籤裏用一個<SPAN>模塊動態顯示幫助文本給安裝失敗的用戶。

你的Web站點有信任代碼提示圖像嗎?

爲了避免用戶混淆,你可以更新這些圖像去反映新信任代碼的用戶界面(UI)。你可以使用User Agent字符串去測定瀏覽器版本。(檢測SP2的更多信息參見一般提示。)

ActiveX安裝對話阻止了控件的安裝嗎?

如果對話在安裝時沒有提供一個選項,文件將不會正確地通過驗證。確保你有驗證文件及簽名有效。當簽名失效時,SP2默認地會隱藏控件的安裝。

關於ActiveX的最佳措施

  • 不要使用彈出窗口或模態對話框來安裝控件。
  • 不要建議用戶在安裝ActiveX控件時降低他們系統的安全設置。
  • 在一個獨立的頁面中創建一個控件實例描述控件用途和對用戶的最終影響。

你的Web站點允許用戶下載文件嗎?

在SP2中,信息欄將攔截自動載入的文件下載提示。

相對於SP1,在SP2中,文件下載提示,郵件附件,Shell和程序安裝都已被修改的更加穩固和清晰。當你下載一些能夠被標記、對計算機有潛在威脅的文件時,SP2將顯示該文件的發佈者信息。(通常被標記對用戶計算機有潛在威脅的文件類型是.exe,.dll,.ocx,.msi)

你的Web站點自動載入下載提示嗎?

如果Web站點嘗試去鏈接一個下載資源而顯示文件下載對話框並導致用戶無法通過鼠標和鍵盤來控制計算機行爲時,信息欄將攔截這個文件下載提示。

如果不希望下載被攔截,請確保讓用戶直接控制下載。

你的Web站點包含文件擴展名不匹配內容類型的文件嗎?

如果MIME-Handlers處理了你的站點服務器文件,那麼這些文件的擴展名應該和MIME-Handlers有一致的ProgID。如果一個文件的內容類型的ProgID不匹配它的擴展ProgID,SP2下的IE瀏覽器將採取下列兩個措施:1)用戶被提示下載文件; 2)當執行MIME-Handler失敗時,它的擴展Handler將不被執行。

你可以通過改變內容類型以匹配擴展類型來糾正這些錯配,前提是確保這些措施對你的Web站點有利。例外情況:在某些情況下這種改變將是無用的。這些情況是在"content-disposition=attachment"頭部信息發送的時候,文件名或擴展名將由服務器來最終決定而不是通過MIME。

你的Web站點有使用下載模態對話框圖像,或是在用戶點擊安裝控件的地方顯示圖像或文字嗎?

如果顧客使用了SP2,請確保更新指向下載提示來反映新下載會話的圖像。在IE中,你可以使用User Agent字符串來確定顯示信息的圖像版本。(檢測SP2的更多信息參見一般提示。)

你的Web站點有需要數字驗證的下載嗎?

現在,SP2可以檢測那些需要數字驗證文件的數字簽名。最常見的例子是包括以下擴展名的文件:.exe,.dll,.ocx,.msi。如果你發佈過需要信任代碼技術驗證的文件,那麼顧客現在能夠去驗證你創建的文件。這種應用包含IE瀏覽器和Outlook Express。

你的Web站點使用彈出窗口嗎?

現在SP2下的IE瀏覽器包含一個默認打開的彈出窗口攔截器。這個攔截器可以干擾那些通過腳本自動彈出窗口的站點。它還包括一個信任列表來列入那些用戶允許彈出新窗口的站點。默認情況下,彈出窗口攔截器不會嘗試去攔截來自企業內部網和信任站點區域的彈出窗口。

IE瀏覽器

IE瀏覽器將會阻止除createPopup()之外的從腳本自動打開的任何窗口。受此影響的一些常用函數是:window.open(), showModelessDialog(), showModalDialog(), and showHelp()。(注意:由於彈出限制,自動指向搜索pane也會被阻止。)

一個由用戶直接行爲彈出的窗口()將不被阻止。彈出窗口攔截不會默認的應用於企業內部網和信任站點區域。

怎樣知道IE瀏覽器阻止了我的彈出窗口?

如果窗口被攔截,函數將返回一個返回NULL的窗口對象。確保檢查window.open()的返回值來避免彈出窗口被攔截時發生腳本錯誤。

基於一個被攔截的彈出窗口,你的站點使用了轉向或關閉頁面的措施嗎?

無論何種可能的情況下,在被攔截窗口中,都不要做轉向或關閉窗口。在彈出窗口被阻止時,如果你轉向到另一個站點,那可能更加難於顯示被攔截的內容。在這種情況下,轉向後的站點將不顯示可以使用戶便利地訪問彈出內容的信息欄。

相似的,如果窗口被攔截時關閉,信息欄將指向不顯示彈出窗口的攔截信息。

你的站點從一個彈出窗口載入另一個彈出窗口嗎?

任何可能的情況下,不要從一個彈出窗口自動載入另一個彈出窗口,彈出窗口攔截器不認爲這是一個用戶行爲並將阻止它。

你自動載入setHomePage()模態對話框嗎?

在SP2中,setHomePage()函數僅僅在一個類似用戶行爲下彈出窗口。自動載入setHomePage()提示將被阻止。

當有不同步請求的信息時,你的Web站點打開新的窗口嗎?

在不同步請求信息後IE瀏覽器可能阻止站點打開的那個窗口,即使用戶點擊了一個鏈接去打開窗口。在不同步的請求信息之前,Windows不會阻止由用戶行爲(鼠標點擊)直接打開的窗口。由用戶初始的行爲不會被堅持。

你的Web站點是否通過ActiveX控件或其他一些頁面對象載入了彈出窗口?

和其它彈出窗口一樣,如果一個窗口不是通過用戶行爲彈出,攔截器將阻止它。一個窗口在響應用戶直接行爲下被允許打開。

彈出窗口的一般建議:

  • 不要在彈出窗口失敗時轉向。
  • 如果一個彈出窗口,下載,或ActiveX控件被攔截,不要關閉或自動轉向窗口。如果你這樣做了,用戶將不能夠點擊信息欄去接受彈出窗口,下載,或ActiveX控件。
  • 不要從一個彈出窗口自動載入另一個彈出窗口。
  • 不要從用戶行爲中載入多個彈出窗口。
  • 不要從showModelessDialog()showModalDialog()調用中載入自動彈出窗口。

你的Web站點依賴微軟的Java虛擬機嗎?

參見微軟網站上的 Microsoft Java Virtual Machine Support

瀏覽器窗口限制

你的Web站點使用定位窗口而使標題欄或地址欄在顯示的可見區域頂部之上或狀態欄在顯示的可見區域底部之下嗎?

回顧一下你的代碼看看你是否正確理解了對於由window.open()window.createPopup()方法初始化的窗口的限制。對於一個阻攔的IE瀏覽器窗口(利用window.open()方法)或一個無阻攔的IE瀏覽器窗口(利用window.createPopup()方法)的創建,腳本能夠調用相同的方法。然而,需要去確保設計彈出窗口適合於顯示給用戶或者狀態欄能準確地顯示信息。

下面是在運行Windows安全限制特徵時,對於腳本初始化窗口調用的指導方針。

對於使用window.open()打開的窗口:

  • 去呈現狀態欄併爲它編碼。狀態欄將被默認開啓,它的高度是20-25pixels。
  • 調整你的窗口尺寸和內容讓它看起來更好的適合於整個窗口的大小。不要讓窗口擋住任務欄,因此你必須留出40pixels來保證狀態欄和任務欄都正常顯示。垂直方向上窗口離任務欄不要超過30pixels。
  • 不要打開偏離屏幕的窗口-否則將調整窗口的X,Y參數來使它完整顯示在屏幕中。
  • 在以前,窗口的顯示受顯示的主題,字體的大小以及解決方案,因此當你設計窗口時,也可能需要考慮這些用戶界面的影響。
  • 注意:設置了fullscreen=yeswindow.open()將會打開一個最大化的窗口,而不是一個亭子模式的窗口。

對於使用window.createPopup()打開的窗口:

  • 調整你的窗口尺寸和內容讓它看起來更好的適合於整個窗口的大小。在這個新特徵下,窗口將不會擋住它的父窗口的標題欄或狀態欄,因此它可能得需要40pixels留給標題欄或狀態欄。窗口的垂直尺寸不能大於當前頁面的可見區域。
  • 不要打開一個無阻攔的窗口飄在IE瀏覽器顯示HTML區域的外面-否則將調整X,Y參數來使窗口完整顯示在客戶端區域內。在這裏存在一個異常:在窗口一半的地方,它能夠在IE瀏覽器左邊緣或右邊緣的外邊顯示。
  • 在以前,窗口的顯示受顯示的主題,字體的大小以及解決方案,因此當你設計窗口時,也可能需要考慮這些用戶界面的影響。

一般提示

在SP2中檢測IE瀏覽器

在SP2中你可以通過window.navigator.userAgent來檢測連接到你的站點的瀏覽器是否是IE。

var g_fIsSP2 = false;
  function browserVersion()
  {
  g_fIsSP2 = (window.navigator.userAgent.indexOf("SV1") != -1);
  if (g_fIsSP2)
  {
  //This browser is Internet Explorer in SP2. 
  }
  else
  {
  //This browser is not Internet Explorer in SP2.
  }
  }

如果User Agent字符串爲"SV1",那麼瀏覽器肯定是IE。

你的站點使用showModalessDialog()或showModalDialog()調用嗎?

通過這兩種方式作一個嘗試,不要創建實例去使用ActiveX控件,自動下載文件或者自動彈出窗口。在這種情形下內容被攔截時信息欄將不被顯示,用戶也沒有便捷的方式來允許這些內容。建議通過IE來初始化這些行爲。

當內容被攔截你的站點是否轉向了另一個頁面?

在瀏覽器攔截了ActiveX控件,文件下載或彈出窗口嘗試不要去轉向到另一頁,這種情況下,瀏覽器可能不會在轉向後的頁面顯示信息欄,用戶將不能方便的看到內容。

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