graphic with four colored squares

PHP nejen pro vyvojáře
Ladislav Prskavec ladislav.prskavec@lmc.eu

  1. Zapomeňte na PHP4 (podpora ukončena 2007), PHP 5.0 a 5.1
  2. Koncepty a praxe
  3. Bezpečnost webových stránek
  4. Databázovou bezpečnost
  5. Bezpečnost session
  6. Bezpečnost filesystému
  7. Sdílené hostingy

Zapomeňte na PHP4

Koncepty a praxe

Filter Input

<form method="post">
   <label for="username">Username:</label><input type="text" name="username" />
   <label for="password">Password:</label><input type="text" name="password" />
   <label for="color">Select:</label><select name="colour">
                                            <option>Red</option>
                                            <option>Blue</option>
                                     </select>
   <input type="submit" />
</form>
// c_type extension
$clean = array();
if (c_type_aplha($_POST['username']) {
    $clean['username'] = $_POST['username'];
}
// filter
$args = array('username' => FILTER_SANITIZE_STRING, ...);
$myinputs = filter_input_array(INPUT_POST, $args);

Escape Output

kontext escapovací funkce reverzní funkce
HTML htmlspecialchars html_entity_de­code
XML htmlspecialchars
regulární výraz preg_quote
PHP řetězce var_export
MySQL databáze mysql_real_es­cape_string
MySQL improved mysqli_real_es­cape_string
SQLite databáze sqlite_escape_string
PostgreSQL databáze pg_escape_string
PostgreSQL, typ bytea pg_escape_bytea pg_unescape_bytea
JavaScript, JSON json_encode json_decode
CSS addcslashes
URL rawurlencode urldecode

Kompletní vysvětlení viz http://phpfashion.com/escapovani-definitivni-prirucka

Register globals

if (checkLogin()) {
    $loggedin = TRUE;
}

if ($loggedin) {
    // do stuff only for logged in users
} 

Pokud jsou register_globals = on, lze lehce tento kod překonat pomocí předání v $_GET

        http://localhost/?loggedin=1

V php.ini je register_globals od 4.2 standardně vypnuté, ale určitě je dobré to zkontrolovat a určitě nepoužívat software, který register globals vyžaduje zapnuté.

V PHP 5.3 je register_globals označeno jako DEPRECATED, podobně jako další directivy (register_long_arrays, auto_globals_jit).

Bezpečnost webových stránek

Databázovou bezpečnost

Bezpečnost session

Bezpečnost filesystému

Sdílené hostingy

Principy programování KISS, DRY


Děkuji za pozornost