Понеже ми стана забавно онова с криптирането на PHP код, сега една забавна задачка.
Имаме PHP скрипт, който искаме да качим някъде, обаче не искаме никой да ни види сорса в чист вид и евентуално да го подмени. Поради това трябва същия да бъде качен криптиран и по време на изпълнение да се декриптира и eval-ва.
Нямаме право на готови решения от сорта на ioncube, защото е скучно. Просто приемаме че не можем да зареждаме библиотеки и zend extension-и, следователно не можем да зареждаме нещо от сорта на ioncube loader. От друга страна, за удобство имаме на разположение всички стандартни PHP extension-и (ако ще е по-лесно - дори всички PECL extension-и, документирани в function reference-a на php.net). Не че има значение, но ако можем да ползваме функции наготово що да не го правим
Изискванията са:
1) Никой, който може да изчете PHP файла, да не може *лесно* да декриптира криптирания сорс код. Тъй като винаги съществува възможността да се разбие с bruteforce атака, такава да отнема ужасно много време и да е практически безсмислена. Алгоритъмът за криптиране да е сигурен, поради което препоръчвам нещо вече измислено и изпробвано, вместо да преоткривате криптографията
Това е относително лесно изискване и всеки човек, който има малко мозък в главата, би трябвало да се сети как да го направи.
2) Да предположим, че злият враг(tm) има пълен контрол върху сървъра, където е качен криптирания скрипт. В това число може да слухти мрежата и да прихваща евентуално HTTP заявки, съдържащи някакви ключове за декриптиране. При това положение, да се измисли начин въпреки че злия атакуващ може да ни декриптира скрипта, да не може да ни го модифицира, т.е да подмени криптираното съдържание с някакво друго криптирано съдържание по негов вкус.
Това е по-сложно и изисква известни познания по криптография. Обаче не е чак толкова по-сложно.
3) Да се измисли вариант, при положение че злият враг(tm) има пълен контрол върху машината където качваме криптирания скрипт, демек чете всичко от диска и слухти трафика до машината, да не може да ни декриптира по никакъв начин скрипта.
Това е доволно сложно, аз поне още не съм измислил как да стане. Въртят ми се из главата разни идеи, ама все им намирам кусури. Но има известна вероятност да съществува такъв механизъм. Ако някой все пак успее да измисли нещо по въпроса (и работи), ще черпя.
Няма нужда да се пише PHP код по въпроса, би било досадно. Достатъчно е просто някой да развие идеята си, аз обаче ще се постарая да намеря кусури, така че мислете с главата си
Айде да ви видим сега