神魂顛倒論壇logo

icon
首頁Microsoft 應用技術區Windows 10 作業系統 → 建構 Windows Store App 的安全最佳做法

雷射溶脂 | 瘦小腹 | 植髮 | 眼袋 | 玻尿酸 | 電波拉皮 | Flash | 購物車 | Flash Player 11.2 | 豐胸 |

下一主題 上一主題


建構 Windows Store App 的安全最佳做法


建構 Windows Store App 的安全最佳做法 簡版






確保客戶放心地使用應用是我們為 Windows 應用商店應用建立應用平台的主要目的之一。我們希望客戶確信應用將按客戶預期的方式工作,能夠與其它應用和諧共存且能夠解除安裝乾淨。客戶信任的建立基於多種因素:Web Windows 應用商店上架,到無障礙安裝和解除安裝,再到使用位元置訊息和網路攝影頭之前徵詢客戶同意,以及用於測試應用是否符合 Windows 應用商店提交條件的 Windows 應用認證工具包。客戶信任不是基於任何單一功能、流程或品質獲得的,它綜合了多種因素,因此,客戶信任貫穿整個端到端流程。我們在提供可靠、可信的應用博文中已詳細介紹了我們所採取的措施。

現在,我們希望具體討論一下有關安全應用的話題,如何才能讓您的應用贏得客戶信任。當今的應用通常會儲存重要的客戶資料,Web財務記錄到不可替代的個人照片,不一而足。對於許多客戶來說,這些資料與其生活息息相關,他們希望應用能夠保護資料的安全。即便應用儲存的資料非常少,客戶仍然希望應用能夠按設計的方式工作,不會干擾其它應用的執行。

在應用中實作安全最佳做法對於贏得客戶信任、逐漸提高客戶滿意度至關重要。幸運的是,常用的安全最佳做法都非常簡單易橫列,為您的應用加入安全保護並不太難。此外,應用在專用的應用容器情境中執行,可以將該應用及其資料與其它應用隔離。應用容器為您的應用提供專用的環境,包括用於記憶體資料和設定的專用記憶體空間。

Windows 8 和 Visual Studio 2012 提供了一系列 API、控制項和工具,可以最大限度地減少可能存在的應用漏洞,緩解常見的安全問題。當然,任何平台都無法做到完美無缺,但我們相信,將這些安全措施進橫列有效的組合搭配,必將能組建出傑出的應用,我們還將繼續對應用平台進橫列改進。在本博文中,我們介紹了一些增強應用安全性的技巧和最佳做法,幫助您為客戶提供更加安全可靠的體驗。

我們現在就開始吧!

技巧 1 – 使用 Visual Studio 進橫列編譯

Web Windows 8 開始,我們預設啟用了許多現有的安全最佳做法,您無需進橫列任何設定,只需使用 Visual Studio 2012 進橫列編譯即可。在使用 Visual Studio 2012 進橫列編譯時,預設情況下,現在將為應用內的本機程式碼啟用以下安全技術,以保護應用免受常見攻擊的威脅:/GS、ASLR、DEP 和 SeHOP。
技巧 2 – 最大限度地縮減應用功能

應用可以依次聲明各項功能,定義應用與不同資源和裝置的互動方式。請注意,您需要根據應用需求定義最小的功能集,確保應用以必需的最小特權執行。透過使用最小的功能集,可以減少應用中可被利用的漏洞數量。

例如,「家庭和工作網路」功能允許應用存取本地網路中的電腦,比如玩對等遊戲。此項功能對於本地服務的預發橫列測試也非常有用,但通常並非應用必不可少的功能,且可能導致應用被不受信任的本地網路(例如,咖啡店或機場的無線接入點)所利用。請考慮刪除該功能,轉而使用遠端伺服器來執橫列測試,遠端伺服器可以為應用重現現實世界的互動環境,測試效果更準確。如果您使用了「家庭和工作網路」功能,在提交應用申請應用商店認證之前,請務必將其刪除。


圖片:


功能

採用最小功能集的應用 – 只有具備 Internet 存取功能!

請注意,「企業身份驗證」、「共用使用者憑證」和「檔案程式庫」功能專門針對企業存取和內嵌檔案(例如,開啟的檔案需要開啟所包含的其它檔案)而設計,需要公司帳戶才能將包含這些功能的應用提交至 Windows 應用商店。大多數應用通常不需要使用這些功能,但對於需要存取企業資源的企業應用來說,這些功能是必需的。這些功能受到嚴格限制,必須接受額外 Windows 應用商店審查才能使用這些功能。
技巧 3 – 使用檔案選取器代替程式庫功能

在技巧 2「最大限度地縮減功能」的基礎上,您通常會停用基於檔案的所有功能。如果您的應用只有需要存取少量檔案,可以允許使用者使用檔案選取器來選擇檔案。檔案選取器可以簡化應用程式碼,允許使用者輕鬆地精確存取所需的檔案,而不必啟用額外應用功能。對於所有應用來說,檔案選取器都是相同的,因此,當使用者首次使用您的應用時,他們將能夠即刻熟悉檔案選擇對話方塊,並在選擇所需檔案後快速傳回您的應用。


圖片:


檔案選取器

  顯示圖片程式庫的檔案選取器

在 JavaScript 中

    var picker = new Windows.Storage.Pickers.FileOpenPicker();
    openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
    picker.fileTypeFilter.replaceAll([".png", ".jpg", ".jpeg"]);
    picker.suggestedStartLocation =  
       Windows.Storage.Pickers.PickerLocationId.picturesLibrary;

在 C# 中

    using Windows.Storage;
    using Windows.Storage.Pickers;

    FileOpenPicker openPicker = new FileOpenPicker();
    openPicker.ViewMode = PickerViewMode.Thumbnail;
    openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
    openPicker.FileTypeFilter.Add(".png");
    openPicker.FileTypeFilter.Add(".jpg");
    openPicker.FileTypeFilter.Add(".jpeg");

例如,您可以按照以下原則來選擇適當的功能:如果您的應用允許使用者選擇圖片,則應使用檔案選取器,而不要使用「圖片程式庫」功能。如果您的應用需要以寫程式方式完整存取某個程式庫,例如,用於播放音樂程式庫中內容的音樂播放器,則可以使用「音樂程式庫」功能來存取音樂程式庫。如果您的應用需要存取檔案,則應始終使用檔案選取器。
技巧 4 – 不要信任遠端資料

對於使用 JavaScript 編寫的應用,必須驗證並慎重處理不受信任的 Web 內容。應用中包含的 HTML 頁面通常在應用的本地情境中執行,本地情境允許存取 Windows 執行時。Iframe 中顯示的遠端頁面在應用的 Web 情境中執行,Web 情境無法存取 Windows 執行時。要瞭解您的應用中哪些元件在呼叫 Windows 執行時 - 畢竟,您也不希望不詳的 Internet 站台控制您的應用,不是嗎?(答案:是的,這令人感到很不安全。)除非您能夠確認 API 輸入來源自您自己的軟體包,否則您的應用應避免呼叫執橫列 eval()、setTimeout() 和 setInterval() 等腳本的 API。如果您需要使用這些 API,請務必對腳本功能進橫列評估,只需向這些 API 傳遞一些資料,即可準確瞭解腳本的構造方式。

如果要處理 JSON 資料,請使用 JSON.parse 來代替 eval(),前者比後者更安全,不會導致您的應用面臨腳本注入風險。

在 JavaScript 中

    var js;
    var contact = JSON.parse(jsontext);
    console.log(contact.surname + ", " + contact.firstname);

    // Output: Ekelund, Aaren

最後,還應使用 innerText 或 toStaticHTML 對應用中的 Web 內容進橫列處理以刪除可執橫列內容。此處理程序可以刪除或停用應用中用於顯示 Web 內容的腳本。

在 JavaScript 中

    div.innerHTML = window.toStaticHTML(data);
    div.innerText = data;

這些函式可以確保任何不受信任的腳本或危險內容都無法在您的應用內執行。第一個函式將剝離腳本,第二個函式將剝離的腳本轉換為非執橫列文字。儘管大多數應用將會透過應用內的輸入欄位元和傳統 API(例如,XMLHttpRequest 對像)來存取遠端 Web 內容,但不要忘記,Web 內容還可以透過其它途徑(例如,「共用」超級按鈕)進入您的應用。
技巧 5 – 請勿允許 Web 存取 WinRT

預設情況下,Windows 8 只有允許應用包中的內容存取 Windows 執行時 (WinRT)。如果您的應用接受來自 Web 的輸入或資料,請勿允許該資料控制應用對任何 WinRT API 的使用。您的客戶希望自己相信應用會按預期方式工作,並且他們希望您能夠保持這份信任。如果您要存取站台,則應考慮在 iframe 沙盒中顯示該站台,這樣將能夠阻止在您的應用中執行腳本、提交表單以及執行其它內容。

如果您的應用執橫列來自 Web 的內容,則該內容將能夠存取您的應用的設定和資料,或是存取您的應用可以存取的檔案。這對於使用 JavaScript 編寫的應用尤為關鍵,因為此類別應用更容易執行來自 Web 的腳本。例如,如果您使用 JavaScript 編寫了一個應用,在應用中使用 postMessage 向 WinRT API 或打包的程式碼傳遞資料,請務必對數據來來源進橫列驗證,確保資料來自可信來來源。

在 JavaScript 中

    window.attachEvent('onmessage',function(e) {
        if (e.origin == 'https://www.contoso.com/') {
            …
        }
    });

有關向使用 JavaScript 編寫的應用中新增 Web 內容的更多訊息,請檢視Web Web 服務整合內容和控制項應用示範。
技巧 6 – 獲得認證:對應用和客戶進橫列身份驗證


基於雲的應用功能極為強大,應用中的某些元件需要存取雲中的服務,但在與雲服務進橫列身份驗證時需要慎重以避免濫用。接受使用者輸入的雲服務應始終識別並驗證使用者和應用的身份。透過與受信任的雲服務驗證應用和使用者的身份,您可以瞭解到有人正在利用預料中的正確應用合法地使用您的服務。掌握使用者身份的一項附加好處是,一旦發現濫用,您可以輕鬆地辨識並刪除該使用者發佈的所有內容。

您可以使用 GetAppReceiptAsync 對應用進橫列身份驗證,以確認該應用是Web應用商店獲取的,且具有有效的應用商店收據。如果擁有後端伺服器,您還可以連線到以下 URL,使用該收據執橫列進一步的身份驗證,以確認收據簽名的公共憑證,其中<CertificateId> 是收據中包含的CertificateId 。

https://go.microsoft.com/fwlink/p/?LinkId=246509&cid=<CertificateId>

WinRT 提供了各種簡便易橫列的方法供用戶端應用與雲服務驗證使用者身份,包括 Web 身份驗證代理(用於 OAuth 樣式的身份驗證)、認證保險箱(用於記憶體密碼和小型加密值)和共用憑證記憶體區(用於用戶端憑證身份驗證)。在處理身份驗證及其認證時,上述所有選項都是贏得客戶信任的有效方法。
提示 7 – 驗證檔案、協定和匯入的資料


許多應用會建立並載入檔案,允許透過協定進橫列啟動,或是提供資料匯入功能。與上文介紹的遠端 Web 內容類別似,此資料可能會遭到篡改,或是來自可信度不高的來來源,不值得信任。對於需要開啟檔案、匯入資料或接受共用內容的應用,在使用內容之前,必須仔細地對內容進橫列驗證。

驗證程序取決於輸入類別型以及應用對內容的使用方式,可能非常簡單,也可能極為複雜。例如,必須對數據程式庫查詢所使用的輸入進橫列驗證以避免 SQL 注入攻擊,資料庫通常將執橫列所接收到的所有有效查詢,如果輸入中包含惡意內容,則可能會導致資料洩露、資料被篡改甚至被刪除。

檔案、協定、匯入的資料和共用內容可能包含超出應用預期的不受信任的內容。檔案和協定是不受信任的輸入的最常見形式,不過,還應注意剪貼簿和Web「共用」超級按鈕接受內容,因為客戶可能會Web Web 瀏覽器請求各種各樣的不受信任內容。包含特別敏感資料的應用(例如,個人財務應用)應非常小心不受信任的內容,因為這些內容有權存取對客戶具有高度價值的訊息。
技巧 8 – 使用 HTTPS 連線


當自己不確定訊息傳輸的安全性時,那就採用加密連線吧!HTTPS 連線提供了與遠端伺服器的身份驗證,強烈推薦您採用 HTTPS 連線以緩解攔截攻擊。儘管在家庭網路中,可能並不存在攔截攻擊問題,但在現實世界中仍然存在大量未加密的無線網路,在這些網路中使用標準 HTTP 連線很不安全。

對於標準 HTTPS 連線,遠端站台需要具備由 CA 提供的憑證,並設定為允許 HTTP 連線。Web Windows 8 開始,應用可以使用自簽名憑證利用 SSL 連線安全地與後端伺服器進橫列身份驗證。這意味著即使沒有 CA 提供的憑證,您也可以使用 HTTPS 連線。如果您此前出於成本考慮而避免使用 HTTPS,那麼現在有了自簽名憑證,再基於此理由而選擇在應用中採用不安全的 HTTP 連線傳輸資料就站不住腳了。

要使用自簽名憑證,您可以在 Visual Studio 2012 中透過清單設計器向應用中新增憑證聲明,也可以直接向應用部件清單 XML 中新增憑證聲明。您還需要設定後端伺服器以使用相同的憑證;對於 IIS,您可以按照一個簡單流程來建立並設定您的站台。隨後,您的應用將自動使用打包的憑證對與 Web 伺服器的連線進橫列身份驗證。

最後,如果您的應用是採用 JavaScript 編寫的,您也可以在應用中使用以下 <meta> 標籤來請求 HTTPS 連線:

    <meta name="ms-https-connections-only" c/>

培養信任

我們希望 Windows 8 能夠激發您的開發*,在短期內組建出大量傑出應用併行布到 Window 應用商店中。上文討論的技巧和最佳做法對於向客戶提供更加安全可靠的應用至關重要,可以增強客戶對應用橫列為的信賴。安全性是客戶對所有應用的一項重要期望指標,對於贏得良好評價和保護敏感財務資料至關重要。

我們在應用平台上投入巨大的人力和物力,旨在簡化 Windows 8 和 Windows 應用商店應用的設計,讓客戶對試用和購買應用充滿信心。我們相信應用平台必將能夠幫助您組建出深受客戶喜愛的可信應用。

如果您希望瞭解有關應用安全性的更多訊息,請閱讀開發安全應用白皮書、安全開發生命週期初學者工具包以及存取安全開發中心瞭解最新信息。

謝謝!

-- Windows 進階專案經理 Scott Graham

-- Windows 進階專案經理 Crispin Cowan

-- 可信任計算首席軟體安全工程師 David Ross



雷射溶脂 | 回到頂部
Icon
網路的事情,讓網路解決

[ 逛網路就像是在探險 ]

    神 魂 顛 倒 T W G

http://bbs.flash2u.com.tw

http://tw.myblog.yahoo.com/flash2u-twg

http://flash-silverlight.blogspot.com/

http://flash2u.spaces.live.com/?_c02_owner=1
下一主題 上一主題