4. NetteUtilsStrings
• Regulární výrazy se správným ošetřením chyb:
http://phpfashion.com/zradne-regularni-vyrazy-v-php
• Metody pro práci s řetězci v UTF-8 – používá extension mbstring.
• Pozor na správné použití a míchání s non-multibyte funkcemi a hodnotami!
4
6. Příklad špatného použití
6
public static function stripHeaders(CurlWrapper $curl)
{
$curl->responseHeaders = Strings::substring($curl->response, 0,
$headerSize = $curl->info['header_size']);
if (!$headers = CurlWrapper::parseHeaders($curl->responseHeaders)) {
throw new CurlException("Failed parsing of response headers");
}
$curl->response = Strings::substring($curl->response, $headerSize);
return $headers;
}
$curl->info['header_size'] je počet bajtů, nikoliv počet UTF-8 znaků!
7. NetteUtilsRandom
• generate($length = 10, $charlist = '0-9a-z')
• Ke generování se snaží použít první z následujících metod (závislé na platformě):
• openssl_random_pseudo_bytes (nepoužívá se v PHP 5.3 na Windows)
• mcrypt_create_iv (nepoužívá se v PHP <= 5.3.6 na Windows kvůli bugu v PHP)
• file_get_contents('/dev/urandom') (není dostupné na Windows)
• md5(serialize($_SERVER), TRUE)
• Kromě posledního jsou všechny kryptograficky bezpečné.
• Dále kombinuje s microtime() a lcg_value().
7
8. NetteSecurityPasswords
• Metody (obdoba password_* z PHP 5.5 – http://php.net/manual/en/ref.password.php)
hash($password, array $options = NULL)
verify($password, $hash)
needsRehash($hash, array $options = NULL)
• Používá algoritmus bcrypt (PHP >= 5.3.7), $options:
• cost – počet iterací (2cost
– opatrně!), možné hodnoty 4-31, default 10. Určení vhodné
hodnoty: http://php.net/manual/en/function.password-hash.php#example-924
• salt – 22 znaková sůl, pokud není zadána, Nette ji náhodně vygeneruje.
8
9. Vliv parametru cost
• Měřeno na Retina MacBook Pro, 13", Late 2013, CPU Core i5 @ 2.4GHz, PHP 5.5.17
• Měření cost = 14: cca 1.77s.
• Teoreticky cost = 31:
1.77 * 2^31/2^14 = 1.77 * 2^17 = 1.77 * 131 072 = 231997 s = 64.44 h
9
10. NetteUtilsJson
• Metody
encode($value, $options = 0)
decode($json, $options = 0)
• Ošetření chyb: vyhazuje výjimky NetteUtilsJsonException.
• Opravy chyb v různých verzích PHP:
http://phpfashion.com/how-to-encode-and-decode-json-in-php
10
12. NetteUtilsValidators
• Validace datových typů i formátů – např. délka řetězce apod.
• Umí validovat jednotlivé proměnné, prvky polí, …
• Pěkná dokumentace: http://doc.nette.org/cs/2.2/validators
12
13. NetteHttpHelpers
• ipMatch($ip, $mask)
• Maska zadána ve tvaru CIDR:
<prefix ip adresy>/<počet bitů shody>
• Příklad: IP adresa 10.10.75.16 vyhovuje všem následujícím maskám:
10.0.0.0/8
10.10.0.0/16
10.10.75.0/24
10.10.75.16/32
13