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

StackOverflow https://stackoverflow.com/questions/3981959

  •  09-10-2019
  •  | 
  •  

Вопрос

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

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

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

Спасибо.

Это было полезно?

Решение

Правильно реализуя безопасность. Если ваша «безопасность» может быть сорвана таким инструментом, как Snoop, то вы делаете это неправильно.

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

Другие советы

На самом деле есть способ определить, является ли ваше приложение «вынуждено» программой 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, которая запускается, как есть (без модифицированного кода). Лучшим решением было бы убедиться, что никакие внешние сборки не вводят в ваше приложение.

Тем не менее, Кент все еще прав в том, что такая утилита, как Snoop, не должна вызывать каких -либо уязвимостей безопасности, поскольку безопасность не должна осуществляться на уровне пользовательского интерфейса. Но, по крайней мере, это показывает вам, как не дать людям «снять» ваше приложение.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top