簡體   English   中英

如何Snoop證明你的wpf應用程序?

[英]How to Snoop proof your wpf application?

Snoop允許您查看應用程序內部並更改元素屬性。 它對開發人員來說是一筆巨大的財富,但在某些情況下可能會出現安全問題,例如我們的用戶喜歡尋找他們不應該尋找的地方。 有沒有辦法阻止像Snoop這樣的應用程序“窺探”您的應用程序?

如果沒有辦法阻止它,你建議做什么來降低安全風險?

Snoop是一個實用程序,允許您瀏覽wpf應用程序的可視樹並查看和更改屬性。 當您嘗試調試某些內容並且不知道發生了什么時,它非常有用。 你可以在這里找到更多。

謝謝。

實際上有一種方法可以檢測您的應用程序是否被snoop程序“窺探”。 我將給出的解決方案不是銀彈,如果有人真的想要窺探您的應用程序,他們必須修改snoop源代碼(這是一個開源項目)。

snoop實際上做的是將一個程序集注入到您的應用程序中,並且注入的程序集以遞歸方式從根開始檢查您的應用程序可視樹。 換句話說,snoop實際上是你的應用程序中運行的。 話雖如此,解決方案是在將窺探組件注入您的應用程序時引發事件。

首先,您需要在應用程序的某個位置訂閱程序集加載的事件(最好是求助):

AppDomain.CurrentDomain.AssemblyLoad += new AssemblyLoadEventHandler(CurrentDomain_AssemblyLoad);

然后,您將像這樣實現處理程序:

        void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
    {
        if (args.LoadedAssembly.FullName.StartsWith("ManagedInjector"))
            MessageBox.Show("hey you, stop snooping");//and shut down your application.
    }

您可能需要為真正的銀彈解決方案增強此解決方案,但至少此解決方案肯定會停止當前運行的最新版本的snoop(不修改代碼)。 更好的解決方案是檢查沒有外部程序集注入您的應用程序。

但是,Kent仍然是正確的,因為像Snoop這樣的實用程序不應該導致任何安全漏洞,因為安全性不應該在UI級別實現。 但至少這會向您展示如何防止人們“窺探”您的應用程序。

通過正確實施安全性。 如果使用像Snoop這樣的工具可以阻止你的“安全性”,那么你做錯了。

假設有一個只有某些用戶才能執行的命令。 聽起來這是您執行此操作的唯一地方是在UI級別(例如,通過禁用相應的按鈕)。 既然如此,你是對的 - 我可以輕松使用Snoop來啟用按鈕並執行命令。 但是,如果沒有服務器,則應該在服務器上強制執行安全約束,或者在命令執行邏輯中執行安全約束。 基本上,安全性應該盡可能接近你想要保護的東西。 UI級別的安全性僅僅是為了方便用戶。

對一個非常好的問題的好評,

我想添加一個永遠不會保存在datacontext中的密碼示例,因為snoop檢查UI的datacontext,所以如果使用正確的控件PasswordBox,你會發現你無法綁定密碼屬性,即使您窺探應用程序也意味着您無法獲取密碼,因為它不會保存在任何屬性中

但我們發現很多人試圖創建一個解決方案(幫助者,行為,用戶控制......)來綁定密碼,但是他們忘記了窺探可以讓它像那樣

因此,每次應該檢查正確的權限時,您的服務器永遠不應該信任您的客戶端(因為我們可以使用Fiddler為exp嗅探客戶端請求,然后通過傳遞客戶端應用程序安全性來重建客戶請求)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM