Hlavní navigace

Názor k článku Zranitelnosti typu injekce: SQL injekce od Filip Jirsák - Logik: Vy stále vycházíte z předpokladu, že všechny...

Článek je starý, nové názory již nelze přidávat.

  • 16. 10. 2018 21:49

    Filip Jirsák

    Logik: Vy stále vycházíte z předpokladu, že všechny vrstvy softwaru pod vámi jsou dokonalé, a vy už k tomu jenom napíšete dokonalou aplikaci. Ne jen bezchybné, tedy plně v souladu se specifikací, ale dokonalé – tedy bezchybné a navíc tam, kde není specifikace dostatečně přesná, fungující přesně tak, jak by se vám hodilo.

    Bindování proměnných odděluje kód od dat, escapování míchá vše do kódu. Je to jako rozdíl, když si z internetu stáhnete txt a exe. Ano, můžete mít chybu v prohlížeči txt souborů a zákeřný txt soubor povede ke spuštění útočníkova kódu. A můžete se pokoušet analyzovat exe antivirem a spouštět jen bezpečný kód. Ale principiálně data/dokument jsou bezpečná a musí být v programu chyba, aby bylo je možné zneužít, zatímco exe je principiálně nezabezpečené, a maximálně se můžete pokoušet zalepit díry, na které už jste přišel. Úplně stejně je to s bindováním uživatelských dat a escapováním SQL dotazu – bindování je principiálně bezpečné, a aby bylo možné ho zneužít, musí tam být nějaká chyba. Escapování je principiálně nezabezpečitelné, akorát můžete zalepit všechny místa, která vás napadnou, že by mohla být roziková – což ale nikdy nebudou všechna riziková místa.

    To, že jsou někdy prepared statements implementovány escapováním je právě příklad té chyby v implementaci bindování – tu chybu je ale možné opravit. U escapování principiálně nelze mít nikdy jistotu, že neexistuje nějaká další kombinace, na kterou jste nemyslel – a ta kombinace navíc může vzniknout s každou novou kombinací všech zúčastněných komponent. Takže nejen driveru a databáze, ale také knihoven, systémových knihoven atd.

    Takže správná otázka není, kolik děr v escapování bylo v poslední době nalezeno, ale jak snadné či obtížné je mezi všemi potenciálními chybami najít další takovou, která je prakticky zneužitelná.