Bezpečnost aplikací
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
http://example.com/db.php?id=0;DELETE%20FROM%20users
<?php
$id = sqlite_escape_string($_GET['id']);
// $id is still 0;DELETE FROM users
sqlite_query($db,
"SELECT * FROM users WHERE id={$id}");
// Bye Bye user data...
?>
department of computer
science
and engineering
X36TW1 – Tvorba webových aplikací 1
Přednáška 9 / Strana 31
Prevence SQL injection: Prepared Statements
Prepared statements slouží k zabezpečení a
optimalizaci vykonávaných dotazů.
SQL “zkompiluje” dotaz a pak při každém vykonání
jenom nahrazuje hodnoty přeměnných.
– Vyšší výkon – jedno kompilování na dotaz.
– Vyšší bezpečnost, vložená data nejsou považována za
další dotaz.
– Podpora v hlavních RDBMS:
• MySQL od verze 4.1.
• SQLite nemá podporu.
department of computer
science
and engineering
X36TW1 – Tvorba webových aplikací 1
Přednáška 9 / Strana 32
Použití Prepared Statements
<?php
$data = "Here is some text to index";
pg_query($db, "PREPARE my_stmt (text) AS
INSERT INTO search_idx (word) VALUES($1)");
foreach (explode(" ", $data) as $word) {
// no is escaping needed
pg_query($db, "EXECUTE my_stmt({$word})");
}
// de-allocte the prepared statement
pg_query($sb, "DEALLOCATE my_stmt");
?>
Unless explicitly removed, prepared statements “stay alive”
between persistent connections.
department of computer
science
and engineering
X36TW1 – Tvorba webových aplikací 1
Přednáška 9 / Strana 33
Vzdálené spuštění kódu
Remote code execution, Remote file inclusion...
Útočník spustí prostřednictvím napadené webové aplikace
vlastní kód:
– načítaním vlastního souboru (lokálního, nebo ze
vzdáleného serveru)
– spuštěním eval() na nekontrolovaném vstupu
Hrozí převzetí kompletní kontroly nad napadenou aplikací
nebo celým serverem.
department of computer
science
and engineering
X36TW1 – Tvorba webových aplikací 1
Přednáška 9 / Strana 34
Vzdálené spuštění kódu: ochrana