$filter = isset($_GET['filter']) ? $_GET['filter'] : '';
Co když tam někdo předá pole? Když do URL dám filter[]=foo, je tam pole. (BTW, v kombinaci se zapnutým zobrazení chyb je to často snadný způsob, jak trošku analyzovat cizí kód.)
Pokud se tam předá pole, bude tam pole - to nezpůsobí nic, zabráním-li SQL injection pomocí parametrizovaných queries.
Eventuálně pro web pro nějakou firmu který je obnažený do Internetu, by šlo napsat nějakou jednoduchou Util metodu pro získání těch parametrů a validaci.
<td><?= $item['name'] ?></td>
To je učebnicová ukázka HTML injection, a tedy XSS, ne? Frameworky to typicky z velké části řeší, byť třeba u odkazů (kam může přijít třeba javascript:alert(location.href)) si je stále někdy potřeba dát pozor. (I když to asi může řešit CSP.)
Ano, ten kód vede k proveditelnosti HTML injection, správně by se mělo vše vykreslovat přes funkci:
htmlspecialchars($item['name'] )
Nelíbí se mi ale, že to komplikuje template, takže tady by se asi hodil nějaký framework.
<?php $text = 'Ahoj světe'; $href = 'page2.php'; include 'nav-button.php' ?>
Uf, oproti Reactímu kódu vidím docela velké rozdíly:
1. Reactí komponenta dostává jen ty parametry, které mu explicitně předáte, zatímco ten kód v include dostane celý scope. I pokud ten includnutý soubor bude využívat jen to, co dostal, může to snadno přitáhnout moji pozornost. Ale snadnost se (třeba při refactoringu) může stát, že omylem využije i něco navíc a kód bude zapletený.
Ano, je to další nevýhoda toho zápisu. Přesto, na vadné vstupní parametry mě umí částečně upozorní IDE (PHP Storm).
Na závěr bych chtěl říct, že nejsem profi programátor Internetových webů, dělám jen technické Intranetové webovky, a jinak nějaké drobnosti jako koníček. A jednoduchost použití PHP mě docela překvapila - jenom se vezme index.php, hodí se to do "/var/www/html" a je to, mám web.
Ještě o stupínek složitější, ale taky pořád jednoduché, je použít Python s Bottle třeba a k tomu templates.
Např. ani jeden z "jednoduchých" webů, které jsem dělal v Reactu, tak nemá tak dobře vyřešenou navigaci přes uri parametry, jako to udělá defaultně PHP. V Reactu se to musí naprgramovat, aby byla page řízená parametry přítomnými v URI, načež následně fungují dobře tlačítka Zpět a Vpřed v browseru, že.
Co mi ale na těch Server side technologiích trochu vadí je třeba to, že browser neumí uživatele vrátit zpátky na pozici na stránce, kde se nacházel při kliknutí na nějaký Submit. Jako např. že bych měl někde dole na vstupu formulár:
- Zadejte tel. číslo
- Button: Poslat ověřovací sms
Tak bohužel u server side renderingu neudělám to, že by browser nascroloval zpátky na to místo. Leda přes záložky, ale to se nechová idálně.