Подтвердить что ты не робот

Как сделать Snoop доказательством вашего приложения wpf?

Snoop позволяет вам заглянуть внутрь приложения и изменить свойства элемента. Это отличный инструмент для разработчиков, но может быть проблемой безопасности в некоторых случаях, например, когда у нас есть пользователи, которые любят смотреть в местах, где их не следует искать. Есть ли способ сделать что-то, чтобы блокировать приложения, такие как Snoop, от "отслеживания" вашего приложения?

И если нет способа заблокировать его, что вы рекомендуете делать для минимизации рисков безопасности?

Snoop - это утилита, которая позволяет просматривать визуальное дерево приложения wpf и просматривать и изменять свойства. Это очень полезно, когда вы пытаетесь отладить что-то и не знаете, что происходит. Вы можете найти здесь .

Спасибо.

4b9b3361

Ответ 1

Обеспечивая безопасность. Если ваша "безопасность" может быть сорвана с помощью инструмента, такого как Snoop, тогда вы делаете это неправильно.

Предположим, что есть команда, которую могут выполнять только определенные пользователи. Похоже, что единственное место, которое вы обеспечиваете, это на уровне пользовательского интерфейса (например, отключив соответствующую кнопку). В этом случае вы правы - я мог бы легко использовать Snoop, чтобы включить кнопку и выполнить команду. Но вы должны применять ограничения безопасности на своем сервере или, возможно, в логике выполнения команды, если у вас нет сервера. В принципе, безопасность должна быть реализована как можно ближе к тому, что вы пытаетесь защитить, насколько это возможно. Безопасность на уровне пользовательского интерфейса - это просто для удобства пользователя.

Ответ 2

Фактически есть способ определить, будет ли ваше приложение "проверено" программой snoop. Решение, которое я дам, не является серебряной пулей, и если кто-то действительно хочет отследить ваше приложение, им придется изменить исходный код 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, не должна вызывать каких-либо уязвимостей безопасности, поскольку безопасность не должна выполняться на уровне пользовательского интерфейса. Но, по крайней мере, это показывает вам, как запретить людям "отслеживать" ваше приложение.

Ответ 3

Отличные ответы на очень хороший вопрос,

Я хочу добавить пример пароля, который никогда не должен быть сохранен в вашем datacontext, поскольку snoop также проверяет datacontext пользовательского интерфейса, поэтому, если вы используете правильный элемент управления PasswordBox, вы обнаружите, что не можете привязать свойство пароля, это означает, что даже если вы snoop приложение, которое вы не можете получить пароль, поскольку он не сохраняется в каком-либо свойстве

Но мы нашли много людей, которые пытаются создать работу (помощники, поведение, usercontrol...), чтобы связать пароль, но они забывают, что snoop может получить это как

Таким образом, ваш сервер никогда не должен доверять вашему клиенту, каждый раз, когда он должен проверять правильную привилегию (поскольку мы можем обнюхать клиентский запрос с помощью Fiddler для exp, а затем перестроить запрос custome для обеспечения безопасности клиентского приложения)