Note/Management/WikiModification?

Wiki機能の追加&変更

 この項ではPukiWikiに直接関係のある修正や改造をまとめた物です。拙作の改造コードの一部は公開されているので宜しかったらご利用下さい。

管理人による修正 (公開ファイル)

 この項では管理人による修正に関して触れます。

一部の改造コードは公開されています。まとめて見たい場合はFile置き場内のpukiwikiフォルダ ( http://smith.rowiki.jp/files/pukiwiki/ )をご参照下さい。

外部Link確認Script

  • アカウントハックウイルスURI貼り付け攻撃に対して作成
  • Wiki外のLinkには確認ページを出す事でUserに確認を促す事が目的
  • 前もって危険文字列リスト(riskystr.pl)に危険なドメイン名等を記入しておくと、ソレを含むURIのときに警告を行う (該当文字列を強調表示&Linkを切って表示)
  • 危険文字列リスト(riskystr.pl)は当Siteで管理しています。最新版は危険文字列リストを参照の事
  • link-0.0.12.tar.bz2
    • Pukiwikiにそのまま組み込めるように、本体改造部分も同梱 (2007/04/02)
    • 正常URIでも不正URIと判定されるバグの修正 (2006/11/14-0.0.12)
    • XSS脆弱性の修正(2006/11/13-0.0.11)

attach.inc.phpの改造

  • Pukiwiki本体では画像以外の添付ファイルはDLするように処理されています。しかし画像はアドレスを踏むと表示できちゃいます
  • 例えば中身が悪意のScriptで有る拡張子JPGファイルを添付、他の掲示板等でそのファイルに直リンクとか張られると結構やばい事になります
  • ページへの添付は上項の『ファイル添付に関する設定変更』でほぼ完璧に対応できますが、保険は多いほど良いと言う事でこの改造を行いました
  • 改造に際して強化したのは次の通り
    • 管理者が指定した拡張子のファイルのみ添付可能とする *1
    • ファイルが画像ファイル拡張子の場合、それが真っ当な画像かどうかチェックし、正常でない場合は拒絶する
  • 二つ目は絡め手から攻めているので上手く行かない可能性も有りますが、とりあえずはこれで様子見
  • 改造済みファイルは此方 (attach.inc.php-mod.tar.bz2)

管理人による修正 (非公開ファイル)

 この項も管理人の修正に関して触れます。但し、諸事情によりコードを公開していないものをまとめた物です。

表組みの書式指定のフォントサイズ指定を柔軟化

  • 表組みでは "SIZE(16):" のように文字の大きさを指定できますが、これはHTML上では "font-size:16px;"と変換されます。この場合、InternetExplorer等では簡単にサイズを変更することが出来なくなります
  • よって相対指定も可能なように変更しました。文法は以下の通り
    SIZE(文字サイズ):
  • 文字サイズは元は数字しか入らなかったのですが、これを拡張して『pt』『em』『%』付きの数字も入るようにしました。以下はその例です
    SIZE(90%):
    SIZE(1.2em):
  • 数字だけの場合は px を省略したと見なします (互換性を考慮)
  • 同時にオリジナルには無かったフォントの最大/最小制限も組み込んであります
  • この拡張は文法指定行/セル単位どちらにも使用できます

宣伝スパム対策コード

  • 宣伝スパムの増加が見られたので総合的なアクセスコントロールを行うコードを組み込みました
  • 観察項目は『Accept-Languageヘッダ』『NG Wordの使用』『BBQによる公開プロキシ判定』『投稿文字列がASCII文字列のみかの確認』等です
  • エラー画面はスパマー対策で分かりにくめの文言にしています
  • エラーコードによる詳細は以下の通り (複数の条件にHitした場合はそれぞれの数値の総和がエラーコードと成ります)
       0 : OK (通常お目にかかる事は有りません)
      +1 : BBQチェック 陽性
      +2 : 無条件禁止HOST 
      +4 : NG Word 陽性
      +8 : リファラー不正
     +16 : Accept-Languageヘッダにjaが無い
     +32 : 内容が英数&記号のみ (日本語を含まない)
     +64 : Cookie不正
  • 規制に引っ掛かった場合は検査Scriptを確認しても引っ掛かった項目が分かりますし、一時的に書込許可を得ることも出来ます
  • Accept-Languageヘッダに関してはブラウザの設定で修正が可能です(ブラウザの表示言語に日本語を追加すれば良い)
     
  • 運用結果 (2006/09/05記)
    • 上記コード導入後数ヶ月運用した結果、上記の対策はかなり有効である事が判明しました。ただ、全ての対策判定をONにしている訳では有りません(詳細は伏せます)。それでも防げていると云う事は、案外対策は楽なものであると言えるかもしれません (コードを自前で書ける暇と技術が有れば。後はspamerがずっと愚鈍であれば)
    • 現時点で殆ど100%横文字のspamなので、『Accept-Languageヘッダの判定』か『内容が英数&記号のみ (日本語を含まない)』で判定の網に捕らえる事が出来ます。『NGワード判定』もかなりの確率で捕獲出来ますが、上記の2つの網で十分だったりします

携帯端末へのReadOnly化

  • 携帯端末からのアクセスと推測される物はReadOnlyにしました

.htaccess強化

  • この作業はコードの修正ではありませんが、管理上有意義であったので記しておきます
  • Siteにそぐわない宣伝spamを行ってきたアクセスを分析、deny処理を行っています
  • Userへの誤爆が起こらない事を最大限に意識しつつやっているので、多分現状で悪影響は無い…と思います

ファイル添付に関する設定変更

  • 添付されたファイルが悪意のファイルか否かの判別はプログラムでは困難です。そこでファイルの添付は可能でも管理者が閲覧OK化しない限り閲覧できなくしました
  • これは本体の改造は皆無です。取った手法は次の通り
    • 添付専門ページを作成 (Management/Attach)
    • attach.inc.phpの設定で、添付ファイルのパーミッション設定*2をブラウザからもPHPからも閲覧できない物にする (0000とか)
    • 管理者が添付を確認したら、ファイルをチェック。若しも不審な点がなければ手動でパーミッションを0644等に変更する
    • ファイルの所有者の関係があるのでもうちょっと複雑になりますが原理は以上のとおり

自動ログ公開&凍結機能

  • 昨今のアカハクURI書込攻撃を見るに、管理放置状態のWikiはやばい物であるという実感から作成 (現物)
  • 一定期間管理者が不在の場合、Wikiを凍結しログを誰でもDL出来るようにする
  • 不在か否かは『管理Passwordの入力』で判定しているので管理Passwordを入れない作業を行っていても管理者は生存している可能性が有ります。注意!*3

追加導入プラグイン/機能

 この項では管理人がこのWikiに追加導入した他作のプラグインや機能を紹介します

aa.inc.php

  • AA(アスキーアート)記述プラグイン (下のpre.inc.phpの簡略版)
  • 配布場所外部Link
  • デフォルトプラグインでの表示時とは異なり、Wiki文法記号を実態参照化する必要はありません
    • 但し、 }} だけは例外です。この時は }} を実態参照化するか、 {{{アスキーアート}}}という風に記述して下さい
    • 現在アスキーアートには CSSで font-size: 12pt; が指定されています (AAの調整は一般的にこのフォントサイズで行われている為)
  • 文法は以下の通り
    #aa([タイトル]){{
    アスキーアート
    }}
    #aa{{
    アスキーアート
    }}
    #aa{{{
    アスキーアート
    }}}

contentsx.inc.php

  • #contentsをプラグイン化&機能を拡張したもの
  • 配布場所外部Link
  • 文法は配布元を参照してください

lsx.inc.php

  • ls.inc.php を機能拡張したもの
  • 配布場所外部Link
  • linkstr=title のオプションを使えるように配布サイトで提示されている設定をdefault.ini.phpにしてあります *4
  • 文法は配布元を参照してください

pre.inc.php

  • 整形済みTextの入力を簡単にする
  • 配布場所外部Link
  • 文法は以下の通り
    #pre{{
    内容
    }}
    #pre( [ [タイトル] [,クラス] ] ){{
    内容
    }}
  • クラスを複数指定する場合は半角スペースで区切って記述。(class1 class2)
  • クラスはCSSファイルで指定するので管理人設定の物しか使用できない

size2.inc.php

  • デフォルトプラグインのsize.inc.phpの強化版
  • 配布場所外部Link
  • 文法は以下の通り
    &size2(size){文字列};
  • sizeには %, em, pt, px の各単位が使用可能(省略時はpxが適用)

htmlinsert.inc.php

  • Wikiの望む場所にサーバ上に置いた作成済みHTMLを表示する
  • 配布場所外部Link
  • 設定された位置にHTMLを置かないと使用出来ないので実質管理者のみが使用可能
  • 文法は以下の通り
    #htmlinsert(ファイル名)
    &htmlinsert(ファイル名);

includex.inc.php

  • include.inc.phpの強化版
  • 配布場所外部Link
  • 文法は配布元を参照してください

todays.inc.php

  • recentプラグインと異なり、純粋に今日更新された物のみを表示するプラグイン
  • 配布場所外部Link
  • 文法は以下の通り
    #todays

convert_cache.php

  • コンバート結果をキャッシュし、表示の高速化と負荷の低減を実現
  • 配布場所外部Link
  • 一部のプラグイン等の機能には上手く対応してないので、古い記事が表示される事が有ります (例えば、取り込み先が更新されていても取り込み元に反映しない状態)
  • そのような問題を回避する為にキャッシュ機能をページ毎にOFFにする事も可能です。キャッシュ機能をOFFにしたい場合はそのページの頭から2行以内に以下の一文を書き加えて下さい
     // cache0

paraedit.diff

  • 段落毎の編集を可能にする修正差分
  • 配布場所外部Link


*1 ライトな投稿ファイル規制
*2 PLUGIN_ATTACH_FILE_MODE
*3 但し、手動で更新も出来るようにはして有ります
*4 引用:『default.ini.php の $line_rules で "^(TITLE):(.*)$" => "", と設定し、TITLE: 行を表示しないようにすればよいでしょう』
Last-modified: 2012-11-27 Tue 04:19:14 JST
HTML convert time: 0.002 ( 0.002 ) sec.