IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Jak zakázat uživateli měnit xml soubory

Aktivity
Avatar
nickname01
Člen
Avatar
nickname01:4.11.2017 16:03

Když můj program vytvořil složku v AppData/Roaming a zapsal do něj xml soubor pomocí dom, zjistil jsem že mohu data bez problému měnit(bez použití toho programu). Jak tedy zakázat uživateli tato data měnit?

 
Odpovědět
4.11.2017 16:03
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na nickname01
Petr Čech:4.11.2017 16:14

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.

Nahoru Odpovědět
4.11.2017 16:14
the cake is a lie
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na nickname01
Petr Čech:4.11.2017 16:16

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 :D

Nahoru Odpovědět
4.11.2017 16:16
the cake is a lie
Avatar
Neaktivní uživatel:4.11.2017 22:21

Podepis ho certifikatem, zakriptuj a nastav mu vlastnost na hidden.

Nahoru Odpovědět
4.11.2017 22:21
Neaktivní uživatelský účet
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Čech:5.11.2017 18:09

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.

Nahoru Odpovědět
5.11.2017 18:09
the cake is a lie
Avatar
Roman
Člen
Avatar
Roman:5.11.2017 21:30

Nepouzivej xml, ale napr. sqlite db s heslem. Kazdopadne kdyz uz je aplikace na nejakem pc vzdycky je moznost zjistit heslo, klic, atp.

 
Nahoru Odpovědět
5.11.2017 21:30
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na Roman
Petr Šťastný:5.11.2017 21:44

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?

Editováno 5.11.2017 21:45
 
Nahoru Odpovědět
5.11.2017 21:44
Avatar
Roman
Člen
Avatar
Odpovídá na Petr Šťastný
Roman:5.11.2017 22:18

Ž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.

 
Nahoru Odpovědět
5.11.2017 22:18
Avatar
Adam Ježek
Tvůrce
Avatar
Adam Ježek:5.11.2017 23:14

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.

Nahoru Odpovědět
5.11.2017 23:14
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Petr Čech
Tvůrce
Avatar
Petr Čech:6.11.2017 8:17

Ha, můžu si tu trochu přihřát polívčičku :D 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íč

Nahoru Odpovědět
6.11.2017 8:17
the cake is a lie
Avatar
nickname01
Člen
Avatar
Odpovídá na Adam Ježek
nickname01:6.11.2017 16:54

Díky, ale mě vadí právě to, že to může rozbít.

 
Nahoru Odpovědět
6.11.2017 16:54
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na nickname01
Adam Ježek:6.11.2017 16:56

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.

Nahoru Odpovědět
6.11.2017 16:56
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na nickname01
Martin Dráb:6.11.2017 17:22

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.

Nahoru Odpovědět
6.11.2017 17:22
2 + 2 = 5 for extremely large values of 2
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na nickname01
Petr Čech:6.11.2017 18:06

Ř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.

Editováno 6.11.2017 18:07
Nahoru Odpovědět
6.11.2017 18:06
the cake is a lie
Avatar
zelvicek
Člen
Avatar
Odpovídá na nickname01
zelvicek:7.11.2017 7:12

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.

 
Nahoru Odpovědět
7.11.2017 7:12
Avatar
nickname01
Člen
Avatar
Odpovídá na Petr Čech
nickname01:7.11.2017 14:03

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.

 
Nahoru Odpovědět
7.11.2017 14:03
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na nickname01
Petr Čech:7.11.2017 14:17

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).

Nahoru Odpovědět
7.11.2017 14:17
the cake is a lie
Avatar
nickname01
Člen
Avatar
Odpovídá na Petr Čech
nickname01:8.11.2017 13:49

Je mi to jasné ;-)

 
Nahoru Odpovědět
8.11.2017 13:49
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na nickname01
Jirka Jr:9.11.2017 20:00

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

 
Nahoru Odpovědět
9.11.2017 20:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 19 zpráv z 19.