【V5計画】CAFEMILK SHOPPING CART V5

1nobodyさん
垢版 |
2009/07/04(土) 13:03:59ID:20ztUasx
柔軟性の高いテンプレートとプラグインで高度なネットショップが比較的安価に構築できる
CAFEMILK SHOPPING CART V5 について。

○ 公式
http://cafemilk.milkcafe.to/
サンプル
http://cafemilk.milkcafe.to/v5s001/main

○ 価格
購入 50,000円
リース 1,000円/月 10,000円/年
OEMによる二次販売のプランあり

カスタマイズパッケージプラン 300,000円
30万円で50万円までのカスタマイズ作業を行うというお得なプラン。ただし先払い。
2nobodyさん
垢版 |
2009/07/04(土) 13:04:40ID:20ztUasx
○ 動作環境
Perl5.8以降
Image::Magick推奨
sendmail
DBは必要なし (CSVを使う)

○ 特徴
プラグイン&スキン
マルチ端末マルチ言語

会員機能
ポイント発行
伝票発行
メール配信
関連商品
ブログパーツ
簡易ブログ
……など

参考
http://cafemilk.milkcafe.to/v5information.html
3nobodyさん
垢版 |
2009/07/04(土) 13:05:49ID:20ztUasx
○ スキン
部品化されている (スキンの数が多い)
独自タグを使用
詳細は
http://cafemilk.milkcafe.to/v5skin.html

○ プラグイン
execute型とplugin型に分かれている

execute型
リクエストに応じて実行処理とスキン呼び出しとpluginの実行を行う
plugin型
executeの要求に応じて実行処理とスキン呼び出しとpluginの実行を行う (→plugin型は繰り返し呼び出せる)

○ データベース
エクセル対応形式カンマ区切りCSV (文字コードはUTF-8)
CSVだがカラム名を指定して運用できる仕組み
4nobodyさん
垢版 |
2009/07/04(土) 13:07:35ID:20ztUasx
○ 管理画面
管理者の権限を設定できる
(たとえば商品登録の権限を持つ者は個人情報に一切アクセスできないというように)

管理者掲示板(マルチカテゴリマルチスレッド)
管理者管理
ショップ管理
顧客管理
 会員機能
 ポイント機能
 メール配信
 各種伝票の印刷
商品管理
ブログ管理
5nobodyさん
垢版 |
2009/07/04(土) 13:09:01ID:20ztUasx
○ その他
掲示板
http://cafemilk.milkcafe.to/v5forum/wforum.cgi

CAFEMILK ショッピングカート CGI におけるクロスサイトスクリプティングの脆弱性
http://jvn.jp/jp/JVN78363061/index.html

以上
6nobodyさん
垢版 |
2009/07/04(土) 16:14:10ID:+jHLTsUP
> ○ 価格
> 購入 50,000円

安いの?
7nobodyさん
垢版 |
2009/07/04(土) 17:49:40ID:q37Gl+Xz
>>6
大手よりはかなり安い

EC-CUBE
252,000円
ttp://www.ec-cube.net/license/business.php

ONE/DEPO
787,500円
ttp://www.onedepo.jp/commercial.html

比較の対象が間違ってるかもしれないけどね。
低価格な分、やはり機能的にはいろいろと差があるんじゃないかと。
8nobodyさん
垢版 |
2009/07/06(月) 22:41:38ID:zLo2/6FQ
共用鯖で使う分には手間が省けていいんじゃないの
2009/07/07(火) 11:39:19ID:???
サプルショップがダサいから誰も利用しない。
10nobodyさん
垢版 |
2009/07/08(水) 12:39:50ID:eYgONTUf
見た瞬間萎えるな

よいもの作ったのなら見せ方も考えないと
ちょっと手を加えれば大化けするだろうに
2009/07/10(金) 18:14:25ID:???
悪い方に化けるんだろ
2009/07/11(土) 13:10:02ID:???
どこかの表を参考につくってみた。
やっつけなので無責任・無保証。

CUBE/Zen/OSC/CAFEMILK

○○○○ テンプレート
○×△△ モバイル
○××○ ニュース・新着情報
○×△○ ゲスト購入
×○○○ 複数言語対応
△○○○ ぱんくず表示
×××× カレンダー
○××○ 会員退会
○××○ 郵便番号による自動住所入力
×××○ FAQ
○××× アンケート
××△× Wishlist
×○○× 友達に教える
×××× 複数配送先指定
2009/07/11(土) 13:12:01ID:???
CUBE/Zen/OSC/CAFEMILK

×○×× ダウンロード販売
×○×○ 商品タイプ別設定
○○×○ 商品属性別在庫管理
○××○ 関連商品
△○○○ 新着商品
△○○× 入荷予定商品
×××× 参照履歴/最近見た商品
△××△ 商品画像拡大
○○△× 売れ筋ランキング・ベストセラー
○○△× おすすめ商品
○○○× 特価商品・セール
○○○× 商品レビュー
2009/07/11(土) 13:14:18ID:???
CUBE/Zen/OSC/CAFEMILK

△×△○ SEO・静的URL
○××× RSS機能
○××× トラックバック
×××× お気に入り登録/ブックマーク
○×△○ ポイント
×××× プレゼント
×○○× 「この商品を買った人はこの商品も買っています」のリコメンド機能
×△×△ アフィリエイト
×○×× クーポン・ギフト券

○×△× 商品一括登録
○×△× 注文管理・注文検索
○×△○ 顧客管理・顧客検索
○×△○ メールテンプレート・予約配信
○○○× レポート・売上集計
×○○× バナー広告管理機能
15nobodyさん
垢版 |
2009/07/11(土) 22:08:12ID:i2nacIrD
CAFEMILK省いてDEPO入れたら表が完成するな
2009/07/15(水) 22:12:30ID:???
何か追加したいと思ったときは、なんでもプラグインという仕様のおかけで作業が簡単だと思った。
しかしコーディングになんか癖があると思うのはオレだけだろうか?
すでにできあがっているものを変えようなどと思うとちょっと書き換えがしにくい。

2009/07/16(木) 02:04:40ID:???
if文とか変だよな
18nobodyさん
垢版 |
2009/07/16(木) 11:59:20ID:a1UEBT29
慣れればいいんじゃないか
こっちのほうが楽かもしれないし

普通
if (なんとかかんとか) {
ああしたこうした
} else {
にょろ〜ん
}

CAFEMILK
if (なんとかかんとか)
  {
  ああしたこうした
  }
else
  {
  にょろ〜ん
  }
2009/07/19(日) 04:46:05ID:???
これがショッピングカート?
どう見てもECパッケージですが。
20nobodyさん
垢版 |
2009/07/20(月) 11:38:57ID:dO1TPAcY
2009.07.20 V5.1.4がリリースされました。
2009/07/20(月) 18:49:41ID:???
■ 簡易導入法

1.だうんろーど
本体
http://cafemilk.milkcafe.to/v5get.html
AJAXZIP2
http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html

2.ふぁいる統合作業
設置ディレクトリ作成
設置ディレクトリに「cgi-bin」内ファイルをコピー
設置ディレクトリに「統合ファイル」内ファイルをコピー
設置ディレクトリにディレクトリ「shop」を作成
ディレクトリ「shop」に「public_html」内ファイルをコピー
ディレクトリ「ajaxzip2」にAJAXZIP2をコピー
2009/07/20(月) 18:53:27ID:???
3.せってい
config_common.plを開いて以下の値を編集
$config->{path}{cgi_to_html} = 'http://example.jp/shop/'; # home/shop URLパス
$config->{path}{cgi_to_file} = './shop/'; # home/shop # home/shop サーバ内相対パス
$config->{url}{root} = 'http://example.jp/'; # home URLパス
$config->{url}{sslroot} = 'https://example.jp/'; # home URLパス
$config->{url}{imageroot} = 'https://example.jp/shop/'; # home/shop URLパス
main.cgiとrf.cgiのPERLのパスを書き換える

4.どうさかくにん
https://example.jp/main.cgiにアクセス
起動したらOK
2009/07/20(月) 18:57:26ID:???
5.あかうんとさくせい
main.cgi?execute=admin_gateにアクセス
administer : administer でログイン
新規に管理者管理権限を持つアカウントを作成
ログアウト
新しいアカウントでログイン
administerアカウントを削除

6.ちゅういてん
バージョンアップの際にすべてのファイルを上書きすると
設定が初期値に戻り、
商品や会員などのデータベースが消えてしまうので注意。
2009/07/20(月) 19:03:16ID:???
7.そのた
スキン制作やカスタマイズ時にはかならず以下の作業を行う。(重要)
main.cgiのuse CGI::Carp qw(fatalsToBrowser);のコメントをはずす。
config_basic.plの以下の設定値を全部1にする。
$config->{sendmail}{notice}{error} = '0'; # 0 ONLY
$config->{sendmail}{notice}{alert} = '0'; # 0 ONLY
$config->{test}{show_log_error} = '0'; # 0 ONLY
$config->{test}{show_log_alert} = '0'; # 0 ONLY
これで各種エラーの報告が出るようになります。
ただし運用時には戻しておくこと。
2009/07/20(月) 20:06:41ID:???
>>22
>$config->{url}{sslroot} = 'https://example.jp/'; # home URLパス
SSL対応なの?安いのが売りなら共有SSLも当然対応?
2009/07/22(水) 21:12:47ID:???
■ コントローラ (main.cgi)

(MVCのCをmain.cgiが担う)
フォーム等のリクエストはすべてmain.cgi宛てとなる

[main.cgiの仕事]
クッキーの読み込み
 セッションの処理
  自己診断 内容に不正があれば排除等の処理
リクエストの取得
 自己診断 内容に不正があれば排除等の処理
 ログイン・ログアウト要求があれば処理
 リクエストにしたがってexecuteを発行
execute(execute型プラグイン)へexecuteの自己診断を依頼 (execute実行1/3) (executeはMVCのM(モデル))
 自己診断が問題を発見した場合はその内容にしたがってexecuteの差し替えを行う
executeへ実行を依頼 (executeの実行2/3)
 データベースなどいろいろ処理
テンプレートエンジンへウェブ出力作成を依頼 (テンプレートエンジンMVCのV(ビュー))
 pulugin(pulugin型プラグイン)実行要求があればプラグインを実行
  puluginもデータベースなどいろいろ処理
executeへ終了処理を依頼 (executeの実行3/3)
クッキーの発行
ウェブ出力の発行
終了

コントローラの作りはなかなかシンプル
やたらと自己診断を行う
→不正内容と判断されたものはだいたい消去される
→独自に入力欄などを作成してもその入力内容が消されたりするので注意
→消されるリクエストは設定にて許可を行う必要がある
2009/07/23(木) 03:01:50ID:???
■ テンプレートエンジン

基本的に3種類
HTMLテンプレートエンジン
 コントローラ (cafemilk_template_html.pl)
 本体 (cafemilk_skin_html.pl)
 タグ処理 (cafemilk_tag_html.pl)
MAILテンプレートエンジン
 本体 (cafemilk_skin_mail.pl)
 タグ処理 (cafemilk_tag_mail.pl)
WORDLIST
 ワードリスト取得
2009/07/23(木) 03:05:07ID:???
コントローラ
 テンプレートエンジン本体の各機能を一括して操作する
 基本的に、main.cgi経由でのexecuteからの要求を受けて、
  スキンを取得しろとかプラグインを実行しろとかタグを置き換えよとか本体に言う
 コントローラは直接WORDLISTにアクセスできない
  →executeかpluginを経由すればOK
本体
 要求に応えてスキンを取得する
 要求に応えてプラグインを実行する
 要求に応えてタグを置換する
 execute内部やplugin内部でのテンプレート処理ではコントローラを呼び出さず、内蔵する
  つまりexecuteやpluginは本体を直接操作している
   この辺の関係(メール送信はexecute内部から行われる)でMAILにコントローラは存在しない
タグ処理
 本体の要求にしたがって各種独自タグの値を返す
WORDLIST
 単語や文章のリストを取得
  たとえば日付表示に使う「年」「月」「日」など

テンプレートエンジンの動作は難解
テンプレートエンジンがpluginを呼び出す→pluginはコントローラを内蔵する
→つまりテンプレートエンジンは入れ子状あるいはツリー状に繰り返し実行される
29nobodyさん
垢版 |
2009/07/23(木) 13:45:14ID:U4ZiCbfG
■ スキン

テンプレートエンジンは難解だがスキン側から見ると単純

HTMLに独自タグを使う
部品化されている

基本的に2種類
プラグインタグ
 pluginを呼び出すタグ
 →pluginはスキンにて呼び出しを要求するという仕様
テンプレートタグ
 各種要素を出力する

それぞれに高層中層低層がある
<######hoge######> 高層プラグインタグ
<#####hoge#####> 中層プラグインタグ
<####hoge####> 低層プラグインタグ
<###hoge###> 高層テンプレートタグ
<##hoge##> 中層テンプレートタグ
<#hoge#> 低層テンプレートタグ
#が多いほど実行優先順位が高い
→必要に応じて優先順位を割り当てられる
30nobodyさん
垢版 |
2009/07/23(木) 13:47:17ID:U4ZiCbfG
わかりやすく言うと、
プラグインタグはスキン部品呼び出し(そのうえプログラムを実行できる→自由度が高い)
テンプレートタグは要素(文字列など)呼び出し(スキン部品の呼び出しやプログラムの実行はできない)

どちらにもオプションをつけることができる
<####hoge:a:b:e:c####>

foreachなどの命令文は一切ない
→そのへんはexecuteかpluginにやらせる
31nobodyさん
垢版 |
2009/07/25(土) 21:54:01ID:EVQjpFBn
>>1です

ZENでショップにトロイを仕込まれるトラブルが発生してます。
CSRF脆弱性を突いてアップロードされたそうです。
自動ツールで攻撃されているようで、被害は多数に及んでいるはずです。
大半のショップは問題に気づいていないでしょう。恐ろしいことです。
ttp://zen-cart.jp/bbs/viewtopic.php?f=6&t=4609#p23220

CAFEMILKでは
CSRF脆弱性は独自の「実行リクエスト保護多重セッション」によって防止
されている
アップロードされたファイルのMIMEタイプを読んで決められたMIMEタイプ
のみのアップロードを受け付けている
アップロードはアップロードが許可されたディレクトリにしか実施できない
アップロードしたファイルには設定で決められた拡張子しかつかない
などの入念な対策が講じられています。
32nobodyさん
垢版 |
2009/07/25(土) 21:57:17ID:PUE3LKWG
CAFEMILKは、既存の脆弱性についてはすべてについて入念に対応したと
公言しています。
その内容は上に書いたとおりで、なかなかよくやっていると思います。
33nobodyさん
垢版 |
2009/07/25(土) 21:59:54ID:BwZLCaSC
すいません
既存の > 既知の
でした。
2009/07/25(土) 22:03:07ID:???
>>1 って作者?
2009/07/27(月) 01:31:14ID:???
CSRFなんて昔は気にされていなかったものだしあとから対応ってことが難しいからここのような後発の製品に強みがあるんだな
一般にショッピングカートと名がついているものの大半はCSRFなんか放置してるだろうに
いまCSRFに対する完全な防御を謳っている製品がどんだけあるだろうか
2009/07/27(月) 12:43:16ID:???
■ サブルーチン(など)のルール

サブルーチンの呼び出しは以下のようにして行うとルール化されている

[呼び出す側]
パッケージ名::サブルーチン名
 ({
 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};

上記のルールを守ることにより、設定や各種の重要な情報を常に保持することができる
2009/07/27(月) 12:45:24ID:???
オブジェクト方式についてもだいたい同様

[例]
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;

マニュアルにもうすこし詳しい情報があるので参照。
レスを投稿する