Řešil už někdo hashování/šifrování parametrů GET v url?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
worsik
Člen | 40
+
0
-

Ahoj, hledám jednoduchou funkčnost.

Chtěl bych všechny parametry v URL, např. „&action=neco&presenter=necojineho&id=3“ zašifrovat do nějakého tvaru, který teprve uvedu v URL, aby nebylo čitelné a bylo tam třeba jen „&hash=G4Gcd5%O6GE56UMNG32SW7K?P“. Ideálně s pevnou délkou.
Důležité je ale to, aby se to dalo rozšifrovat a přitom aby aplikace fungovala, jako by URL zašifrovaná nebyla.

Máte na to nějaký nápad?
Jde hlavně o to, ať mi někdo ručně nemění např. id

Aurielle
Člen | 1281
+
0
-

Co je na zašifrovaných parametrech lepší než na nezašifrovaných?

Blizzy
Člen | 149
+
0
-

Takovéto praktiky se nazývají Security through obscurity. Jsi si jistý, že tohle je postup, který potřebuješ? Nebylo by lepší například konkrétnímu uživateli zakázat přístup k určitým id? Zkus uvést konkrétní použití v aplikaci, možná to není správné řešení.

Každopádně možností máš například následující:

  • použít hashování a někde (v databázi) mít uložené páry hash → celá URL
  • použít nějakou šifru, kde nepotřebuješ mít tyto páry uložené a stačí ti klíč pro dešifrování

Tyto techniky můžeš uplatnit třeba ve:

  • speciální routě (resp. routeru)
  • presenteru, který po dekódování požadavku může přesměrovat na jiný presenter

Editoval Blizzy (6. 8. 2010 12:24)

worsik
Člen | 40
+
0
-

Důvod, proč hledám takovéto řešení je, že chci, aby uživatel striktně používal navigaci ve stránce, odkazy, tlačítka apod a vůbec nemohl hrabat do URL stránky. Nechci aby mi někdo testoval různé změny URL :o)

Edit: Přístup k nevhodným id mám zabezpečený, neexistující stránka je ErrorPresenterem zachycena a přesměrována. Používám několik parametrů, o nichž v podstatě ani nechci, aby uživatel věděl, že existují.

Editoval worsik (6. 8. 2010 12:31)

Blizzy
Člen | 149
+
0
-

Proč nechceš, aby ti někdo testoval různé změny URL? Bojíš se, že by se dostal tam, kam nemá?

Správným řešením jsou routy, můžeš si je navrhnout třeba tak, že na každou stránku povede pouze jedna adresa. Můžeš schovat informace, které nechceš, aby uživatel viděl. Například samotný web Nette frameworku je napsaný v Nette a routy používá, a nikdo se nebojí, že by tam někdo testoval nějaké změny.

Dalším argumentem je SEO, obecně se má za to, že vyhledávače hodnotí stránky lépe, pokud se klíčová slova vyskytují v URL.

Také běžný uživatel má radši normální hezké adresy, a to hlavně pokud je musí opisovat z papíru (např. zdroje v nějaké publikaci, reklamní leták nebo další tiskoviny).

Editoval Blizzy (6. 8. 2010 14:33)

Panda
Člen | 569
+
0
-

Při kódování jen parametru ID je možné použít filtry pro routování (Route::FILTER_IN, Route::FILTER_OUT), není vůbec potřeba dělat nějaké změny v presenterech, modelech, nebo nedejbože v databázi.

Jinak víceméně souhlasím s ostatními, dobře napsaná aplikace takovou dodatečnou ochranu vůbec nepotřebuje.

nemesisqo
Člen | 2
+
0
-

chcel by som sa opytat, troska som sa hral s prikladom ktory name kedze som zacal s nete pred nieco viac nez mesiacom a flastne urobil som to zobral som nete pridal som tam navigacny bar kde odkazuje napr na TodoList ten ktory je uvedeny ako priklad na prve vytvorenie app no a potom som pridal login aby nemohol len tak niekto mazat a pridavat tie ulohy v pohlade som nastavil aby ak nieje prohlaseny tak nezobrazil stransku s TodoListom ale napisal ze nech sa uzivatel prihlasi ale ak napr zadate do url :

www/homepage/show/117?do=delete

tak ten prvom maze i ked vypise ze prihlaste sa, ako to zabezpecit aby sa nieco take nestalo aby som nemohol do url napisat a tak je to asi tym ze ta app nieje dobre napisana ako bolo napisane ved je to len priklad ale nieake riesenie alebo odporucania? Vopred dakujem za akukolvek pomoc

Editoval nemesisqo (1. 4. 2011 11:45)

Šaman
Člen | 2666
+
0
-

nemesisqo napsal(a):

www/homepage/show/117?do=delete

tak ten prvom maze i ked vypise ze prihlaste sa, ako to zabezpecit aby sa nieco take nestalo aby som nemohol do url napisat a tak je to asi tym ze ta app nieje dobre napisana ako bolo napisane ved je to len priklad ale nieake riesenie alebo odporucania? Vopred dakujem za akukolvek pomoc

Nastuduj si ACL (nový tutorial) a na začátku actionDelete() proveď kontrolu oprávnění. Lze to kontrolovat i dynamicky (třeba že můžeš mazat vlastní články,ale ne cizí).

Dokud jsem používal model založený na active recordu, tak jsem práva u každé CRUD metody kontroloval znovu a to pak bylo celkem neprůstřelné (práva se kontrolovala v modelu i když jsem je zapomněl explicitně zkontrolovat v presenteru).

Editoval Šaman (1. 4. 2011 13:26)

nemesisqo
Člen | 2
+
0
-

dakujem za help skusim sa nato pozriet. Je tam este ina alternativa toto je najlepsia?

ic
Člen | 430
+
0
-

nemesisqo napsal(a):

dakujem za help skusim sa nato pozriet. Je tam este ina alternativa toto je najlepsia?

Lepší neznám, pokud budou v adrese nějaké hashe pořád jde adresa (na nešifrovaném spojení) sledovat po cestě, a taky se ukládá v historii prohlížeče, kde to může kdokoliv prošmejdit.

Jan Tvrdík
Nette guru | 2595
+
0
-

Šaman wrote:

Dokud jsem používal model založený na active recordu, tak jsem práva u každé CRUD metody kontroloval znovu a to pak bylo celkem neprůstřelné.

Pokud tam není ochrana před CSRF, tak to má do neprůstřelnosti daleko.

Šaman
Člen | 2666
+
0
-

Jan Tvrdík napsal(a):

Pokud tam není ochrana před CSRF, tak to má do neprůstřelnosti daleko.

No dobře, pravdu díš. Ta neprůstřelnost je nadnesená – šlo o to, že se zkontrolují práva už na úrovni modelu a nezabezpečený handleDelete() tak nebyla bezpečnostní Macocha.

Jinak už od nemesisqova dotazu uhýbáme od tématu, takže případnou další diskuzi doporučuji směrovat do nového vlákna.