Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pukiwikiコメントスパム対策/電波時計でNTP

 Pukiwikiコメントスパム対策/電波時計でNTP

Kenichiro MATOHARA

November 10, 2007
Tweet

More Decks by Kenichiro MATOHARA

Other Decks in Technology

Transcript

  1. 11月のオフな集まり(第64回) ~Pukiwiki コメントスパム対策/電波時計でNtp~ K.I.Matohara<[email protected]>

  2. 2 Matohara(まとはら)です。 • 最近腱鞘炎が悪化. キーボードを叩くのがつらいです. • MacOS 入れ替えのシステムアックアッ プディスクが壊れる. デスクリカバリソフトで対応.

  3. 3 腱鞘炎対策 • 今のところ効果は不明….

  4. 4 Pukiwiki コメントスパム対策 • Pukiwiki PHP ベースのWiki クローン • コメント機能がある

    ここにspam が大量に. • 手で消していたが削除が追いつかなく. • コメントがつくと編集日時が更新されて しまう.
  5. 5 対策その1 ascii のみの投稿を禁止 • この頃の殆どのスパムは英語のスパムだ ったのでascii のみの投稿を禁止した. • ログをファイルに書き出すので後で確認

    が可能. • これで9割以上のスパムが弾けるように なった.
  6. 6 書き換えたコード (pukiwiki/plugin/comment.inc.php) % diff ./comment.inc.php-org comment.inc.php 38a39,47 > if

    (mb_detect_encoding($vars['msg']) == "ASCII" ){ // ascii のみの投稿禁止 > # ログを書き出して終了 > $fp = fopen("/home/maty/public_html/pukiwiki1/SPAM.log", 'a+'); > flock($fp, LOCK_EX); > fputs($fp,$vars['refer'].",".$vars['msg'].",".$vars['name'].",".date("Y-m- d:H:i:s")."\n"); > flock($fp, LOCK_UN); > fclose($fp); > return array('msg'=>'', 'body'=>''); > }
  7. 7 対策その2 ひらがなが含まれている投稿のみ許可 • 以下のようなascii 以外のspam が増えて きた. <a href="

    http://eriqygyzam90.land.ru/ ">芻琲鉤髓矗 頌 髑褂 蓁鉐鴃琿&#65533;</a> [URL=http://eriqygyzam90.land.ru/]芻琲鉤髓矗 頌髑褂 蓁鉐鴃琿&#65533;[/URL] -- [[芻琲鉤髓矗 頌髑褂 蓁鉐 鴃琿&#65533;]] • 条件をascii のみからひらがなが含まれて いる投稿のみに変更.
  8. 8 書き換えたコード (pukiwiki/plugin/comment.inc.php) % diff ./comment.inc.php-org comment.inc.php 38a39,47 > if(!preg_match('/[ぁ-ん]+/',

    $vars['msg'])){ // 平仮名を含まない投稿禁止 > # ログを書き出して終了 > $fp = fopen("/home/maty/public_html/pukiwiki1/SPAM.log", 'a+'); > flock($fp, LOCK_EX); > fputs($fp,$vars['refer'].",".$vars['msg'].",".$vars['name'].",".date("Y-m- d:H:i:s")."\n"); > flock($fp, LOCK_UN); > fclose($fp); > return array('msg'=>'', 'body'=>''); > } ※下線部以外対策その1と同じ.
  9. 9 対策その3 投稿元を確認 • ひらがなが含まれていない登校を拒否す るようにしても偶に漢字のコメントがす り抜けてくることがある. • スパムコメントの投稿元を確認してみる と,本来のフォームからでなく直接post

    を投げてきている. • 本来のURL 以外からの投稿を禁止してみ た.
  10. 10 書き換えたコード (pukiwiki/plugin/comment.inc.php) % diff ./comment.inc.php-org comment.inc.php 38a39,47 > if(!ereg("^http://hpv.cc/~maty/pukiwiki",

    $_SERVER["HTTP_REFERER"])){ // REFERER が違う場合投稿禁止 > # ログを書き出して終了 > $fp = fopen("/home/maty/public_html/pukiwiki1/SPAM.log", 'a+'); > flock($fp, LOCK_EX); > fputs($fp,$vars['refer'].",".$vars['msg'].",".$vars['name'].",".date("Y-m- d:H:i:s")."\n"); > flock($fp, LOCK_UN); > fclose($fp); > return array('msg'=>'', 'body'=>''); > } ※下線部以外対策その1,その2と同じ.
  11. 11 対策その4 フォームに加工 • 本来のURL 以外からの登校を禁止して殆 どのスパムが防げるようになったが,本 来のURL 経由でやってくるスパムがある .

    • 投稿フォームを追加して,人間がチェッ クボックスをOn にしないと投稿を受け 付けないようにしてみた.
  12. 12 % diff ./comment.inc.php-org comment.inc.php 38a39,48 > if((strncmp("http://hpv.cc/~maty/pukiwiki", $_SERVER["HTTP_REFERER"], 28))

    || // REFERER が違 う場合投稿禁止 > (!$vars['nospam'])){ // nospam check が無い場合投稿禁止 > # ログを書き出して終了 > $fp = fopen("/home/maty/public_html/pukiwiki1/SPAM.log", 'a+'); > flock($fp, LOCK_EX); > fputs($fp,$vars['refer'].",".$vars['msg'].",".$vars['name'].",".date("Y-m-d:H:i:s")."\n"); > flock($fp, LOCK_UN); > fclose($fp); > return array('msg'=>'', 'body'=>''); > } 106a117 > $nametags .= '<input type="checkbox" name="nospam" value="nospam">spam 避けです check を 付けて下さい'; 書き換えたコード (pukiwiki/plugin/comment.inc.php) ※下線部以外対策その1,その2,その3と同じ.
  13. 13 今後の対策 • 投稿元URL を確認. • 投稿画面読み込み時間と投稿時間を比較 して一定時間以内に投稿されたものをは じく. •

    実装がめんどくさそうなので実装してい ません….
  14. 14 電波時計でntp • 閉じたLAN 内で時計合わせをしたい. ->外のntp server には接続できない. • Client

    はntpclient が動作する. • ntpd を1台用意してそのサーバは電波時 計で時刻合わせをするのはどうだろう?
  15. 15 電波時計C-dex JST2000 • 値段は\17,220から • Windows 用の手動同期Soft が付属. •

    仕様が公開されていてUnix 向けのsoft も 複数存在する. • ntp が対応している!
  16. 16 JST2000 時計合わせソフト • jst2kctl(http://www.vanilla.co.jp/tech/jst2000/) 動作せず. • adj(http://www.ne.jp/asahi/tao/elis/jst2000/) make 失敗

    • jst2k(http://homepage1.nifty.com/ryoji/jst2k/) ln -s /dev/ttyS0 /dev/cuaa0 で動くように
  17. 17 ntp の設定 • 当初,jst2k で電波時計と本体の時計合わ せを行うつもりだったが,ntp の設定中 にntp 自体がJST2000

    に対応しているこ とに気づく. • soft はntp だけで良くなった. http://www.ntp.org/ ln -s /dev/ttyS0 /dev/jjy0 が必要.
  18. 18 # cat /etc/ntp.conf |grep -v ^#| grep -v ^$

    server 127.127.40.0 prefer mode 2 # C-DEX JST2000 fudge 127.127.40.0 time1 0.070 server 127.127.1.1 # local clock fudge 127.127.1.1 stratum 6 logfile /var/log/ntp # alternate log file ntp 設定ファイル •server は127.127.40.0 mode 2 を指定. 127.127.40. でドライバrefclock_jjy.c を指定. mode 2 でC-DEX JST2000 として認識. •ip の末尾0 の部分はデバイス名に合わせる。 /dev/jjy1 なら127.127.40.1
  19. 19 もう少し安い電波時計 • 秋月電気にて電波時計キットが発売中. • PIC16F873使用 電波時計キット Ver.2 • ¥6400

    です. • ntp.conf のサーバ部分は少し変更が必要 . server 127.127.40.0 prefer mode 1 • 開けた場所ならGPS という選択肢も.
  20. 20 ありがとうございました • matohara(まとはら) • http://hpv.cc/~maty/ • [email protected] • mixi:matoken(375316)

    • twitter:matoken • Skype:matoken