2009-08-12 3 views
1

Quelle est la meilleure façon d'éviter qu'un fichier texte (par exemple xml) ne soit modifié par un utilisateur? Je dois m'assurer que le fichier dans lequel je stocke les noms d'utilisateur et ses privilèges pour l'application de bureau ne peut pas être simplement modifié.Empêcher l'édition du fichier

Peut-être que je peux générer un certificat du fichier et les applications de bureau vérifie cela? J'utilise C# dans une application WinForms.

Répondre

2

Vous pouvez utiliser les autorisations du système de fichiers pour empêcher la modification.

Vous pouvez utiliser le cryptage pour rendre l'édition difficile

Vous pouvez obtenir une valeur de hachage pour le fichier pour détecter l'édition. Je pense que le chiffrement du fichier, puis le décryptage sera plus facile. Bien que les utilisateurs puissent toujours être en mesure de lire le contenu du fichier s'ils sont assez intelligents. par exemple. lire le texte brut de la mémoire

0

Comme votre but est de stocker les privilèges des utilisateurs directement dans un fichier XML, vous avez besoin d'un niveau de sécurité qui va au-delà de la simple interdiction de modifier le fichier. Même si vous pouviez (hypothétiquement) imposer une certaine restriction au niveau du système d'exploitation par rapport à l'édition du fichier, tout utilisateur administratif pourrait simplement modifier le fichier sur un autre ordinateur, puis écraser votre version protégée.

Ainsi, vous devez supposer que les utilisateurs peuvent modifier le fichier. Le seul recours que vous avez est d'être capable d'identifier quand ils ont, et d'ignorer leurs modifications.

L'approche que vous suggérez de créer un certificat sonne exactement comme il faut. Vous pouvez soit calculer un hachage pour le fichier entier, soit le faire utilisateur par utilisateur (selon ce qui a le plus de sens dans votre contexte), dans les deux cas en utilisant une clé privée ou secrète pour vous assurer que quelqu'un n'édite pas le fichier recalculer simplement le hachage.

1

Le moyen le plus simple est probablement d'utiliser une base de données avec authentification par nom d'utilisateur et mot de passe.

Le plus intelligent est de le crypter afin que les données ne leur soient pas accessibles.

Cependant, si un utilisateur vraiment veut accéder à un fichier sur leur machine, ils vont obtenir. Vous pouvez faire en sorte qu'ils ne puissent rien lire d'utile ou apporter des modifications utiles, mais s'ils le souhaitent, ils pourront éditer le fichier.

+0

comment crypter les données? avec clé publique et privée? –

0

IMHO vous ne pouvez pas garantir que personne ne peut le modifier, mais vous pouvez crypter le fichier pour sécuriser les informations.

vous ne pouvez pas garantir que tout le monde peut démarrer la machine en utilisant le démarrage du disque par exemple et éditer le fichier texte simplement.

0

Si vous DEVEZ conserver ces données dans un fichier texte XML, vous pouvez envisager de le signer numériquement par votre application chaque fois qu'il est modifié et de vérifier la signature numérique lorsque vous lisez le fichier.

Plus de détails sur comment sign XML file et comment verify signature.

Mais je pense qu'il est préférable de garder ce type de données dans différents formats - base de données, fichier crypté, propriétés de l'application ...

+0

Je ne peux pas utiliser un db donc j'aime l'idée de le signer numériquement par mon application. Comment feriez-vous cela? –

+0

J'ai ajouté les liens à ma réponse qui vous dirigeront vers MSDN expliquant étape par étape la signature XML et la vérification de signature. – RaYell

0

Personnellement, je ne pense pas que XML soit le format approprié pour stocker des informations sécurisées dans ce cas. Tout le point de XML, comparé aux formats binaires, est qu'il est lisible/éditable par l'homme. Utilisez une sorte de format binaire crypté avec un hachage/crc connu qui vous indique si cela a été brouillé si vous voulez une sécurité totale.

+0

sinon xml quel genre de fichier binaire créeriez-vous? –

+0

Je ne suis pas sûr! Mais peut-être une sorte de liste sérialisée binaire, contenant des hachages de mots de passe? Voir http://dotnetperls.com/serialize-list-tutorial –

0

Vous pouvez utiliser la cryptographie, mais utilisez la DPAPI intégrée à Windows, car vous devrez également stocker la clé de cryptage en toute sécurité, ce qui est encore une fois un problème. L'avantage de l'utilisation de DPAPI est qu'elle utilise une clé unique à l'utilisateur ou à l'ordinateur, et qu'elle n'est jamais divulguée, même au programmeur! Mais si vous déplacez le fichier sur le profil ou l'ordinateur d'un autre utilisateur, il sera illisible.

+0

Je n'ai besoin de rien qui soit limité à l'utilisateur ou à l'ordinateur, je ne veux pas que quelqu'un d'autre que mon application pour éditer le fichier. est-ce aussi possible? –

Questions connexes