【V5計画】CAFEMILK SHOPPING CART V5 (113レス)
【V5計画】CAFEMILK SHOPPING CART V5 http://medaka.5ch.io/test/read.cgi/php/1246680239/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
28: nobodyさん [sage] 2009/07/23(木) 03:05:07 ID:??? コントローラ テンプレートエンジン本体の各機能を一括して操作する 基本的に、main.cgi経由でのexecuteからの要求を受けて、 スキンを取得しろとかプラグインを実行しろとかタグを置き換えよとか本体に言う コントローラは直接WORDLISTにアクセスできない →executeかpluginを経由すればOK 本体 要求に応えてスキンを取得する 要求に応えてプラグインを実行する 要求に応えてタグを置換する execute内部やplugin内部でのテンプレート処理ではコントローラを呼び出さず、内蔵する つまりexecuteやpluginは本体を直接操作している この辺の関係(メール送信はexecute内部から行われる)でMAILにコントローラは存在しない タグ処理 本体の要求にしたがって各種独自タグの値を返す WORDLIST 単語や文章のリストを取得 たとえば日付表示に使う「年」「月」「日」など テンプレートエンジンの動作は難解 テンプレートエンジンがpluginを呼び出す→pluginはコントローラを内蔵する →つまりテンプレートエンジンは入れ子状あるいはツリー状に繰り返し実行される http://medaka.5ch.io/test/read.cgi/php/1246680239/28
29: nobodyさん [] 2009/07/23(木) 13:45:14 ID:U4ZiCbfG ■ スキン テンプレートエンジンは難解だがスキン側から見ると単純 HTMLに独自タグを使う 部品化されている 基本的に2種類 プラグインタグ pluginを呼び出すタグ →pluginはスキンにて呼び出しを要求するという仕様 テンプレートタグ 各種要素を出力する それぞれに高層中層低層がある <######hoge######> 高層プラグインタグ <#####hoge#####> 中層プラグインタグ <####hoge####> 低層プラグインタグ <###hoge###> 高層テンプレートタグ <##hoge##> 中層テンプレートタグ <#hoge#> 低層テンプレートタグ #が多いほど実行優先順位が高い →必要に応じて優先順位を割り当てられる http://medaka.5ch.io/test/read.cgi/php/1246680239/29
30: nobodyさん [] 2009/07/23(木) 13:47:17 ID:U4ZiCbfG わかりやすく言うと、 プラグインタグはスキン部品呼び出し(そのうえプログラムを実行できる→自由度が高い) テンプレートタグは要素(文字列など)呼び出し(スキン部品の呼び出しやプログラムの実行はできない) どちらにもオプションをつけることができる <####hoge:a:b:e:c####> foreachなどの命令文は一切ない →そのへんはexecuteかpluginにやらせる http://medaka.5ch.io/test/read.cgi/php/1246680239/30
31: nobodyさん [] 2009/07/25(土) 21:54:01 ID:EVQjpFBn >>1です ZENでショップにトロイを仕込まれるトラブルが発生してます。 CSRF脆弱性を突いてアップロードされたそうです。 自動ツールで攻撃されているようで、被害は多数に及んでいるはずです。 大半のショップは問題に気づいていないでしょう。恐ろしいことです。 ttp://zen-cart.jp/bbs/viewtopic.php?f=6&t=4609#p23220 CAFEMILKでは CSRF脆弱性は独自の「実行リクエスト保護多重セッション」によって防止 されている アップロードされたファイルのMIMEタイプを読んで決められたMIMEタイプ のみのアップロードを受け付けている アップロードはアップロードが許可されたディレクトリにしか実施できない アップロードしたファイルには設定で決められた拡張子しかつかない などの入念な対策が講じられています。 http://medaka.5ch.io/test/read.cgi/php/1246680239/31
32: nobodyさん [] 2009/07/25(土) 21:57:17 ID:PUE3LKWG CAFEMILKは、既存の脆弱性についてはすべてについて入念に対応したと 公言しています。 その内容は上に書いたとおりで、なかなかよくやっていると思います。 http://medaka.5ch.io/test/read.cgi/php/1246680239/32
33: nobodyさん [] 2009/07/25(土) 21:59:54 ID:BwZLCaSC すいません 既存の > 既知の でした。 http://medaka.5ch.io/test/read.cgi/php/1246680239/33
34: nobodyさん [sage] 2009/07/25(土) 22:03:07 ID:??? >>1 って作者? http://medaka.5ch.io/test/read.cgi/php/1246680239/34
35: nobodyさん [sage] 2009/07/27(月) 01:31:14 ID:??? CSRFなんて昔は気にされていなかったものだしあとから対応ってことが難しいからここのような後発の製品に強みがあるんだな 一般にショッピングカートと名がついているものの大半はCSRFなんか放置してるだろうに いまCSRFに対する完全な防御を謳っている製品がどんだけあるだろうか http://medaka.5ch.io/test/read.cgi/php/1246680239/35
36: nobodyさん [sage] 2009/07/27(月) 12:43:16 ID:??? ■ サブルーチン(など)のルール サブルーチンの呼び出しは以下のようにして行うとルール化されている [呼び出す側] パッケージ名::サブルーチン名 ({ config => $config, userdata => $userdata, log_error => $log_error, log_alert => $log_alert, status => $status, そのたの情報 }); [呼び出される側] sub サブルーチン名 { my $argument = shift; my $config = $argument->{config}; my $userdata = $argument->{userdata}; my $log_error = $argument->{log_error}; my $log_alert = $argument->{log_alert}; my $status = $argument->{status}; 上記のルールを守ることにより、設定や各種の重要な情報を常に保持することができる http://medaka.5ch.io/test/read.cgi/php/1246680239/36
37: nobodyさん [sage] 2009/07/27(月) 12:45:24 ID:??? オブジェクト方式についてもだいたい同様 [例] my $database = Cafemilk_database_log->connect ({ config => $config, userdata => $userdata, log_error => $log_error, log_alert => $log_alert, status => $status, column_filename => 'database/item_column_list.csv', column_separator => ',', database_filename => 'database/item_news', database_separator => ',', record_stack => $config->{database}{session_stack}{item}{news}, }); $database->postscript(\%record); undef $database; マニュアルにもうすこし詳しい情報があるので参照。 http://medaka.5ch.io/test/read.cgi/php/1246680239/37
38: nobodyさん [sage] 2009/07/27(月) 12:47:23 ID:??? ルールの意味をわかりやすく説明するサンプルコード my $userdata = {}; $userdata->{test} = 1; ← ? 格納した情報を require 'test.pl' Test::testsub ({ config => $config, userdata => $userdata, log_error => $log_error, log_alert => $log_alert, status => $status, }); print $userdata->{test}; ← 出力は 2 ? サブルーチン内で書き換えた内容がちゃんと保持されている exit; sub test { my $argument = shift; my $config = $argument->{config}; my $userdata = $argument->{userdata}; ← ? サブルーチン内のローカル変数に格納して my $log_error = $argument->{log_error}; my $log_alert = $argument->{log_alert}; my $status = $argument->{status}; $userdata->{test} = 2; ← ? 書き換えているが } http://medaka.5ch.io/test/read.cgi/php/1246680239/38
39: nobodyさん [sage] 2009/07/27(月) 12:57:27 ID:??? ■ CGIモジュール モジュールCGI.pmは以下のようにして呼び出される $userdata->{cgi_query} = CGI->new(); こうすることでCGIオブジェクトはdieしなくなるので、どこからでも呼び出して利用できる (CGI.pmはフォーム関連の環境変数を消してしまうので2度のuseができない) [例] my @param_list = $userdata->{cgi_query}->param(); http://medaka.5ch.io/test/read.cgi/php/1246680239/39
40: nobodyさん [sage] 2009/07/27(月) 13:01:32 ID:??? >>38の訂正 ちょっとだけ require 'test.pl' > require 'test.pl'; sub test > sub testsub http://medaka.5ch.io/test/read.cgi/php/1246680239/40
41: nobodyさん [sage] 2009/07/27(月) 13:04:51 ID:??? >>39 ちょっとだけ 2度のuse > 2度のnew http://medaka.5ch.io/test/read.cgi/php/1246680239/41
42: nobodyさん [sage] 2009/07/27(月) 20:55:02 ID:??? このスレの書き込み、なにがしたいんだ? http://medaka.5ch.io/test/read.cgi/php/1246680239/42
43: nobodyさん [sage] 2009/07/28(火) 00:49:04 ID:??? 誰かがプログラム解析して情報載せてるんだろ どこかwikiでも紹介したらそちらに行くんじゃ? http://medaka.5ch.io/test/read.cgi/php/1246680239/43
44: nobodyさん [sage] 2009/07/28(火) 01:10:47 ID:??? ここはWEBプログラミング板だったよな http://medaka.5ch.io/test/read.cgi/php/1246680239/44
45: nobodyさん [sage] 2009/07/28(火) 18:06:54 ID:??? ■ データベース 独自のモジュールを使う CSV形式 エクセルに対応してるらしい カラム名を指定して操作する 2種類 通常 商品や会員などを扱う ログ レコードの操作があまりできない 読込と追記専門 ローテーションする → 古いレコードは消えていく データベース操作の方法が特殊で、SQLインジェクションのような脆弱性は考えにくい http://medaka.5ch.io/test/read.cgi/php/1246680239/45
46: nobodyさん [sage] 2009/07/28(火) 18:08:15 ID:??? 基本的な使い方 my $database = Cafemilk_database_basic->connect ← オブジェクト方式connectで呼び出す ({ config => $config, userdata => $userdata, log_error => $log_error, log_alert => $log_alert, status => $status, column_filename => 'database/item_column_list.csv', ← カラム名の情報 column_separator => ',', database_filename => 'database/item.csv.cgi', ← データベース本体 database_separator => ',', database_mode => '+<', database_flock => $flock, ← ファイルロックはFLOCK }); $database->get_record_all(); ← データベースの情報をすべて取得(予約) my @lines = $database->get_extract_database(); ← 取得(予約)した情報を取り出し このへんにいろいろと処理 undef $database; ← 終了 http://medaka.5ch.io/test/read.cgi/php/1246680239/46
47: nobodyさん [sage] 2009/07/28(火) 18:15:04 ID:??? レコードのマッチングをしたいとき $database->get_record_all(); $database->match_database ({ column_name => 'カラム名', match_word => '値', }); my @lines = $database->get_extract_database(); レコードのサーチをしたいとき $database->get_record_all(); my @columns = ( "サーチしたいカラム1", "サーチしたいカラム2", "サーチしたいカラム3", ); $database->search_database ({ search_column => \@columns, ← 複数のカラムをまたがって検索できる search_words => $words, ← 半角スペースで区切って複数語検索が可能 character_mode => '1', ← 大文字小文字の区別をしない場合 }); my @lines = $database->get_extract_database(); http://medaka.5ch.io/test/read.cgi/php/1246680239/47
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 66 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.011s