Prskavčí blog

Jul 1, 2009 - Comments

PHP Bytekit

Bytekit

Bytekit je nová extenze pro PHP, která umožňuje analyzovat PHP kód na úrovni opcodes, které generuje compiler v PHP. Také nám umožňuje pomocí disassembleru sledovat jak probíhá program na úrovni compileru. Je to další z nástrojů, které umožní zlepšit kvalitu kódu a určitě přinese řadu další analytických nástrojů. Autorem je Stefan Esser, kterého jistě každý zná. Jeho blog a příspěvky k bezpečnosti PHP jsou známy.

Bytekit-cli

Samotná extenze, ale není všechno. Abychom mohli ji dobře využít tak Sebastian Bergmann vytvořil bytekit-cli, které nám umožní ho využít. V článku od SB jsou pěkné příklady, které doporučuji vyzkoušet. Bytekit zatím není dostupné přes PECL tak ho musíte zkompilovat ze zdrojového kódu, známým postupem (phpize, configure, make, make install) a zkompilovanou extenzi přidat do konfigurace PHP. Potom si z githubu můžete stáhnout aktuální verzi bitekit-cli a můžete si hrát.

Například otestuji jak je na tom s přímým výstupem Zend Framework.

abtris@ubuntu# bytekit --rule=DirectOutput ZendFramework/

 - Direct output of variable $message
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:1094

  - Direct output of variable $playlistEntries
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:906

  - Direct output of variable $message
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:270

  - Direct output of variable $message
    in ZendFramework/demos/Zend/Gdata/YouTubeVideoApp/operations.php:276

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:796

  - Direct output of variable $albumId
    in ZendFramework/demos/Zend/Gdata/Photos.php:797

  - Direct output of variable $photoId
    in ZendFramework/demos/Zend/Gdata/Photos.php:798

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:825

  - Direct output of variable $albumId
    in ZendFramework/demos/Zend/Gdata/Photos.php:826

  - Direct output of variable $photoId
    in ZendFramework/demos/Zend/Gdata/Photos.php:827

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:741

  - Direct output of variable $albumId
    in ZendFramework/demos/Zend/Gdata/Photos.php:742

  - Direct output of variable $user
    in ZendFramework/demos/Zend/Gdata/Photos.php:688

  - Direct output of variable $type
    in ZendFramework/demos/Zend/WebServices/Amazon/amazon-search.php:153

  - Direct output of variable $type
    in ZendFramework/demos/Zend/WebServices/Amazon/amazon-search.php:157

  - Direct output of variable $keywords
    in ZendFramework/demos/Zend/WebServices/Flickr/flickr-composite.php:92

  - Direct output of variable $form
    in ZendFramework/demos/Zend/ProgressBar/ZendForm.php:209

  - Direct output of variable $ret
    in ZendFramework/demos/Zend/OpenId/test_server.php:264

  - Direct output of variable $id
    in ZendFramework/demos/Zend/OpenId/test_consumer.php:115

  - Direct output of variable $response
    in ZendFramework/library/Zend/Rest/Server.php:277

  - Direct output of variable $output
    in ZendFramework/library/Zend/Cache/Frontend/Class.php:226

  - Direct output of variable $data
    in ZendFramework/library/Zend/Cache/Frontend/Page.php:280

  - Direct output of variable $data
    in ZendFramework/library/Zend/Cache/Frontend/Output.php:101

  - Direct output of variable $data
    in ZendFramework/library/Zend/Cache/Frontend/Output.php:65

  - Direct output of variable $output
    in ZendFramework/library/Zend/Cache/Frontend/Function.php:107

  - Direct output of variable $response
    in ZendFramework/library/Zend/Json/Server.php:198

  - Direct output of variable $data
    in ZendFramework/library/Zend/ProgressBar/Adapter/JsPull.php:111

  - Direct output of variable $output
    in ZendFramework/library/Zend/Debug.php:102

  - Direct output of variable $exceptions
    in ZendFramework/library/Zend/Controller/Response/Abstract.php:734

  - Direct output of variable $content
    in ZendFramework/library/Zend/Controller/Response/Abstract.php:546

  - Direct output of variable $output
    in ZendFramework/library/Zend/Tool/Framework/Client/Console.php:194

Používá Zend Framework někde EVAL?

abtris@ubuntu#bytekit --rule=DisallowedOpcodes:EVAL ZendFramework/
 - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:92

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:99

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:126

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:129

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:159

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:164

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:195

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:200

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:223

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:230

  - Disallowed opcode "EVAL"
    in ZendFramework/demos/Zend/Gdata/Health.php:271

Závěr

Stefan Esser ve své přednášce o bezpečnosti Zend Frameworku se zmiňuje o možnosti například kontrolovat EVAL v pre-commitu tasku, obdobně jako například dnes kontroluji syntaxi php.

Koncem září se budu věnovat porovnání PHP Frameworků z hlediska nástrojů pro QA, které jsem dělal v článku pDepend a php frameworky, uvidíme jak jednotlivé frameworky za tu dobu pokročili a také si budu všímat frameworků pomocí dalších nástrojů mezi které bytekit jistě zahrnu.

Nesmím opomenout připomenout také, že je venku PHP 5.3, na které se čekalo poměrně dlouho a doufám jen, že nebude tolik plné chyb jako jeho přechůdci 5.2 a 5.1. Uvidíme zda na příchod PHP 5.3 jsou připraveny i jiné frameworky než Nette.

Tags: php qa

Vi a integrace s IDE GTD a Android

comments powered by Disqus