update
This commit is contained in:
59
.paul/codebase/quality_risks.md
Normal file
59
.paul/codebase/quality_risks.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# Quality Risks
|
||||
|
||||
**Wygenerowano:** 2026-05-20 (`$paul-map-codebase`, mode: full)
|
||||
**Quality Radar tools:** codebase-memory-mcp ok; `jscpd` i `ast-grep` disabled by policy (`.paul/config.md`) — bez skanu duplikatow ani skanu strukturalnego.
|
||||
|
||||
## Krytyczne ryzyka bezpieczenstwa
|
||||
|
||||
- **Poswiadczenia bazy danych w repo (PLAINTEXT):** `core/config/Strona/db.config.php` zawiera `prodPass` jako stala PHP (`define('prodPass', 'Df61Xz21')`). Analogicznie inne pliki `core/config/<Site>/db.config.php`. Po naprawie 2026-05-20 `core/config/Admin/db.config.php` zawiera te same poswiadczenia co `Strona`. Rekomendacja: przeniesc do zmiennych srodowiskowych / pliku poza repo i zrotowac haslo, bo jest publicznie widoczne w historii git.
|
||||
- **Plik `info.php` w roocie aplikacji:** typowo zawiera `phpinfo()` — ujawnia konfiguracje srodowiska. Rekomendacja: usunac lub ograniczyc dostepem (`.htaccess`/`.htpasswd`).
|
||||
- **`.htpasswd` w katalogu glownym aplikacji:** powinien byc poza document root lub przynajmniej chroniony przez `.htaccess` (sprawdzic, ze nie jest serwowany).
|
||||
- **Standalone skrypty archiwizacyjne (`pack.php`, `tar.php`, `zip.php`, `_unpack.php`, `makl.php`):** dostepne przez HTTP, omijaja FrontController. Wymagaja audytu autoryzacji i sciezek (path traversal).
|
||||
- **CKEditor fileman PHP backend:** `Admin/plugins/ckeditor/plugins/fileman/php/*.php` — wewnetrzny upload/move/delete dirs. Sprawdzic, ze jest chroniony przez sesje admina.
|
||||
|
||||
## Duplikaty i rownolegle warianty (kandydaci na konsolidacje)
|
||||
|
||||
Wykryto bez `jscpd`, na podstawie nazw / struktury:
|
||||
|
||||
- `core/lib/Smarty/` vs `core/lib/_Smarty/` vs `core/lib/Smarty3/` — trzy rownolegle kopie Smarty. Aktywnie ladowany Smarty3 (`core/core.php:121`); pozostale to dead code.
|
||||
- W obrebie kazdej kopii rownolegla wersja plikow z sufiksem `_1` (np. `core/lib/Smarty/Smarty.class.php` i `core/lib/Smarty/Smarty.class_1.php`, plus identycznie w `core/lib/Smarty/internals/`).
|
||||
- `Admin/plugins/ckeditor/` vs `Admin/plugins/ckeditor_/` — dwie pelne instalacje CKEditor.
|
||||
- `Admin/controller/SimpleArticle/IndexController.php` vs `Admin/controller/SimpleArticle_/IndexController.php` — duplikat kontrolera.
|
||||
- `Admin/controller/StructureController.php` vs `Admin/controller/StructureController.php_` — backup w repo.
|
||||
- `core/class/MainController.class.php.bak`, `core/class/Router.class.php.bak` — backupy klas core.
|
||||
- `template/index.tpl` vs `template/index.tpl.bak` vs `template/index_good.tpl` — trzy warianty glownego szablonu; trudno powiedziec, ktory jest kanoniczny.
|
||||
- `core/config/Log4PHPConfig.xml`, `Log4PHPConfig.xml.test`, `Log4PHPConfig-admin.xml`, `Log4PHPConfig-admin.xml.delete`, `Log4PHPConfig-strona.xml`, `Log4PHPConfig-strona.xml.delete` — chaos plikow konfiguracji loggera.
|
||||
|
||||
## Hardkodowane wartosci
|
||||
|
||||
- `Admin/index.php:33-36` — twardo zakodowane `id` struktur galerii klienta dla jezykow (18/52/30/40). Zmiana w bazie wymaga edycji kodu.
|
||||
- `core/core.php:97` — `setlocale(LC_TIME, 'pl_PL', 'pl', 'Polish_Poland.28592')` zakodowane na sztywno.
|
||||
- `core/core.php:133` — `cache_lifetime = 60` na sztywno.
|
||||
- `routes.php` — adresy URL w wielu wariantach jezykowych zakodowane statycznie (np. `mapa_serwisu`, `site_map`, `wyszukaj`, `search`).
|
||||
- `core/config/Strona/db.config.php:13` — host bazy `mysql8` zakodowany.
|
||||
|
||||
## Spojnosc i konwencje
|
||||
|
||||
- Mieszanie prefiksow modeli `Mf*` i `Fk*` bez jednoznacznej polityki domenowej.
|
||||
- Routes admin sa wewnatrz `Admin/index.php` (mieszane z bootstrap), public sa w `routes.php` — niespojnosc.
|
||||
- W kodzie wystepuja zakomentowane sekcje (`//$logger = LoggerManager::...`, `//$captchaStatus = true;`) — pozostalosci po starszych iteracjach.
|
||||
|
||||
## Mozliwe podejrzane konstrukcje
|
||||
|
||||
- `Core::LoadClass()` (`core/core.php:173`) uzywa `preg_match_all` na nazwie klasy i konstruuje sciezki z `_` -> `/`. Wyjatki w nazewnictwie moga prowadzic do nieskonczonych falli-przez (`include` nie istniejacych plikow w try/else).
|
||||
- `SelfUrl()` (`core/core.php:305-310`) zawiera nietrywialne warunki dotyczace HTTPS i portu — pasie na refactor / wykorzystanie wbudowanej funkcji.
|
||||
|
||||
## Spojnosc backend/frontend
|
||||
|
||||
- Brak jednoznacznego API contract — kontrolery zwracaja HTML przez Smarty + `AjaxForm`/`AjaxMapsList`/`AjaxRegisterCaptchaCheck` zwracaja prawdopodobnie JSON/HTML czesciowy. Wymaga inwentaryzacji przy zmianach formularzy.
|
||||
|
||||
## Akceptowane / odlozone
|
||||
|
||||
- Brak menedzera zaleznosci (`composer`) — projekt historyczny, modernizacja poza zakresem zwyklych zadan.
|
||||
- Brak testow automatycznych — patrz `testing.md`.
|
||||
|
||||
## Co odblokuje glebsza analiza
|
||||
|
||||
- Wlaczenie `jscpd` w `.paul/config.md` (`quality_radar.tools.jscpd: true`) dla potwierdzenia duplikatow kodu po liniach.
|
||||
- Wlaczenie `ast-grep` dla wykrycia podejrzanych konstrukcji (np. SQL inline, `eval`, `extract`, `mysql_*` legacy).
|
||||
- Zrzut DDL bazy (`mysqldump --no-data`) jako referencja schematu.
|
||||
Reference in New Issue
Block a user