Я думаю, что это должен быть быстрый вопрос, и я надеюсь, что это хорошее место, чтобы задать его.
Изменить: возможно, это сделает обсуждение, предложения и ответы немного более острыми: учитывая, что у меня есть ситуация, когда у меня нет другого выбора, кроме как передать пароль в виде простого текста элементу ввода на веб-странице html, что является самым безопасный способ, которым я могу обрабатывать этот пароль, также учитывая, что я использую поле пароля wpf для получения его от пользователя, я использую .SecurePassword
для извлечения пароля из поля пароля и использую функцию, описанную ниже, чтобы передать эту безопасную строку в input, а затем сразу же отправить форму на сервер.
Я написал небольшое приложение WPF, которое автоматизирует процесс для нашего офиса. В рамках этого приложения идентификатор пользователя и пароль передаются стороннему поставщику. Это приложение остается открытым на рабочем столе пользователя, поэтому этот процесс можно выполнять несколько раз в течение дня.
Поскольку я написал приложение сейчас, пароль вводится пользователем в поле пароля wpf один раз, и доступ к свойству пароля осуществляется только тогда, когда он нужен сайту поставщика. Я ни в коем случае не передаю пароль другому свойству или текстовой строковой переменной.
Мой вопрос связан с безопасностью этого подхода. Я не эксперт по ИТ-безопасности, и мы, честно говоря, не ожидаем каких-либо проблем с этим из-за его внутренней реализации, но я хотел посмотреть, как поле пароля хранит этот пароль.
Насколько я понимаю, в этом сценарии единственный раз, когда пароль живет в памяти в виде обычного текста, это момент, когда он передается из нашего приложения в приложение внешнего поставщика, что является более или менее неизбежным риском. Внешний поставщик не предоставил нам API, поэтому лучшее, что мы можем сделать, — это сайт поставщика input element.value = passwordbox.password
.
Может ли кто-нибудь выделить потенциальные риски этого подхода, возможно, альтернативный метод, если он существует, или аргументы в пользу его безопасности, если они существуют.
Опять же, это небольшое приложение для внутреннего использования одним отделом. Мы не ожидаем проблем, но ожидаем задать несколько вопросов по этому поводу. Я просмотрел документацию Microsoft, но хотел узнать, может ли кто-то с большим опытом что-то добавить.
Заранее спасибо за вашу помощь!
РЕДАКТИРОВАТЬ: Все еще работаю над этим, но я получил хорошие отзывы, которые я принял во внимание. Я адаптировал подход со страницы, опубликованной Mare Infinitus, http://blogs.msdn.com/b/fpintos/archive/2009/06/12/how-to-properly-convert-securestring.-to-string.aspx
Вот что у меня есть сейчас:
Пользователь вводит свой пароль в поле пароля WPF. У меня есть следующая функция:
Private Function ConvertToUnsecureString(ByVal SecurePassword As SecureString) As String
If SecurePassword Is Nothing Then Throw New ArgumentNullException("SecurePassword")
Dim unmanagedString As IntPtr = IntPtr.Zero
Try
unmanagedString = Marshal.SecureStringToGlobalAllocUnicode(SecurePassword)
Return Marshal.PtrToStringUni(unmanagedString)
Catch ex As Exception
Finally
Marshal.ZeroFreeGlobalAllocUnicode(unmanagedString)
End Try
End Function
Используя эту функцию, я передаю пароль элементу ввода следующим образом:
InputEl.value = ConvertToUnsecureString(Me.PasswordBox.SecurePassword)
На данный момент это кажется настолько хорошим, насколько это возможно, но меня все еще интересуют дальнейшие стратегии/идеи, которые могут быть более безопасными.