2009-07-07 11 views
2

Je me rends compte que la réponse à cette question est probablement assez évidente (si quelque peu gênant pour moi), mais j'espère que quelqu'un aura une solution ingénieuse.Sécurité quand le code source est public

Je développe lentement une application dans mon temps libre qui j'espère sera utile au travail. C'est une application de suivi simple pour l'attribution d'examens par les pairs. Fondamentalement, j'essaie juste de m'enseigner du C#. Mon problème est que puisque je ne peux vraiment rien installer, et je ne peux pas utiliser mon propre site web pour cela (deux raisons - 1) le DoD ne le permettrait probablement pas, 2) Je veux que ce soit un projet de bureau (WinForms), pas Web), j'utilise Jet (comme Access) comme un magasin de données.

J'ai besoin d'un moyen de protéger la base de données des regards indiscrets, car il y a certaines choses que je veux vraiment qu'un utilisateur de niveau Administrateur (comme un chef d'équipe) puisse accéder. J'ai essentiellement décidé de définir un mot de passe de base de données. Un mot de passe sera choisi au moment de l'installation, utilisé pour sécuriser la base de données, puis crypté pour que l'application prenne, décrypte et utilise pour ouvrir les connexions db.

Mon problème est que je veux que ce code soit quelque peu public. Je veux éventuellement poster mon code sur mon site web, et demander à StackOverflow et peut-être à la programmation subReddit de donner quelques avis et réflexions rapides. Pensez-y comme un programme de mentorat mans pauvres. Pour la maintenance, surtout après avoir quitté ce travail, la source sera éventuellement disponible pour mes collègues. S'ils ont accès au «fichier clé» crypté et à la source, ils seront en mesure de déterminer le mot de passe db.

Y at-il un moyen de coder cela afin que même avec le fichier et le code, mes collègues ne seront pas en mesure d'entrer dans la DB? Je suppose que non, mais ça vaut le coup de demander quelque chose.

S'il n'y a aucun moyen de le faire, je suppose que ma deuxième option est de changer le cryptage quand je l'ai mis sur mon site (changer le cryptage équivalent à un hachage - IV? fournir la source dans un fichier rar protégé par mot de passe, en donnant le mot de passe uniquement à la gestion.

Des idées?

Répondre

3

Il n'y a pas de "Security Through Obscurity". Si vous considérez tout le code public à tout moment, vous avez une meilleure chance de mettre en œuvre quelque chose qui est réellement sécurisé. Si vous "cachez" du code ou "cachez" les mots de passe, vous avez fait une erreur terrible.

Voici comment pirater le mot de passe sur Jet.http://lastbit.com/access/

La sécurité est un problème majeur. Vous ne pouvez pas jeter un mot de passe dans un fichier. Vous pouvez jeter des hash de mots de passe dans des fichiers.

Vous avez deux problèmes complémentaires.

  • Authentification. Qui est l'utilisateur? C'est ce que les mots de passe et les mots de passe peuvent vous dire: Qui se connecte.

  • Autorisation. Que peut faire cet utilisateur? C'est pourquoi vous avez une séparation des tâches. Les responsables de la sécurité qui définissent les mots de passe et les utilisateurs qui doivent fournir des mots de passe et avoir accès aux données doivent être des personnes distinctes.


Modifier

« Un mot de passe sera tiré au moment de l'installation, utilisé pour sécuriser la base de données, puis chiffrée pour l'application de ramasser, de décrypter et utiliser pour ouvrir des connexions db " Ne fonctionne pas La clé de chiffrement pour le fichier de mot de passe est disponible dans l'application, rendant tout ouvert.

"Y at-il un moyen de coder ceci afin que même avec le fichier et le code, mes collègues ne puissent pas entrer dans la base de données?" Oui. C'est facile. Utilisez des hachages de mots de passe, pas des mots de passe cryptés.

"donner le mot de passe uniquement à la gestion" Incorrect. Si vous donnez le mot de passe à quelqu'un, trop de gens connaissent le mot de passe. Cela casse l'authentification. Les gens doivent définir leurs propres mots de passe, sinon ils ne sont pas authentifiés.


Modifier

Que faire?

  1. Définissez - précisément - vos besoins d'authentification et d'autorisation. Ne choisissez pas une technologie. Définissez les utilisateurs et leurs cas d'utilisation. Définir les autorisations de chaque classe d'utilisateurs. Ne choisissez pas la technologie. Définir l'accès.

    Vous ne mentionnez pas de choses vraiment, vraiment importantes dans votre question. Vous ne mentionnez pas si vous avez plusieurs utilisateurs, par exemple. Vous venez de mentionner une technologie spécifique (JET) et une technique spécifique (le mot de passe au niveau DB). Vous ne mentionnez pas si ces utilisateurs partagent une base de données.

    Si vous avez plusieurs utilisateurs avec une base de données partagée, il est préférable que cette base de données soit sur un serveur quelque part. Pas sur un bureau quelque part. Ne fait pas partie d'un bureau spécifique. Pas réparti sur plusieurs postes de travail.

    Si vous ne disposez pas d'une base de données partagée (si chaque utilisateur possède une base de données privée), vous disposez d'installations distinctes pour lesquelles la sécurité Windows ordinaire est correcte. Pourquoi obscurcir quoi que ce soit?

  2. Choisissez une architecture.

    • Vous avez Active Directory. Cela vous donne des noms d'utilisateur et des mots de passe hachés en toute sécurité. Tirer parti de cela.SQL/Server peut utiliser AD pour l'authentification et l'autorisation de l'utilisateur.

    • Ceci est raisonnablement sécurisé si les gens ne partagent pas leurs mots de passe.

  3. Construire quelque chose qui fonctionne.

    • Groupes AD.

    • Base de données centrale dans SQL/Server.

    • Procédures administratives pour créer des utilisateurs, réinitialiser des mots de passe, déplacer des utilisateurs de groupe à groupe, etc. Ce n'est pas difficile. C'est dans la documentation AD. N'importe quel Windows Sysadmin peut fournir des conseils sur comment ils aiment faire cela. Documentez les procédures. Ils font partie du modèle de sécurité.

    • Application Winforms pouvant être installée sur les bureaux. Les utilisateurs tireront parti de leurs informations d'identification Windows existantes. Connecté dans Windows signifie que votre application WinForms peut les enregistrer dans la base de données et ils s'en vont. Sécurisé

    • MSI pour le composant de bureau. Comme il n'y a pas de mot de passe "master db" ou autre, ils installent simplement une application simple. Ils configurent l'emplacement du serveur de base de données central. Ils se connectent avec leurs informations d'identification Windows existantes.

+0

C'était plus une question éducative que n'importe quoi. Pour ce que je suis en train de faire cela, si quelqu'un veut que la base de données soit assez mauvaise pour qu'il casse le mot de passe d'accès ou qu'il creuse dans mon code, alors il peut le faire. La seule chose que cela "sécurise" vraiment est que le chef d'équipe choisirait qui pourrait effectuer certains types de révision. L'outil interne que nous utilisons pour compléter les évaluations (nous avons une liste de contrôle, en plus du bon sens des évaluateurs) permet à quiconque de faire une critique pour quelqu'un d'autre. À l'heure actuelle, les gens envoient des spams à l'équipe à la recherche d'avis, ce qui facilite le contrôle. – AgentConundrum

+0

(suite) C'est juste pour rendre les choses visibles d'une manière plus conviviale, etc. C'est vraiment juste un projet pour animaux de compagnie à des fins d'apprentissage. Merci pour la réponse, vous venez de renforcer ce que je savais déjà. :) – AgentConundrum

+0

Je ne suis pas sûr de savoir quoi faire ici, puisque je cherchais vraiment à utiliser le mot de passe de niveau db. Devrais-je garder la source privée, au moins pour les trucs de mot de passe DB? Dois-je avoir un mot de passe au niveau de l'application (peut-être automatisé en quelque sorte) qui est haché pour obtenir le mot de passe * real *, et l'utiliser pour l'accès à la base de données. J'adorerais utiliser autre chose pour cela, puisque Access/Jet semble être un cauchemar pour la sécurité, mais une combinaison de l'environnement et de mes propres connaissances (actuelles) en fait une option moins viable pour moi pour l'instant. Désolé si ça ne se voit pas, je veux juste apprendre. – AgentConundrum

0

Malheureusement, la sécurité d'accès n'est pas très bonne. Même si vos identifiants de connexion n'étaient pas dans votre source, ce ne serait qu'une question de temps avant que quelqu'un ne le fasse.

L'option la plus sécurisée avec accès est de stocker le fichier sur un serveur avec une bonne configuration d'autorisations de partage de fichiers et d'utiliser ODBC pour y accéder. - Ne résout pas vraiment votre problème de distribution. Pourquoi ne pas jeter un coup d'œil à quelques-unes des solutions de rechange disponibles ici? SQL Compact est plus sécurisé et offre une expérience de programmation très similaire. Si vous pouvez vous permettre d'aller un peu plus lourd, SQL Express est excellent. Il y a aussi beaucoup de bonnes offres open source. Firebird pourrait bien vous convenir ici.

Hope this helps ..

Edit: est sur place S. Lott ici. En fin de compte, si les utilisateurs ont accès à votre code et à votre db et savent ce qu'il en fait, ils pourront entrer.

+0

Si vous êtes en mesure d'aller avec l'option SQL Express, il fournira un bon contrôle sur lequel les utilisateurs peuvent voir quelles données. Gardez juste le mot de passe sa près de votre poitrine; Si vous continuez, vous pouvez laisser le mot de passe à votre successeur afin qu'il puisse continuer à contrôler la base de données. –

+0

Lorsque j'ai installé SQL Server Compact, il existait un prérequis pour IIS. Je n'ai vraiment pas cherché plus loin que ça. Y a-t-il un aperçu général de la façon dont cela fonctionne? – AgentConundrum

Questions connexes