2017-02-08 4 views
1

В настоящее время я работаю над простым приложением WinForms/C#, которое архивирует данные структурированным и последовательным образом. Предпочитаемые пользователи не имеют права на запись в папку архива и должны только писать в приложении.Хранение пароля для олицетворения пользователя

Поскольку пользователи не должны получать дополнительные права, мне нужно предоставить приложению учетные данные какого-либо общего пользователя службы, чтобы начать олицетворять пользователя. Поскольку пользователи не должны знать эти учетные данные, их нужно будет каким-то образом сохранить (я бы предпочел локально, так как у меня нет опыта использования баз данных и еще чего-то). Есть ли способ безопасно хранить учетные данные, если конечный пользователь не должен знать/что-то делать с ними? Или есть другой, лучший способ решить эту проблему?

Я знаю, что вопросы по хранению паролей часты, и я постарался изо всех сил найти ответ на мою конкретную проблему, но все темы, которые я мог найти, ищут для хранения пароля, известного пользователю.

+0

Ничто не будет абсолютно безопасным, поскольку пользователи имеют доступ к машине и приложению. Речь идет о риске и вознаграждении. Найдут ли ваши пользователи пароль, если вы просто закодировали его base64 и спрятали в настройках приложения? Если вы зашифровали пароль, они смогут декомпилировать ваше приложение, чтобы найти ключ? Не тратьте много времени на строительство Форт-Нокса, если достаточно простого деревянного забора ;-) – Equalsk

+0

На мой взгляд, уровень безопасности, на который меня попросили реализовать, - это чрезмерное переполнение, поскольку приложение будет использоваться только/доступным для сотрудников, и если бы они хотели найти пароль, о котором им было нужно, то едва ли нужно было бы попробовать –

+0

. Секции файла App.config могут быть зашифрованы каркасом и доступны без необходимости ручного дешифрования. Вы могли бы использовать это, чтобы сохранить пароль, чтобы никакие любопытные глаза не могли легко обнаружить его. Хотя Luaans указывает, что делать это по-прежнему не самая лучшая идея. – pinkfloydx33

ответ

2

Самым безопасным решением является фактически создать сервис, который работает под пользователем с правильными разрешениями. Тогда ваше приложение Winforms просто использует жесткий интерфейс для службы, чтобы сообщить ему, что нужно сделать. Насколько это возможно, это зависит от того, что именно вы пытаетесь сделать.

Попытка сделать это с помощью только приложения winforms сложна. Если пользовательское приложение может что-то сделать, так может и пользователь. Помните, что нет таких вещей, как «разрешения приложений» - только разрешения пользователя. Приложение GUI будет работать как , а не только пользователь, и этот пользователь может делать все, что может сделать приложение.

+0

Я второй этот подход. – Zesty

+0

Я займусь созданием службы, но я не уверен, если что-то, что может создать кто-то из моего уровня мастерства. На данный момент идея состоит в том, чтобы пользователь мог писать внутри этого каталога, поэтому использование только winforms показалось мне логичным. –

+0

@DominikS Это единственный способ по-настоящему отделить права пользователя. Но может быть, что что-то более простое будет работать так же хорошо для вас - например, пользователь может иметь доступ на запись к папке, но не файлы или каталоги, которыми он не владеет (например, не создавал). У вас может даже быть служба, которая будет владеть файлами в каталоге архива, когда они будут написаны.Но опять же, все зависит от того, что именно ваши требования - мы можем только помочь вам с конкретными вопросами, а не с программным обеспечением :) – Luaan

0

можно хэш пароля, как показано ниже

using System.Security.Cryptography; 

public static string EncodePasswordToBase64(string password) 
{ byte[] bytes = Encoding.Unicode.GetBytes(password); 
    byte[] inArray = HashAlgorithm.Create("SHA1").ComputeHash(bytes); 
    return Convert.ToBase64String(inArray); 
} 
+2

И что помогает ... как? Как вы используете этот хешированный пароль для олицетворения пользователя Windows? – Luaan

+0

@rishit_s Это неправильно. Односторонний хеш используется для проверки пароля, введенного пользователем, чтобы избежать его хранения. Вы не можете сгенерировать пароль из хэша, и пароль - это то, что необходимо для олицетворения учетной записи. Вы можете использовать для этого шифрование (а не хеширование), но вместо этого я бы выбрал подход Luaan, поскольку это более безопасно. – Zesty

Смежные вопросы