Jak se dá shodit PHP

Školení, která pořádám

Přestože je PHP vysokoúrovňový jazyk (např. není třeba alokovat paměť nebo se starat o ukazatele), neposkytuje kompletní prevenci proti potenciálně nebezpečným operacím. 10 způsobů, jak shodit PHP, představuje na svém blogu Ilia Alshanetsky, jeden z předních vývojářů PHP (je zodpovědný za vydávání verze 4.3.x). Článek je už poněkud staršího data, většina způsobů ale myslím bude platit stále.

Na jeho blogu je více zajímavých příspěvků, např. kritika direktivy safe_mode nebo triky pro optimalizaci rychlosti kódu (někdy až legrační – např. strlen($foo) < 5 je pomalejší než !isset($foo[5]), ale používat to bych vám kvůli čitelnosti kódu opravdu nedoporučoval, jindy naopak rozumné – např. $keys = array("key" => true); isset($keys["key"]) je u velkých polí rychlejší než $keys = array("key"); in_array("key", $keys)).

Přijďte si o tomto tématu popovídat na školení Bezpečnost PHP aplikací (13.6.2018 - 14.6.2018, Praha).

Jakub Vrána, Ze zákulisí, 18.7.2005, diskuse: 7 (nové: 0)

Diskuse

ikona dgx:

isset($keys["key"]) je rychlejší prakticky vždy, tedy nejen u velkých polí. Mezi oběma typy polí se dá transformovat funkcí array_flip()

Tomáš:

Tohle ale nezjistí, pokud v poli prvek existuje, ale má null hodnotu, mnohem lepší ke array_key_exists()

Kryšpín:

jsem amatér, ale když jsem zkoušel v php funkce pro zamykání tabulek MySQL (locktables .... unlocktables) tak pokud v kodu mezi nimi byla nějaká fatální chyba (lze nasimulovt například die(); ), tak to na lokálu shodilo mysql server. Na webu jsem to raději nezkoušel, takže nevím jestli je to mým amatérským nastavením php a mysql nebo něčím jiným.

ikona Jakub Vrána OpenID:

S tímto problém jsem se dosud naštěstí nesetkal, takže bohužel nedokážu poradit. Pokud se používají http://php.vrana.cz/persistentni-pripojeni.php, tak se možná tabulky jenom neodemkly a databáze byla nedostupná? Při obyčejných připojeních by PHP mělo spojení ukončit, čímž se odemknou i tabulky.

Zkuste http://diskuse.jakpsatweb.cz/index.php?act…&forum=9, třeba tam bude někdo chytřejší.

Slash:

Ted jsem se setkal s případem že jakékoliv volání COM shodí Apache. Třeba
<?php
$excel
= new COM("excel.application") or die("Unable to instantiate Excel");
echo
"Loaded Excel, version {$excel->Version}\n";
?>
Nevíte čím by to mohlo být?
Mám apache 1.3.33, php 4.3.10

patrik:

je to bug apache, viz jejich buq track ci jak se to jmenuje

Robot No.6:

<?php
$excel
= new COM("excel.application") or die("Unable to instantiate Excel");
echo
"Loaded Excel, version {$excel->Version}\n";
?>

že by špatná kontabilita ?

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.