2010-10-20 87 views
31

Snoop允許您查看應用程序並更改元素屬性。 對於開發人員來說,這是一筆巨大的資產,但在某些情況下可能會造成安全問題,例如,當我們的用戶喜歡在他們不應該看的地方查看時。有沒有辦法阻止Snoop這樣的應用程序「窺探」你的應用程序?如何使用Snoop證明您的wpf應用程序?

如果沒有辦法阻止它,那麼您建議如何最大限度地降低安全風險?

Snoop是一種實用工具,允許您瀏覽wpf應用程序的可視化樹並查看和更改屬性。當你試圖調試某些東西並且不知道發生了什麼時,它非常有用。你可以找到更多here

謝謝。

+0

好問題,想知道我自己 – 2010-10-20 20:45:37

+1

你可以提供更多關於這個「Snoop」程序的信息,或者發佈一個鏈接到它的信息? – 2010-10-20 20:46:35

回答

30

正確實施安全措施。如果你的「安全」可以用Snoop這樣的工具來阻止,那麼你做錯了。

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

+0

肯特,謝謝你的迴應。我同意你的觀點,安全不應該在UI級別上實現。在我的項目中,我們使用命令,並且我們在CanExecute中有邏輯,它將禁用某些用戶的按鈕(並且不能使用snoop重新啓用它們),以及防止用戶執行某些操作的服務器防護措施。然而,我們有其他的應用程序不使用命令和按鈕只是被隱藏,所以他們可以很容易「窺探」。 – chiefanov 2010-10-21 13:41:09

39

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

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

首先,你需要在你的應用程序(最好是begginging)某處訂閱組件加載事件:

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. 
    } 

您可能需要爲真正的silver-bullet解決方案增強此解決方案,但至少此解決方案將絕對停止正在運行的當前最新版本的snoop(未修改代碼)。更好的解決方案是檢查沒有外部程序集被注入到應用程序中。

但是,肯特仍然是正確的事實,像Snoop這樣的實用程序不應該導致任何安全漏洞,因爲安全不應該在UI級別實現。但至少這會告訴你如何防止人們「窺探」你的應用程序。

+3

這太好了。並結合肯特的回答,正是我所期待的。 – chiefanov 2010-11-16 15:51:54

+2

這兩個都是很好的答案,非常感謝你們 – 2012-12-04 22:30:23

+0

是的,這個答案完成了解決方案。 – ahmedsafan86 2016-01-23 19:43:37

0

一個很好的問題,大的反應,

我想補充一點,不應該被保存在你的datacontext密碼的例子,如窺探檢查也UI的DataContext的,所以如果你使用了正確控制密碼框你會發現你不能綁定密碼屬性,這意味着即使你窺探應用程序,你不能獲得密碼,因爲它不保存在任何屬性

但我們發現很多人試圖創建一個工作(helpers,behaviour,usercontrol ...)來綁定密碼,但他們忘記了snoop可以像這樣得到它

所以你的服務器不應該信任你的客戶端,每次它應該檢查正確的特權(因爲我們可以使用Fiddler嗅探客戶端請求,然後通過通過客戶端應用程序安全性重建客戶請求)

相關問題