Autor Zpráva
naromax
Profil
Zdravím.

Vím, že tohle není úplně názor na stránku. Mým záměrem zde víceméně je dát trochu světu na vědomí, že jsem se s něčím dopatlal - a že to byla dlouhá patlanice.

Dokončil jsem řekněme alpha verzi PHP nástroje na správu webových stránek. Je to víceméně klasický redakční systém propagovatelný s hesly "nemusíte umět programovat...", "stačí pár kliků...", atd., zkrátka CMS. Dle mého názoru je velmi jednoduše modulární pomocí rozšíření, která se stejně jako celý systém píší objektově. Samozřejmostí je administrace, šablonování,...

Jako ukázku funkčního webu se můžete podívat na oficiální web - bundle-cms.cz, na můj osobní web - milansuk.cz a na demo demo.bundle-cms.cz.

- jednak by mě zajímalo, co vás napadne bezprostředně po tom, co se objevíte třeba na demo stránce - jestli byste měli chuť systém vyzkoušet nebo použít, atd. - zkrátka takový uživatelský pohled
- druhá věc bude pro otrlejší - rád bych, kdyby se podařilo kolem projektu udělat nějakou menší komunitu,... nějací začínající nadšenci, kteří by měli zájem zkusit začít dělat na reálném projektu, začít používat verzovací systém GIT, naučit se nové věci - to je přece, oč tu jde! :) Později mohu přislíbit i možnost přivydělání nějaké té mince při tvorbě webů s tímto systémem!
DJ Miky
Profil
V první řadě by to asi chtělo ošetřit SQL injection rozeseté po kódu, než to někdo opravdu použije: bundle-cms.cz/?router=%27. Také jsem se docela zděsil toho, že při každém dotazu (kterých je na každé stránce několik) vytváříš vždy nové spojení do databáze.
naromax
Profil
DJ Miky:
Jo, super, hned to opravuju - jen, jaktože rozeseté po kódu? - všechno, co jde z adresy nějakým způsobem v drtivé většině případů zpracovává třída Url.

Ty nové spojení jsou velký problém? - spojení je pro instanční metody vytvořeno vždy v předkovy DatabaseBase a statické si hold nové připojení udělat musí. Ještě mě napadá nějakým způsobem vytvořit jeden objekt mysqli na začátku stránky a ten dodávat statické metodě DB::Connect() - odtud se bere připojení k MySQL - , ve skutečnosti by teda všechny volání na připojení byly volání na existující instanci.

------

Edit: aha...koukám, že jsem vymyslel retardovanej singleton... :D
DJ Miky
Profil
SQL injection nejsou jen z URL, třeba hodnoty zadané při registraci (jméno a e-mail) se předávají rovnou do Bundle\User::Create a tam se z nich skládá SQL dotaz. Stejně tak při přidávání komentáře (výsledek $connect->escape_string($text); se nikde nepoužije). Takový přístup je obecně velice náchylný na chyby (zapomenuté ošetření), lepší je používat prepared statements a všechny hodnoty předávat přes ně, tzn. neskládat dotazy spojováním řetězců. DB vrstva se pak postará o správné ošetření všech parametrů automaticky.
naromax
Profil
OK. To nebude problém opravit...

Dík.


Jo, jen pro info - těch připojení k databázi bylo průměrně na stránce kolem 3 až 4 a v administraci max. 9. Díky singletonu je to teď sice jedno jediné krásné připojení, nicméně tak brutální hodnoty to taky nebyly.
aDAm
Profil
malé OT, pro někoho asi rejpavé....

Co někoho vede k tomu psát vlastní CMS úplně od píky? A pak jej nějak distribuovat? Pochopím to pokud se někdo učí základy tak to může posloužit jako dobrý nástroj výuce že buduje něco konkrétního, ale tím bych to asi uzavřel. Dle mě je takové CMS odsouzeno k zániku, snad nikdo rozumný na tom nemůže stavět jakýkoliv business, max se v něčem nechat inspirovat, jenže v čem když je to vlastně jen studijní pokus? Pokud už bych chtěl jit formou OS CMS, tak proč to nezaložit na něčem co má komunitu? Nepoužít nějaký FW? Tím by se automaticky dalo získat hned několik zájemců, né třeba o celé CMS ale o jeho prvky, případně kdyby komunita viděla že je tam dobře našlápnuto, připojila by se, ale takto?

konec mého OT ;) snad se tím až tak autora nedotknu.
Fisir
Profil
Reaguji na aDAma:
1) Chceš mít vlastní řešení.
2) Ostatní CMS jsou zbytečně složité.
3) Ostatním CMS nerozumíš (jak se co vytváří, …).
4) Ostatní CMS neumí to, co potřebuješ / dělá se to v nich příliš složitě.
5) Chceš mít všechno pod kontrolou / vědět, jak to celé funguje.

Já si také píšu vlastní CMS pro web (ačkoliv ho nikde dále nedistribuuji).
aDAm
Profil
Fisir:
no nevim:
1. Taky sem kdysi chtěl mít vše svoje a jen svoje
2. Neříkal jsem použít hotová CMS ale hotové frameworky a jejich doplňky
3. Tak to že něčemu nerozumíš snad není problém ne? Pokud to nutně potřebuješ tak se tím prokoušeš, jde to, už jsem si tím prošel několikráte.
4. Opět zavádíš ostatní CMS, neříkám jít do hotových CMS, ale i kdyby, tak bych když už tak volil něco zavedené co má základnu, jeden člověk prostě nedokáže rozumně napsat robustní CMS
5. to je jak bod 1. ale většinou příjdeš na to že "moje" je někdy totální přežitek a jen to žere čas a prostředky

no a já taky píšu vlastní CMS, resp přepisuju řešení z dob dřívějších kdy jsem musel mít vše "moje" do něčeho co je rozumně distribuovatelné a ačkoliv to asi nikdy nebude OS, tak jisté části jako OS uvolňuji
naromax
Profil
Tomuto úplně rozumím a čekal jsem, kdy se podobná odpověď ukáže. Většinu asi shrnul Fisir - s 1) úplně souzním :D a stejně tak bod 5) je trefa do černého, nicméně s 2) - 4) úplně souhlasit asi nebudu - ironie, když se mě snažil autor zastat, takže to prosím ber jako příspěvek do diskuze a důkaz, že se snažím být objektivní.

Pro mě byla inspirace hlavně to, že např. WP není objektový a způsob, jakým se píše ve wordpressu mi vůbec nesedl, na druhou stranu třeba Drupal, který už má nějakou podporu OOP, je až moc robustní. Navíc, když mám vlastní CMS, tak je to jakási záruka toho, že jsem schopen v něm "dělat kouzla" - narozdíl od cizých řešení ať mají dokumentaci propracovanější a sebelepší - takže mě v tomto podporuje i můj zaměstnavatel a mám přislíbenou v budoucnu i marketingovou pomoc atd.,...

A když mám záruku, že se při vývoji zdokonalím - což je bezesporu- a zároveň mi to i bude vydělávat, proč se do toho nepustit... :)
aDAm
Profil
tak proč to nestavíš už na nějakém FW jak sem zmínil? symfony, nette, cake, codeigniter, zend atd.? vyhneš se tak pak těm základním botám co tam nasekáš, viz. třeba co zmínil DJ Miky atd. a věř že jich budeš mít více a více a pak se z toho zblázníš
Jan Tvrdík
Profil
naromax:
Web obsahuje kritické SQL injection, XSS, CSRF a remote code execution zranitelnosti. Takže lze např. nahrát libovolný PHP skript demo.bundle-cms.cz/upload/phpinfo.php. Zazálohuji si to jako ukázku extrémně zranitelné aplikace. Dají se s tím dělat soutěže, jako kdo najde víc bezpečnostních zranitelností během 30 minut.


Odkaz na GitHub repositář, ať to nemusíte stahovat: github.com/sukovanej/Bundle
naromax
Profil
Jan Tvrdík:
Proč ne... Ale jsem rád, že se to tu objevilo, očividně jsem bezpečnost hodně podcenil, aspoň teď vím, na co se mám zaměřit. Jen kde jsi objevil to XSS? - prakticky jediná veřejně zobrazovaná data od návštěvníků jsou v komentářích a tam by to mělo být vyřešené. :)
DJ Miky
Profil
ad XSS v komentářích: Můžu si založit účet se jménem <script>alert('XSS');</script>.
naromax
Profil
DJ Miky:
Aha, dík.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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