Autor Zpráva
Werewolf
Profil
Zdravím.

Potřeboval bych uchránit PHP kód před přečtením (myslím, že není nutné, abyste věděli proč).

Nemáte s tím někdo, prosím, zkušenosti?

Děkuji všem
DoubleThink
Profil *
Před kým?
Jan Tvrdík
Profil
Werewolf:
Nechápu jaký kód chceš utajit? HTML? JS? PHP?
Werewolf
Profil
DoubleThink:
Třeba před těmi, kteří používají můj skript na svém serveru.

Jan Tvrdík:
PHP, samozřejmě. Doplněno [#1].
Jan Tvrdík
Profil
Werewolf:
A jak se k tomu skriptu dostali? Co myslíš přečtením PHP kódu?
Werewolf
Profil
Myslím tím, že někdo bude využívat můj skript na svém serveru.
Jen nechci, aby ten kód mohl někdo číst nebo ho dokonce upravit.
Jde to nějak, kromě nějaké šifry (třeba base64) + eval?
Str4wberry
Profil
Můžeš si vytvořit šifru vlastní, ale stejně se nevyhneš tomu, že si kód s různou obtížností někdo rozluští.
joe
Profil
Použij ionCube. Rozšifrování téměř nemožné.

A nezapomeň si udělat zálohu toho nešifrovaného :-)
Werewolf
Profil
Díky. Checknu to a ozvu se ;-)
Werewolf
Profil
Str4wberry:
Teď jsi mě přivedl na nebezpečně náročné hloubání. Dovolím si <ot>:

Jak se definuje základní programovací jazyk systému, když ještě není nic definováno?
Abychom mohli definovat definici, musíme nejdříve definovat definici. Tak je to i s rekurzí.

Je tedy možné, že by šlo zašifrovat šifru, která by k rozšifrování sama sebe použila sama sebe?
Tím se dostáváme do nekonečného cyklu. Jde to tedy nějak, aby byla definice té funkce zašifrována tou funkcí nebo něčím, co se prostě nedá rozšifrovat?
Protože kód nelze rozšifrovat bez „znění“ šifry.
</ot>


joe:
Nevidím způsob, jak být připraven na to, že se nebude ionCube Extension nacházet na serveru, na němž můj skript poběží.

Edit: Kdo prováděl nepravosti s formulářovým políčkem? Ten text tam vypadá mnohem kratší :-)
Joker
Profil
Werewolf:
Jde to tedy nějak, aby byla definice té funkce zašifrována tou funkcí/něčím, co se prostě nedá rozšifrovat?
Z principu nedá. Minimálně na poslední úrovni z toho musí vzniknout sekvence instrukcí pro daný procesor, které se budou dát odchytit a analyzovat.

Ono ale nejde až tolik o možnost či nemožnost takového útoku, jako spíš o jeho ziskovost.
Když útok bude co do času, vědomostí a vůbec prostředků podobně náročný jako napsání celé té aplikace znovu, nikdo nebude mít důvod to dělat.
Werewolf
Profil
Joker:
Takhle jsem nad tím nepřemýšlel...

Takže stačí napsat si nějakou vlastní funkci a celý kód obalit evalem?
Joker
Profil
Werewolf:
Tak záleží, jak je ten kód cenný. Možná by stačil jen nějaký obfuskátor, který by znečitelnil názvy funkcí.
DoubleThink
Profil *
Werewolf:
Jak se definuje základní programovací jazyk systému, když ještě není nic definováno?
Napíše se v instrukčním strojovém kódu procesoru.

Je tedy možné, že by šlo zašifrovat šifru, která by k rozšifrování sama sebe použila sama sebe?
Ne. Proto kryptografie používá už pár set let šifrovací metody založené na tajném klíči.

Smiř se s tím, že to nejde bez nestandardního nástroje na serveru - to platí i u předkompilovaných PHP skriptů.
Werewolf
Profil
DoubleThink:
Asi budu muset...

Joker:
Dobrá. Zašifruji obfuskovaný kód :-)
ninja
Profil
Werewolf: nemáte lepší vytvořit API? Pak vlastní kód nikdo neuvidí, ale každý bude moci využít.
vynalezce
Profil
Je tu i jeden další problém:
Kdo z vás si dá na web kód, který je upraven tak, aby byl co nejnečitelnější? Už proto, že tím autor asi chtěl něco utajit, bych si takový kód na web nedal... Očekával bych v něm chyby, zadní vrátka nebo něco ještě nepříjemnějšího (PHP může spouštět příkazy v příkazové řádce).

EDIT:
Tvoje snaha utajit kód navíc upozorní hackery, že si bezpečností aplikace nejsi jist nebo chceš něco schovat.
mckay
Profil
vynalezce:
Očekával bych v něm chyby, zadní vrátka
No - ono také proč třeba zadní vrátka ne. Je to běžnou praxí u pár volně stažitelných (rozsáhlejších) skriptů. Někteří webdesignéři dokonce do svých prací umísťují speciálně vstup pro ně pod heslem (což mi nepřijde na škodu, pokud nemá k tomu heslu přístup ještě někdo jiný).

Tvoje snaha utajit kód navíc upozorní hackery, že si bezpečností aplikace nejsi jist nebo chceš něco schovat.
Možná je upozorní, ale na druhou stranu, třeba chce schovat kód jen kvůli svému geniálnímu nápadu :-), který nechce všem ukázat.

Mimo to bych také rád zmínil, že se Werewolfa vůbec nezastávám.:-)


ninja:
Jestli chápu správně, jak by takové API tohoto druhu mělo fungovat (třeba Iframe, nebo něco podobného), řekl bych, že to není zrovna nejlepší řešení. Pokud by se kód stal oblíbeným a všichni by ho chtěli používat (a byl by to kód náročný na databázi i server), mohlo by začít docházet k výpadkům.
vynalezce
Profil
mckay:
což mi nepřijde na škodu, pokud nemá k tomu heslu přístup ještě někdo jiný

To se právě zajistí jen těžko... Pokud má někdo botnet tak nemá problém tu hash (jak jinak to heslo ochránit?) prolomit. A až ho prolomí...
Alphard
Profil
mckay:
Někteří webdesignéři dokonce do svých prací umísťují speciálně vstup pro ně pod heslem (což mi nepřijde na škodu, pokud nemá k tomu heslu přístup ještě někdo jiný).
Předpokládám, že heslo je stejné pro všechny důvěřivce, kteří si to stáhnou. A jak se již psalo výše, heslo uvedené v kódu nelze utajit, jeho zjištění jen otázka námahy...

Werewolf:
Jakákoliv takováto ochrana bude zpomalovat aplikaci.

Třeba před těmi, kteří používají můj skript na svém serveru.
Proč? Tak buď jim něco poskytne, tak si to mohou přečíst a ověřit, nebo si to nechte na CD v trezoru. U velkých eshopů to dělají třeba tak, že se systémem poskytují i hosting a zákazník se vůbec nedostane na jejich FTP.
mckay
Profil
Alphard:
jeho zjištění jen otázka námahy...
Takže při konstrukci typu
if(md5(sha1(muj_encrypt(md5($_POST["heslo"])))) =="blkklj23klj3872JKHSA72hjkasdsadA152"){neco_proved();} 


By se dalo rozluštit? Mě to právě přijde docela bezpečné, získám tím pořádný hash. Prolomení dlouhého hesla v md5 a sha1 několikanásobně kombinovaný + vlastní šifrovací funkce mi přijde, že je prakticky v reálném čase nemožné. Nebo se pletu?
vynalezce
Profil
mckay:
Mě to právě přijde docela bezpečné, získám tím pořádný hash. Prolomení dlouhého hesla v md5 a sha1 několikanásobně kombinovaný + vlastní šifrovací funkce mi přijde, že je prakticky v reálném čase nemožné. Nebo se pletu?

Směrodatné je, za jak dlouho se při implementaci v C vygeneruje výsledná hash... a s botnetem máš stejně x tisíc vyzkoušených možností za sekundu.
Alphard
Profil
Několikanásobná ochrana je při útoku hrubou silou k ničemu. Jesti existuje kolizní klíč (nebo přímo heslo) o délce do 8 znaků, nebo třeba i 10 (záleží na výkonu počítače), najdu ho docela rychle. Nevím, jestli to budou hodiny, dny nebo týdny, ale předpokládám-li, že ten script bude na webu třeba tři roky, tak to není problém.
md5() je kvůli krátké délce výstupního hashe podle mě nejslabší článek.

Edit, teď o tom ještě přemýšlím (a počítám) a tak rychlé to asi nebude. Nemám zdání, kolik tisíc možností lze vyzkoušet za sekundu.
mckay
Profil
Alphard, vynalezce
Díky, rozšířili jste mi obzory. O těch několika tisících možností/sekunda jsem něco již něco slyšel, ale dosud jsem to asi bral na lehkou váhu. :-)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0