[PHP-dev 1351] Re: 変数の追跡

Seiji Masugata s.masugata @ digicom.dnp.co.jp
2006年 11月 13日 (月) 20:08:16 JST


こんにちわ、桝形です。

> はじめまして、浅野と申します。
> 
> POSTやGET、Cookieなどの外部入力に基づく変数を追跡してperlのtaint modeのような
> チェックを行う機構を自前で開発したいと思っています。

素敵な機能を開発されようとしてますね。頑張って下さい。


> まず変数の追跡をするために、変数領域の確保や値の受け渡しなどの処理を行うコードを
> 読みたいのですが、どこからよめばいいでしょうか。

自分がやるなら、以下辺りを手始めに読みます。
というか、先程このメールを読んでソースを見てました。(w


http://cvs.php.net/viewvc.cgi/php-src/main/php_variables.c?view=log&pathrev=PHP_5_2
SAPI_API SAPI_POST_HANDLER_FUNC(php_std_post_handler)
SAPI_API SAPI_TREAT_DATA_FUNC(php_default_treat_data)

http://cvs.php.net/viewvc.cgi/php-src/main/SAPI.h?view=log&pathrev=PHP_5_2
#define SAPI_POST_READER_FUNC(post_reader) void post_reader(TSRMLS_D)
#define SAPI_POST_HANDLER_FUNC(post_handler) void post_handler(char *content_type_dup, void *arg TSRMLS_DC)
#define SAPI_TREAT_DATA_FUNC(treat_data) void treat_data(int arg, char *str, zval* destArray TSRMLS_DC)

http://cvs.php.net/viewvc.cgi/php-src/main/SAPI.c?view=log&pathrev=PHP_5_2
SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data)

http://cvs.php.net/viewvc.cgi/php-src/main/rfc1867.c?view=log&pathrev=PHP_5_2
SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler)


parse_strやimport_request_variables関数も同じハンドラを使うので、かなり
ヤヤこしい事になってますが、SAPI_TREAT_DATA_FUNCで登録されている関数が
処理の実体だと思います。

各種配列への登録部分は、php_variables.cのphp_register_variable_safe関数
なのかと。。。


mbstringやfilter拡張モジュールはオマケみたいなものですが、動作的には
参考になると思います。

http://cvs.php.net/viewvc.cgi/php-src/ext/mbstring/mb_gpc.c?view=log&pathrev=PHP_5_2
SAPI_POST_HANDLER_FUNC(php_mb_post_handler)

http://cvs.php.net/viewvc.cgi/php-src/ext/mbstring/mb_gpc.h?view=log&pathrev=PHP_5_2
MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data);

http://cvs.php.net/viewvc.cgi/php-src/ext/filter/?pathrev=PHP_5_2
http://cvs.php.net/viewvc.cgi/php-src/ext/filter/docs/filter.txt?view=markup&pathrev=PHP_5_2
http://cvs.php.net/viewvc.cgi/php-src/README.input_filter?view=markup&pathrev=PHP_5_2

全然、整理できてなくてスミマセン。。。

-- 
Seiji Masugata <s.masugata @ digicom.dnp.co.jp>



PHP-dev メーリングリストの案内