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. 4 Pukiwiki コメントスパム対策 • Pukiwiki PHP ベースのWiki クローン • コメント機能がある

    ここにspam が大量に. • 手で消していたが削除が追いつかなく. • コメントがつくと編集日時が更新されて しまう.
  2. 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'=>''); > }
  3. 7 対策その2 ひらがなが含まれている投稿のみ許可 • 以下のようなascii 以外のspam が増えて きた. <a href="

    http://eriqygyzam90.land.ru/ ">芻琲鉤髓矗 頌 髑褂 蓁鉐鴃琿&#65533;</a> [URL=http://eriqygyzam90.land.ru/]芻琲鉤髓矗 頌髑褂 蓁鉐鴃琿&#65533;[/URL] -- [[芻琲鉤髓矗 頌髑褂 蓁鉐 鴃琿&#65533;]] • 条件をascii のみからひらがなが含まれて いる投稿のみに変更.
  4. 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と同じ.
  5. 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と同じ.
  6. 11 対策その4 フォームに加工 • 本来のURL 以外からの登校を禁止して殆 どのスパムが防げるようになったが,本 来のURL 経由でやってくるスパムがある .

    • 投稿フォームを追加して,人間がチェッ クボックスをOn にしないと投稿を受け 付けないようにしてみた.
  7. 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と同じ.
  8. 14 電波時計でntp • 閉じたLAN 内で時計合わせをしたい. ->外のntp server には接続できない. • Client

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

    仕様が公開されていてUnix 向けのsoft も 複数存在する. • ntp が対応している!
  10. 17 ntp の設定 • 当初,jst2k で電波時計と本体の時計合わ せを行うつもりだったが,ntp の設定中 にntp 自体がJST2000

    に対応しているこ とに気づく. • soft はntp だけで良くなった. http://www.ntp.org/ ln -s /dev/ttyS0 /dev/jjy0 が必要.
  11. 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
  12. 19 もう少し安い電波時計 • 秋月電気にて電波時計キットが発売中. • PIC16F873使用 電波時計キット Ver.2 • ¥6400

    です. • ntp.conf のサーバ部分は少し変更が必要 . server 127.127.40.0 prefer mode 1 • 開けた場所ならGPS という選択肢も.