らくだ屋/里々から華和梨への移行ガイド・ミドルウェア使わない編
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
-華和梨 8.2.8 系
#br
#contents
#br
*実際に華和梨でゴーストを作る [#ea398e76]
-実戦
**ミドルウェアってなんぞ [#r2795b0a]
-華和梨のマニュアルや関連した解説サイトではよく「ミドルウ...
-里々でいう「ポストと狛犬」のような、テンプレートゴースト...
--個人的な印象では
---&color(blue){テンプレート/改造すればすぐにゴーストが...
---&color(blue){ミドルウェア/豪華な機能を持つ。テンプレ...
--という感じ
-ミドルウェアの機能も思いつく限り列挙
--単語フレームワーク
--セキュリティ面
--古いバージョンの華和梨との互換性
--ゴースト制作のフォーマット(基礎イベントの他、多重人格...
#br
**で、ミドルウェアやテンプレートを使うべき? [#a0ae17a3]
-ここまでの基礎知識があればミドルウェアやテンプレートの改...
-&color(green){使う};
--○
---表記ルールさえ覚えていればゴースト制作にすぐ入れる
---必要なイベントが既に用意されているので、かかる時間を短...
---セキュリティを受け持ってくれるので安心
--×
---堅牢な構成が逆に発想実現の足を引っ張る
---それぞれに書式ルールがあり、新たなイベントを実装するの...
-&color(green){使わない};
--○
---やりたい事だけを選んで気軽にできる。イベントの追加も楽
---辞書構成の把握が容易になり、ファイル構成がすっきりする
---作りたいものがあるのなら目的に向かって一直線に作れる
--×
---セーブロードや各種イベントの実装など全部自分で作る労力
---危険性・セキュリティについては勉強が必要
---自由すぎて何を作ればいいかわからん
作りたいゴーストが、独自の機能を実装するなど、一般的なゴ...
#br
*ミドルウェアやテンプレートを使わないやり方 [#pf1383d6]
とりあえず華和梨を使ってみたい・慣れておきたいという方は...
-詳しい&優しい制作手順は[[なごやか。 - かわりちゃんを、...
#br
**準備 [#e050bab9]
-これまで作った事のある里々ゴーストなどから、シェルを流用...
-ゴーストフォルダは以下の2つのファイルが必要
--&color(red){shiori.dll};
--&color(red){kawarirc.kis};
#br
***shiori.dll / 華和梨本体 [#v14e573e]
-これがなければ始まらない
-descript.txtを里々から流用しているのなら、栞指定の記述を...
--× shiori,satori.dll
--○ shiori,shiori.dll
#br
***kawarirc.kis / 華和梨の設定ファイル、というか最初に読...
-華和梨が最初に読み込む辞書ファイル。実態はテキストファイ...
-起動時に最初に読み込む唯一のファイルなので、他の辞書ファ...
#br
**全てを決定付ける最初のイベント [#kbd8eb95]
-華和梨で処理するあらゆるイベントは、必ず System.Callback...
-これだけだと何がなんだか分からないので例
System.Callback.OnGET : ${${System.Request.ID}}
System.Callback.OnGET : $(entry ${System.Request.ID})
-どちらも同じ意味
-挙動としては、''&color(red){エントリ${System.Request.ID}...
-つまりSSPから
--「ユーザからあんたに起動指示が出たよ」→OnBootイベント発信
--「ユーザからあんたに終了指示が出たよ」→OnCloseイベント...
-という風におしらせが来るので、それに対応するように該当エ...
#br
-順番に考える
-もし実際に OnBoot が来た場合、${System.Request.ID} が On...
System.Callback.OnGET : ${OnBoot}
System.Callback.OnGET : $(entry OnBoot)
-すなわち''&color(blue){OnBootが通知されると、「OnBootエ...
-よって、以下のような記述例を実際に使えるようにするために...
-当然、これを弄るとイベントに呼び出すエントリ名を自分流に...
OnBoot : ${起動}
起動 : \0\s[0]ちゃす。\e
#br
**書き込んでみよう [#c3625457]
-kawarirc.kisをメモ帳などのテキストエディタで編集しよう
System.Callback.OnGET : $(entry ${System.Request.ID})
System.Callback.OnNOTIFY : $(entry ${System.Request.ID})
OnBoot : \1\s[10]\0\s[0]やあ。\w9\w9\e
OnClose : \1\s[10]\0\s[0]うい。\w9\w9\-
-System.Callback.OnNOTIFY はnotifyイベントが来る
-筆者もよく分かってないものの、一部のイベントはこのOnNOTI...
#br
**全部kawarirc.kisに書くの? [#q6d3bb70]
-別のファイルを作って記述していくなどして、好きなように別...
-&color(red){作ったファイルはkawaricrc.iniの中で、kisのlo...
-loadコマンドは、華和梨辞書としてファイルを読み込むkisな...
-以下例示
=kis
# 華和梨辞書
load dic01_Base.txt ;
load dic02_Event.txt ;
# さおり
saoriregist mciaudior.dll mciaudior preload ;
saoriregist httpc.dll httpc preload ;
=end
- =kis ~ =end でくくられた妙な記法は、&color(red){kisを...
-その性質から言って kawarirc.kis 以外で使う機会は滅多にな...
#br
-余談として、セミコロン【;】は通常の $() でkisを使う時に...
-loop系などを見やすくしたい時に使われる事が多いだけで必須...
設定する : $( setstr フラグ "ふつう")$(
setstr 満腹度 "100")$( setstr モード "" )
これを
設定する : $(setstr フラグ "ふつう" ;
setstr 満腹度 "100" ;
setstr モード "" )
-と書いたりできる
-半角スペースで区切るところなんかはほぼ改行使い放題
#br
**全イベントに対応すべき? [#h7c59d93]
必ずしも全てのイベントに対応する必要は「ない」。知らない...
-ただし、最低限、以下のものだけは必ず用意すべき
--&color(blue){OnFirstBoot}; ... 初回起動時
--&color(blue){OnBoot}; ... 起動時
--&color(blue){OnGhostChanged}; ... 切り替わって起動した時
--&color(blue){OnWindowStateRestore}; ... 最小化から復帰
---これらはサーフィスの表示くらいは定義しておかないと困っ...
---理由が分からない人は、里々の「*最小化から復帰」をから...
--&color(blue){OnClose}; ... 終了時
---終わりには必ず \- (終了するさくらスクリプト)が必要、...
--&color(blue){OnChoiceSelect}; ... 選択肢がクリックされ...
---里々は自動でジャンプしてくれたけどこっちは手動で作る必...
---といっても以下のように書くだけ
OnChoiceSelect : $(entry ${R0})\e
リファレンス0には、\q[~,~]で作ったIDが入っているので、...
最後に \e をつけているのはどこかで \e を書き忘れた時のた...
#br
**kawarirc.kisに書く事をまとめて突っ込む [#x6b76daf]
-resourceも当然System.Callbackを通ってやってくるので、Dis...
-例としてネットワーク更新用のURLは「homeurl」というIDで来る
-よって、homeurlエントリを作ってそこにURLを書けばOK
System.Callback.OnGET : $(entry ${System.Request.ID})
System.Callback.OnNOTIFY : $(entry ${System.Request.ID})
=kis
# 華和梨辞書。自分の好きな辞書ファイルを作り、登録しま...
load dic01_Base.txt ;
load dic02_Event.txt ;
=end
R0 : ${System.Request.Reference0}
R1 : ${System.Request.Reference1}
R2 : ${System.Request.Reference2}
R3 : ${System.Request.Reference3}
R4 : ${System.Request.Reference4}
R5 : ${System.Request.Reference5}
R6 : ${System.Request.Reference6}
R7 : ${System.Request.Reference7}
R8 : ${System.Request.Reference8}
R9 : ${System.Request.Reference9}
OnChoiceSelect : $(entry ${R0})\e
homeurl : "http://~"
OnBoot : \1\s[10]\0\s[0]やあ。\w9\w9\e
OnClose : \1\s[10]\0\s[0]うい。\w9\w9\-
-イベントとかのリファレンスに対応しやすいように、R0から...
-便利だと思いませんか
-どうせ好きな辞書ファイルを作って登録できるんで、OnBootや...
#br
*descript.txtに書いておくおまじない [#a763e3dc]
shiori.cache,0
-SSPのキャッシュ機能をOFFにする
-ミドルウェアやテンプレートを使わず、自前で作る場合、もし...
-これについては別のところでいずれ
#br
*華和梨・自作におけるセキュリティ施工 [#e4ae757d]
-華和梨に慣れてきたら考えておきたいセキュリティの話
-慣れるまで触れなくていいよ!
-[[華和梨Phase 8 Tips集 - 華和梨Phase 8とセキュリティ:htt...
//元URL、現在消失 http://shobu.hp.infoseek.co.jp/column.h...
-これは華和梨に限った話ではなく、様々な栞が該当
#br
**概説 [#l48302bb]
上のURLから要点を抜粋
-悪意ある攻撃スクリプト、例えばreference値にさくらスクリ...
-&color(blue){1.setコマンド等で${System.Request.Reference...
--setstrやpushstrなど「str」のついた、文字列として扱うコ...
-&color(blue){2.debuggerコマンドでonを指定したものを外し...
--配布用アーカイブではonにしたままにしないようにする
--debuggerコマンドを使っていない場合は問題なし
-&color(blue){3.大事なエントリは保護しておく};
--万が一に備え、writeprotectコマンドを使ってエントリの変...
---各種栞イベント全部
---各種resource全部(特に重要なのはネットワーク更新URLで...
---各種notifyイベント全部
-&color(blue){4.危険なさくらスクリプトタグを通さない};
--${System.Request.Reference*}をすぐに参照せず、内容を先...
#br
以下、順番に、具体的なセキュリティの施工方法
#br
***1.setコマンド等で${System.Request.Reference*}の内容を...
-略
#br
***2.debuggerコマンドでonを指定したものを外しておく [#hda...
-略
#br
***3.大事なエントリは保護しておく [#m73cba3e]
-writeprotectコマンドを使ってエントリの変更を禁止
-保護すべきエントリは究極的には「変数でない、起動中に変更...
-つーても一つ一つに全てかける事は大変な手間なわけで、いち...
-よって、さっくり楽に全部保護するためにエントリの書き方を...
#br
-準備。これまで使っていたkawarirc.kisのSystem.Callbackの...
# 横に長くなるのを防ぐため可能な限り改行してますが1行に...
System.Callback.OnGET : $(
setstr @temp ${System.Request.ID} ;
entry "event."${@temp} $(
entry "resource."${@temp})
)
System.Callback.OnNOTIFY : $(
setstr @temp ${System.Request.ID} ;
entry "notify."${@temp}
)
上のを順番に追ってみると…
-&color(blue){System.Callback.OnGETエントリ};
--まず@tempエントリに${System.Request.ID}、=イベント名な...
--次に【event.イベント名】というエントリを呼ぶ
--存在しない(又は中身が空)の場合は代わりに【resource.イ...
--これも存在しなければ無視
-&color(blue){System.Callback.OnNOTIFYエントリ};
--まず@tempエントリに${System.Request.ID}、つまりイベント...
--次に【notify.イベント名】というエントリを呼ぶ
--存在しなければ無視
具体例を挙げると、「OnBoot」が通知された際、【event.OnBoo...
これまではイベント名そのままのエントリ名を参照していたの...
頭にevent.とかついたエントリ名へ書き換えなければならない
#br
-このようにしたら解説ページのソースをまるごとコピー
#kawarirc.kisの最後に、以下を追加する
=kis
listtree @ToProtect System.Callback;
listtree @ToProtect event;
listtree @ToProtect resource;
listtree @ToProtect notify;
foreach @i @ToProtect $(writeprotect ${@i});
=end
-上の動作をぶっちゃけると、
--&color(blue){System.Callback.で始まるエントリ名};
--&color(blue){event.で始まるエントリ名};
--&color(blue){resource.で始まるエントリ名};
--&color(blue){notify.で始まるエントリ名};
-以上のエントリを&color(red){一気にすべて保護する};、とい...
-どうでもいいけど System.Callback.系のエントリを上のよう...
-気になる人は全イベント列挙するなり。。。でも手間ばかりか...
#br
***4.危険なさくらスクリプトタグを通さない [#h20fd5bd]
-ちょっと長いけど解説ページのソースをそのまま辞書のどこか...
=kis
# 外部SSTPに存在した場合、危険なタグを無害化
# 第1引数: 文字列
# 戻り値: タグを無害化した文字列
function KillDangerousTag $(
if $[ $(size @arg) != 2 ] $(return);
setstr @string $@arg[1];
foreach @tag kp.dangeroustag $(
# 無害化したタグを生成
setstr @killedtag " _"$(substr ${@tag} 2);
setstr @pos $(match ${@string} ${@tag});
# 危険タグが存在したら、無害化したタグに置換
if $[ ${@pos} != -1 ] $(
setstr @string $(gsub ${@string} ${@tag} ${@killedtag});
);
);
return ${@string};
);
=end
# KillDangerousTag内部で参照している危険なタグのリスト
# 必ず2文字以上からなるタグを書くこと
kp.dangeroustag (
"\\![updatebymyself]",
"\\![vanishbymyself]",
"\\![enter,passivemode]",
"\\![leave,passivemode]",
"\\![lock,repaint]",
"\\![unlock,repaint]",
"\\![biff]",
"\\![open,browser",
"\\![open,mailer",
"\\![raise",
"\\j["
)
# タグリストが消されて無効化されないよう、エントリを保護
=kis
writeprotect kp.dangeroustag;
=end
=kis
# Reference*参照
# 第1引数: Reference番号
# 戻り値: Reference*の内容
function Reference $(get System.Request.Reference$@arg[1...
# 危険なさくらスクリプトタグを無害化した上でReference*参照
# 第1引数: Reference番号
# 戻り値: 危険なさくらスクリプトタグをを無害化したRefer...
function SReference $(KillDangerousTag $(Reference $@arg...
=end
-貼り付けたら、以後、&color(blue){${System.Request.Refere...
event.OnCommunicate : (
\1\s[10]
\0\s[0]
$(SReference 0)が何か言ってるね。\w8\w8\n
とりあえず無視しておこっと。\w8\w8
\1危なそうだしな。\w8\w8
\e
)
-解説ページにある例だとこう。でもここまでのゴースト制作に...
R0 : $(SReference 0)
R1 : $(SReference 1)
R2 : $(SReference 2)
R3 : $(SReference 3)
R4 : $(SReference 4)
R5 : $(SReference 5)
R6 : $(SReference 6)
R7 : $(SReference 7)
R8 : $(SReference 8)
R9 : $(SReference 9)
-こうしておけばセキュリティ施工済みのリファレンス値を${R...
-華和梨って便利だと思わんかね
#br
*kawarirc.kisに書くこと最終まとめ例 [#v84d0103]
-長いので別の辞書にしてloadしても良い
-ただし、エントリ保護だけはkawarirc.kisの最後に書くか、エ...
System.Callback.OnGET : $(
setstr @temp ${System.Request.ID} ;
entry "event."${@temp} $(
entry "resource."${@temp})
)
System.Callback.OnNOTIFY : $(
setstr @temp ${System.Request.ID} ;
entry "notify."${@temp}
)
=kis
# 華和梨辞書。自分の好きな辞書ファイルを作り、登録しま...
load dic01_Base.txt ;
load dic02_Event.txt ;
=end
R0 : $(SReference 0)
R1 : $(SReference 1)
R2 : $(SReference 2)
R3 : $(SReference 3)
R4 : $(SReference 4)
R5 : $(SReference 5)
R6 : $(SReference 6)
R7 : $(SReference 7)
R8 : $(SReference 8)
R9 : $(SReference 9)
resource.homeurl : "http://~"
event.OnChoiceSelect : $(entry ${R0})\e
event.OnBoot : \1\s[10]\0\s[0]やあ。\w9\w9\e
event.OnClose : \1\s[10]\0\s[0]うい。\w9\w9\-
=kis
# 外部SSTPに存在した場合、危険なタグを無害化
# 第1引数: 文字列
# 戻り値: タグを無害化した文字列
function KillDangerousTag $(
if $[ $(size @arg) != 2 ] $(return);
setstr @string $@arg[1];
foreach @tag kp.dangeroustag $(
# 無害化したタグを生成
setstr @killedtag " _"$(substr ${@tag} 2);
setstr @pos $(match ${@string} ${@tag});
# 危険タグが存在したら、無害化したタグに置換
if $[ ${@pos} != -1 ] $(
setstr @string $(gsub ${@string} ${@tag} ${@killedtag});
);
);
return ${@string};
);
=end
# KillDangerousTag内部で参照している危険なタグのリスト
# 必ず2文字以上からなるタグを書くこと
kp.dangeroustag (
"\\![updatebymyself]",
"\\![vanishbymyself]",
"\\![enter,passivemode]",
"\\![leave,passivemode]",
"\\![lock,repaint]",
"\\![unlock,repaint]",
"\\![biff]",
"\\![open,browser",
"\\![open,mailer",
"\\![raise",
"\\j["
)
# タグリストが消されて無効化されないよう、エントリを保護
=kis
writeprotect kp.dangeroustag;
=end
=kis
# Reference*参照
# 第1引数: Reference番号
# 戻り値: Reference*の内容
function Reference $(get System.Request.Reference$@arg[1...
# 危険なさくらスクリプトタグを無害化した上でReference*参照
# 第1引数: Reference番号
# 戻り値: 危険なさくらスクリプトタグをを無害化したRefer...
function SReference $(KillDangerousTag $(Reference $@arg...
=end
#kawarirc.kisの最後に、以下を追加する
=kis
listtree @ToProtect System.Callback;
listtree @ToProtect event;
listtree @ToProtect resource;
listtree @ToProtect notify;
foreach @i @ToProtect $(writeprotect ${@i});
=end
-さあこれで華和梨ゴーストを作る基本は出来た
#br
続き→ らくだ屋/里々から華和梨への移行ガイド・SHIORI Event...
終了行:
-華和梨 8.2.8 系
#br
#contents
#br
*実際に華和梨でゴーストを作る [#ea398e76]
-実戦
**ミドルウェアってなんぞ [#r2795b0a]
-華和梨のマニュアルや関連した解説サイトではよく「ミドルウ...
-里々でいう「ポストと狛犬」のような、テンプレートゴースト...
--個人的な印象では
---&color(blue){テンプレート/改造すればすぐにゴーストが...
---&color(blue){ミドルウェア/豪華な機能を持つ。テンプレ...
--という感じ
-ミドルウェアの機能も思いつく限り列挙
--単語フレームワーク
--セキュリティ面
--古いバージョンの華和梨との互換性
--ゴースト制作のフォーマット(基礎イベントの他、多重人格...
#br
**で、ミドルウェアやテンプレートを使うべき? [#a0ae17a3]
-ここまでの基礎知識があればミドルウェアやテンプレートの改...
-&color(green){使う};
--○
---表記ルールさえ覚えていればゴースト制作にすぐ入れる
---必要なイベントが既に用意されているので、かかる時間を短...
---セキュリティを受け持ってくれるので安心
--×
---堅牢な構成が逆に発想実現の足を引っ張る
---それぞれに書式ルールがあり、新たなイベントを実装するの...
-&color(green){使わない};
--○
---やりたい事だけを選んで気軽にできる。イベントの追加も楽
---辞書構成の把握が容易になり、ファイル構成がすっきりする
---作りたいものがあるのなら目的に向かって一直線に作れる
--×
---セーブロードや各種イベントの実装など全部自分で作る労力
---危険性・セキュリティについては勉強が必要
---自由すぎて何を作ればいいかわからん
作りたいゴーストが、独自の機能を実装するなど、一般的なゴ...
#br
*ミドルウェアやテンプレートを使わないやり方 [#pf1383d6]
とりあえず華和梨を使ってみたい・慣れておきたいという方は...
-詳しい&優しい制作手順は[[なごやか。 - かわりちゃんを、...
#br
**準備 [#e050bab9]
-これまで作った事のある里々ゴーストなどから、シェルを流用...
-ゴーストフォルダは以下の2つのファイルが必要
--&color(red){shiori.dll};
--&color(red){kawarirc.kis};
#br
***shiori.dll / 華和梨本体 [#v14e573e]
-これがなければ始まらない
-descript.txtを里々から流用しているのなら、栞指定の記述を...
--× shiori,satori.dll
--○ shiori,shiori.dll
#br
***kawarirc.kis / 華和梨の設定ファイル、というか最初に読...
-華和梨が最初に読み込む辞書ファイル。実態はテキストファイ...
-起動時に最初に読み込む唯一のファイルなので、他の辞書ファ...
#br
**全てを決定付ける最初のイベント [#kbd8eb95]
-華和梨で処理するあらゆるイベントは、必ず System.Callback...
-これだけだと何がなんだか分からないので例
System.Callback.OnGET : ${${System.Request.ID}}
System.Callback.OnGET : $(entry ${System.Request.ID})
-どちらも同じ意味
-挙動としては、''&color(red){エントリ${System.Request.ID}...
-つまりSSPから
--「ユーザからあんたに起動指示が出たよ」→OnBootイベント発信
--「ユーザからあんたに終了指示が出たよ」→OnCloseイベント...
-という風におしらせが来るので、それに対応するように該当エ...
#br
-順番に考える
-もし実際に OnBoot が来た場合、${System.Request.ID} が On...
System.Callback.OnGET : ${OnBoot}
System.Callback.OnGET : $(entry OnBoot)
-すなわち''&color(blue){OnBootが通知されると、「OnBootエ...
-よって、以下のような記述例を実際に使えるようにするために...
-当然、これを弄るとイベントに呼び出すエントリ名を自分流に...
OnBoot : ${起動}
起動 : \0\s[0]ちゃす。\e
#br
**書き込んでみよう [#c3625457]
-kawarirc.kisをメモ帳などのテキストエディタで編集しよう
System.Callback.OnGET : $(entry ${System.Request.ID})
System.Callback.OnNOTIFY : $(entry ${System.Request.ID})
OnBoot : \1\s[10]\0\s[0]やあ。\w9\w9\e
OnClose : \1\s[10]\0\s[0]うい。\w9\w9\-
-System.Callback.OnNOTIFY はnotifyイベントが来る
-筆者もよく分かってないものの、一部のイベントはこのOnNOTI...
#br
**全部kawarirc.kisに書くの? [#q6d3bb70]
-別のファイルを作って記述していくなどして、好きなように別...
-&color(red){作ったファイルはkawaricrc.iniの中で、kisのlo...
-loadコマンドは、華和梨辞書としてファイルを読み込むkisな...
-以下例示
=kis
# 華和梨辞書
load dic01_Base.txt ;
load dic02_Event.txt ;
# さおり
saoriregist mciaudior.dll mciaudior preload ;
saoriregist httpc.dll httpc preload ;
=end
- =kis ~ =end でくくられた妙な記法は、&color(red){kisを...
-その性質から言って kawarirc.kis 以外で使う機会は滅多にな...
#br
-余談として、セミコロン【;】は通常の $() でkisを使う時に...
-loop系などを見やすくしたい時に使われる事が多いだけで必須...
設定する : $( setstr フラグ "ふつう")$(
setstr 満腹度 "100")$( setstr モード "" )
これを
設定する : $(setstr フラグ "ふつう" ;
setstr 満腹度 "100" ;
setstr モード "" )
-と書いたりできる
-半角スペースで区切るところなんかはほぼ改行使い放題
#br
**全イベントに対応すべき? [#h7c59d93]
必ずしも全てのイベントに対応する必要は「ない」。知らない...
-ただし、最低限、以下のものだけは必ず用意すべき
--&color(blue){OnFirstBoot}; ... 初回起動時
--&color(blue){OnBoot}; ... 起動時
--&color(blue){OnGhostChanged}; ... 切り替わって起動した時
--&color(blue){OnWindowStateRestore}; ... 最小化から復帰
---これらはサーフィスの表示くらいは定義しておかないと困っ...
---理由が分からない人は、里々の「*最小化から復帰」をから...
--&color(blue){OnClose}; ... 終了時
---終わりには必ず \- (終了するさくらスクリプト)が必要、...
--&color(blue){OnChoiceSelect}; ... 選択肢がクリックされ...
---里々は自動でジャンプしてくれたけどこっちは手動で作る必...
---といっても以下のように書くだけ
OnChoiceSelect : $(entry ${R0})\e
リファレンス0には、\q[~,~]で作ったIDが入っているので、...
最後に \e をつけているのはどこかで \e を書き忘れた時のた...
#br
**kawarirc.kisに書く事をまとめて突っ込む [#x6b76daf]
-resourceも当然System.Callbackを通ってやってくるので、Dis...
-例としてネットワーク更新用のURLは「homeurl」というIDで来る
-よって、homeurlエントリを作ってそこにURLを書けばOK
System.Callback.OnGET : $(entry ${System.Request.ID})
System.Callback.OnNOTIFY : $(entry ${System.Request.ID})
=kis
# 華和梨辞書。自分の好きな辞書ファイルを作り、登録しま...
load dic01_Base.txt ;
load dic02_Event.txt ;
=end
R0 : ${System.Request.Reference0}
R1 : ${System.Request.Reference1}
R2 : ${System.Request.Reference2}
R3 : ${System.Request.Reference3}
R4 : ${System.Request.Reference4}
R5 : ${System.Request.Reference5}
R6 : ${System.Request.Reference6}
R7 : ${System.Request.Reference7}
R8 : ${System.Request.Reference8}
R9 : ${System.Request.Reference9}
OnChoiceSelect : $(entry ${R0})\e
homeurl : "http://~"
OnBoot : \1\s[10]\0\s[0]やあ。\w9\w9\e
OnClose : \1\s[10]\0\s[0]うい。\w9\w9\-
-イベントとかのリファレンスに対応しやすいように、R0から...
-便利だと思いませんか
-どうせ好きな辞書ファイルを作って登録できるんで、OnBootや...
#br
*descript.txtに書いておくおまじない [#a763e3dc]
shiori.cache,0
-SSPのキャッシュ機能をOFFにする
-ミドルウェアやテンプレートを使わず、自前で作る場合、もし...
-これについては別のところでいずれ
#br
*華和梨・自作におけるセキュリティ施工 [#e4ae757d]
-華和梨に慣れてきたら考えておきたいセキュリティの話
-慣れるまで触れなくていいよ!
-[[華和梨Phase 8 Tips集 - 華和梨Phase 8とセキュリティ:htt...
//元URL、現在消失 http://shobu.hp.infoseek.co.jp/column.h...
-これは華和梨に限った話ではなく、様々な栞が該当
#br
**概説 [#l48302bb]
上のURLから要点を抜粋
-悪意ある攻撃スクリプト、例えばreference値にさくらスクリ...
-&color(blue){1.setコマンド等で${System.Request.Reference...
--setstrやpushstrなど「str」のついた、文字列として扱うコ...
-&color(blue){2.debuggerコマンドでonを指定したものを外し...
--配布用アーカイブではonにしたままにしないようにする
--debuggerコマンドを使っていない場合は問題なし
-&color(blue){3.大事なエントリは保護しておく};
--万が一に備え、writeprotectコマンドを使ってエントリの変...
---各種栞イベント全部
---各種resource全部(特に重要なのはネットワーク更新URLで...
---各種notifyイベント全部
-&color(blue){4.危険なさくらスクリプトタグを通さない};
--${System.Request.Reference*}をすぐに参照せず、内容を先...
#br
以下、順番に、具体的なセキュリティの施工方法
#br
***1.setコマンド等で${System.Request.Reference*}の内容を...
-略
#br
***2.debuggerコマンドでonを指定したものを外しておく [#hda...
-略
#br
***3.大事なエントリは保護しておく [#m73cba3e]
-writeprotectコマンドを使ってエントリの変更を禁止
-保護すべきエントリは究極的には「変数でない、起動中に変更...
-つーても一つ一つに全てかける事は大変な手間なわけで、いち...
-よって、さっくり楽に全部保護するためにエントリの書き方を...
#br
-準備。これまで使っていたkawarirc.kisのSystem.Callbackの...
# 横に長くなるのを防ぐため可能な限り改行してますが1行に...
System.Callback.OnGET : $(
setstr @temp ${System.Request.ID} ;
entry "event."${@temp} $(
entry "resource."${@temp})
)
System.Callback.OnNOTIFY : $(
setstr @temp ${System.Request.ID} ;
entry "notify."${@temp}
)
上のを順番に追ってみると…
-&color(blue){System.Callback.OnGETエントリ};
--まず@tempエントリに${System.Request.ID}、=イベント名な...
--次に【event.イベント名】というエントリを呼ぶ
--存在しない(又は中身が空)の場合は代わりに【resource.イ...
--これも存在しなければ無視
-&color(blue){System.Callback.OnNOTIFYエントリ};
--まず@tempエントリに${System.Request.ID}、つまりイベント...
--次に【notify.イベント名】というエントリを呼ぶ
--存在しなければ無視
具体例を挙げると、「OnBoot」が通知された際、【event.OnBoo...
これまではイベント名そのままのエントリ名を参照していたの...
頭にevent.とかついたエントリ名へ書き換えなければならない
#br
-このようにしたら解説ページのソースをまるごとコピー
#kawarirc.kisの最後に、以下を追加する
=kis
listtree @ToProtect System.Callback;
listtree @ToProtect event;
listtree @ToProtect resource;
listtree @ToProtect notify;
foreach @i @ToProtect $(writeprotect ${@i});
=end
-上の動作をぶっちゃけると、
--&color(blue){System.Callback.で始まるエントリ名};
--&color(blue){event.で始まるエントリ名};
--&color(blue){resource.で始まるエントリ名};
--&color(blue){notify.で始まるエントリ名};
-以上のエントリを&color(red){一気にすべて保護する};、とい...
-どうでもいいけど System.Callback.系のエントリを上のよう...
-気になる人は全イベント列挙するなり。。。でも手間ばかりか...
#br
***4.危険なさくらスクリプトタグを通さない [#h20fd5bd]
-ちょっと長いけど解説ページのソースをそのまま辞書のどこか...
=kis
# 外部SSTPに存在した場合、危険なタグを無害化
# 第1引数: 文字列
# 戻り値: タグを無害化した文字列
function KillDangerousTag $(
if $[ $(size @arg) != 2 ] $(return);
setstr @string $@arg[1];
foreach @tag kp.dangeroustag $(
# 無害化したタグを生成
setstr @killedtag " _"$(substr ${@tag} 2);
setstr @pos $(match ${@string} ${@tag});
# 危険タグが存在したら、無害化したタグに置換
if $[ ${@pos} != -1 ] $(
setstr @string $(gsub ${@string} ${@tag} ${@killedtag});
);
);
return ${@string};
);
=end
# KillDangerousTag内部で参照している危険なタグのリスト
# 必ず2文字以上からなるタグを書くこと
kp.dangeroustag (
"\\![updatebymyself]",
"\\![vanishbymyself]",
"\\![enter,passivemode]",
"\\![leave,passivemode]",
"\\![lock,repaint]",
"\\![unlock,repaint]",
"\\![biff]",
"\\![open,browser",
"\\![open,mailer",
"\\![raise",
"\\j["
)
# タグリストが消されて無効化されないよう、エントリを保護
=kis
writeprotect kp.dangeroustag;
=end
=kis
# Reference*参照
# 第1引数: Reference番号
# 戻り値: Reference*の内容
function Reference $(get System.Request.Reference$@arg[1...
# 危険なさくらスクリプトタグを無害化した上でReference*参照
# 第1引数: Reference番号
# 戻り値: 危険なさくらスクリプトタグをを無害化したRefer...
function SReference $(KillDangerousTag $(Reference $@arg...
=end
-貼り付けたら、以後、&color(blue){${System.Request.Refere...
event.OnCommunicate : (
\1\s[10]
\0\s[0]
$(SReference 0)が何か言ってるね。\w8\w8\n
とりあえず無視しておこっと。\w8\w8
\1危なそうだしな。\w8\w8
\e
)
-解説ページにある例だとこう。でもここまでのゴースト制作に...
R0 : $(SReference 0)
R1 : $(SReference 1)
R2 : $(SReference 2)
R3 : $(SReference 3)
R4 : $(SReference 4)
R5 : $(SReference 5)
R6 : $(SReference 6)
R7 : $(SReference 7)
R8 : $(SReference 8)
R9 : $(SReference 9)
-こうしておけばセキュリティ施工済みのリファレンス値を${R...
-華和梨って便利だと思わんかね
#br
*kawarirc.kisに書くこと最終まとめ例 [#v84d0103]
-長いので別の辞書にしてloadしても良い
-ただし、エントリ保護だけはkawarirc.kisの最後に書くか、エ...
System.Callback.OnGET : $(
setstr @temp ${System.Request.ID} ;
entry "event."${@temp} $(
entry "resource."${@temp})
)
System.Callback.OnNOTIFY : $(
setstr @temp ${System.Request.ID} ;
entry "notify."${@temp}
)
=kis
# 華和梨辞書。自分の好きな辞書ファイルを作り、登録しま...
load dic01_Base.txt ;
load dic02_Event.txt ;
=end
R0 : $(SReference 0)
R1 : $(SReference 1)
R2 : $(SReference 2)
R3 : $(SReference 3)
R4 : $(SReference 4)
R5 : $(SReference 5)
R6 : $(SReference 6)
R7 : $(SReference 7)
R8 : $(SReference 8)
R9 : $(SReference 9)
resource.homeurl : "http://~"
event.OnChoiceSelect : $(entry ${R0})\e
event.OnBoot : \1\s[10]\0\s[0]やあ。\w9\w9\e
event.OnClose : \1\s[10]\0\s[0]うい。\w9\w9\-
=kis
# 外部SSTPに存在した場合、危険なタグを無害化
# 第1引数: 文字列
# 戻り値: タグを無害化した文字列
function KillDangerousTag $(
if $[ $(size @arg) != 2 ] $(return);
setstr @string $@arg[1];
foreach @tag kp.dangeroustag $(
# 無害化したタグを生成
setstr @killedtag " _"$(substr ${@tag} 2);
setstr @pos $(match ${@string} ${@tag});
# 危険タグが存在したら、無害化したタグに置換
if $[ ${@pos} != -1 ] $(
setstr @string $(gsub ${@string} ${@tag} ${@killedtag});
);
);
return ${@string};
);
=end
# KillDangerousTag内部で参照している危険なタグのリスト
# 必ず2文字以上からなるタグを書くこと
kp.dangeroustag (
"\\![updatebymyself]",
"\\![vanishbymyself]",
"\\![enter,passivemode]",
"\\![leave,passivemode]",
"\\![lock,repaint]",
"\\![unlock,repaint]",
"\\![biff]",
"\\![open,browser",
"\\![open,mailer",
"\\![raise",
"\\j["
)
# タグリストが消されて無効化されないよう、エントリを保護
=kis
writeprotect kp.dangeroustag;
=end
=kis
# Reference*参照
# 第1引数: Reference番号
# 戻り値: Reference*の内容
function Reference $(get System.Request.Reference$@arg[1...
# 危険なさくらスクリプトタグを無害化した上でReference*参照
# 第1引数: Reference番号
# 戻り値: 危険なさくらスクリプトタグをを無害化したRefer...
function SReference $(KillDangerousTag $(Reference $@arg...
=end
#kawarirc.kisの最後に、以下を追加する
=kis
listtree @ToProtect System.Callback;
listtree @ToProtect event;
listtree @ToProtect resource;
listtree @ToProtect notify;
foreach @i @ToProtect $(writeprotect ${@i});
=end
-さあこれで華和梨ゴーストを作る基本は出来た
#br
続き→ らくだ屋/里々から華和梨への移行ガイド・SHIORI Event...
ページ名: