Diskuze: Jak zakázat uživateli měnit xml soubory
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 19 zpráv z 19.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ne, nejde to. Proč to chceš udělat? Můžeš ho maximálně udělat
readonly, ale to si může uživatel změnit.
Musíš se smířit s tím, že uživatel může na svém stroji všechno.
Předpokládám, že ten soubor potom deserializuješ. Potom můžeš prostě při neúspěšné deserializaci poslat uživatele ho do pryč, že na to neměl hrabat
Podepis ho certifikatem, zakriptuj a nastav mu vlastnost na hidden.
Jasně, ale to jde vždy obejít jakmile běží aplikace u klienta. Takže se skoro nevyplatí se tím zabývat. Navíc ten soubor půjde změnit, jen se můžeš rozhodnout, že je neplatný a nechceš ho načíst.
Databáze je dobrá na větší projekty, ale není to na malou aplikaci zbytečně overkill? Serializovat je mnohem jednodušší a rychlejší na implementaci. Není jednodušší ten soubor pohřbít do nějaké složky, co je hluboko v jiných složkách a skrýt ho?
Že by SQLite byl overkill bych neřekl (android aplikace, ...). Najít a zobrazit skrytý soubor zvládne zdatnější uživatel, ale vyčíst data z DB a ještě zašifrované už ne. Serializovat můžeš přece i ta data z DB a pak je teprve pustit do těla aplikace.
neukládej to xmlko v plaintextu, ale zašifruj to (inspirace zde https://www.codeproject.com/…ypt-a-String)
když to uživatel otevře, uvidí rozsypanej čaj, kterej bude pokaždý jinej
i při malý změně.
uživatel nic nezmění, a pokud se o to pokusí, tak to nejspíš rozbije, pak
mu jenom hodíš hlášku že to zkazil a program se vrátí do stavu ve kterém
byl při instalaci.
Ha, můžu si tu trochu přihřát polívčičku Pokud bys to chtěl šifrovat, můžeš použít mou knihovnu: https://www.nuget.org/…/csharp-aes/ Jen musíš dobře schovat šifrovací klíč
V tom případě to už je jenom o tom hodit mu pod nohy co nejvíc klacků,
ale nikdy mu v tom nezabráníš.
Jinak nemáš jinou možnost, než ten soubor neukládat k němu, ale třeba k
sobě na server.
Pokud by tvoje aplikace běžela pod administrátorským účtem, můžeš přístupová práva k souboru nastavit tak, aby se k němu uživatel nedostal, nebo jej mohl třeba jenom číst. A to dokonce i v případě, kdy je daný uživatel vlastníkem toho souboru.
Samozřejmě, má-li uživatel administrátorský přístup, soubor si stejně přečte, i kdybys zakázal přístup naprosto všem a změnil vlastníka na nikoho.
Řekni nám, na co to vůbec konkrétně potřebuješ, dost to pomůže s
hledáním řešení .
Normálně prostě uživateli řekneš, že je hlupák, neměl na to hrabat a
ideálně se obnovíš na defaultní hodnoty.
Jinak se prostě smiř s tím, že uživatel je na svém počítači zkrátka
bůh a pokud opravdu bude chtít, rozbije to vždy. Bylo by
dost špatné, kdyby to tak nebylo, potom by si programy mohly dělat co
chtějí.
Pokud vyloženě potřebuješ, aby uživatel nemohl měnit informace, co má ten program, budeš muset uskladnit informace na serveru a potom jen uživateli přiřadit nějaké dlouhé a náhodné unikátní ID, pomocí kterého se k těm informacím dostane, ale protože budou na serveru, nebude je moct změnit. Pokud o ID přijde nebo ho změní, prostě o data přijde, ale určitě je nebude moci změnit. Tak můžeš ukládat třeba kolik má uživatel herní měny a budeš to moci např. bezpečně porovnat s měnou ostatních hráčů. To je ale, kde to je komplikované, protože typicky bude třeba ta data měnit - budeš muset tedy vždy zabezpečit, že se zapisuje platná hodnota a to je právě třeba u her poměrně netriviální úloha.
Jak již předchůdci naznačili, tomu nezabráníš, ale jen
znesnadníš.
Napadl mě ještě jeden způsob - zamknutí souboru z procesu. Pokud spustíš
process, který soubor otevře s exklusivními právy pro zápis, jiný process
jej nepřepíše. Samozřejmě, takovýto zámek dokáže znalá osoba lehce
zrušit či process sestřelit.
Na otázku na co konkrétně to potřebuji: Ptal jsem se obecně pro všechny případy, chtěl jsem zabránit tomu, aby mohl uživatel rozbít ten soubor.
Na to je odpověď pořád stejná. Pokud ukládáš data na uživatelově
počítači, nelze se nikdy spolehnout na data, co tvůj program načte. Dají
se maximálně házet klacky pod nohy, ale vždy to půjde obejít (i kdyby se
tvůj program jen kvůli tomu spouštěl nedejbože jako správce).
Pokud potřebuješ mít jistotu, že data jsou správně a validní (řekněme
jestli je program aktivovaný), musíš to načítat odjinud (z tvého
serveru).
pripadne muzes uzivatele obelstit
dal by se zasifrovany soubor pojmenovat treba applib.dll nebo applib.bin nebo applib.dat nebo app.lib
proste pripony, ve kterych clovek ceka ze budou jen binarni data
pokud ani toto nestaci, tak potom muzu uz jen rict, ze rozdrbat uzivatel muze i soubor *.exe, kdyz je magor
Zobrazeno 19 zpráv z 19.