Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
akira_youの日記
[go: Go Back, main page]

Hatena::Diary
    
はてな
 ようこそゲストさん  最新の日記 ユーザー登録 ログイン ヘルプ

akira_youの日記

2005-01-07

つかれた

今日は朝から腐れたUPSをはずして配線のやりかえ。。。

うーつかれた。。サーバルームはほこりっぽいし。うるさいし。暑いし(ぉぃ

[]wiki SPAM対策

あー下でかいた対策ちょっといけてないね。

やっぱりデザインは統一させたほうが。

せっかくpukiwikiにはプラグイン機構があるので。index.php?plugin=hogehoge

でよびだしてそこでクッキー発行処理を行えば良い。

よゆーのよっちゃんでかけそうですねそれぐらい。

[]wiki SPAM対策

なんだか、反応があるととってもうれしいですね。

唐揚げでやってみました。さて、、身内のwikiに導入する準備でもしようかな。

auth.inc.php内のhuman_check関数


function check_human(){
        global $system_salt;
        global $humancheck_timespan;
        $ip=$_SERVER{"REMOTE_ADDR"};
        $uri=$_SERVER{"REQUEST_URI"};
        $uri_hash=md5($system_salt.$uri);
        $uri= urlencode($_SERVER{"REQUEST_URI"});
        

        $location="Location: index.php?plugin=humancheck&humancheck_u=".$uri."&humancheck_uh=".
$uri_hash;
        if(! isset($_COOKIE{"human"}))
                header($location);
        
        $tmp = preg_split('/:/',$_COOKIE{"human"});
        $utime=$tmp[0];
        $hash=$tmp[1];
        if($utime + $humancheck_timespan < time() ||
                 $hash != md5($system_salt.$ip.$utime))
                header($location);
        //認証できたのでtime extended!
        $utime=time();
        $hash=md5($system_salt.$ip.$utime);
        setcookie('human',$utime.':'.$hash,time()+$humancheck_timespan);
}

// 編集不可能なページを編集しようとしたとき
function check_editable($page,$auth_flag=TRUE,$exit_flag=TRUE)
{
        global $script,$_title_cannotedit,$_msg_unfreeze;

        if (edit_auth($page,$auth_flag,$exit_flag) and is_editable($page))
        {
                
                check_human();
                return TRUE;
        }
        if (!$exit_flag)



てな感じにして。

human_check.phppukiwikiプラグインとして書き直して。

plugin/humancheck.inc.phpとして書いて見ました

<?php

function plugin_humancheck_action()
{
        global $system_salt;
        global $vars;
        global $humancheck_timespan;
        $uri_head=$_SERVER{"PHP_SELF"};
        $ip=$_SERVER{"REMOTE_ADDR"};
        $uri=$vars{"humancheck_u"};
        $hash_uri=$vars{"humancheck_uh"};

        $check_data=array(
                                                         '「唐揚げ」をローマ字で書いてください', '
karaage',
                                                         '「萌え」をローマ字で書いてください' , 'm
oe',
                                                         '「萎え」をローマ字で書いてください' , 'n
ae');
        
$nof_question=count($check_data)/2;     
//本当は時間ごと、IPごと等で出る質問内容をいくつかに制限しておいて
//そのqidが着ているかをここでチェック
        
        $qid=$vars{"humancheck_qid"};
        #人間チェックにパスして、URI改竄もない
        if($qid >-1 && $qid < $nof_question &&       //質問IDが適切かチェック
                 $vars{"human"}==$check_data[$qid*2+1] &&   //正解かどうかチェック
                 strlen($uri_head)>0 &&                  //以下URLいり攻撃チェック
                 substr($uri,0,strlen($uri_head)) == $uri_head &&
                 $hash_uri == md5($system_salt.$uri)){
                $utime=time();
                $hash=md5($system_salt.$ip.$utime);
                setcookie('human',$utime.':'.$hash,time()+$humancheck_timespan);
                header("Location: ".$uri);
        }

        $qid= time() % $nof_question;
        $question=$check_data[$qid*2];

        $out_uri=htmlentities($uri);
$content = <<<EOD
<h1>人間チェック</h1>
以下の質問に答えてください<br>
$question
<form action="./index.php" method="POST">
<input type="hidden" name="plugin" value="humancheck">
<input type="hidden" name="humancheck_qid" value="$qid">
<input type="hidden" name="humancheck_u" value="$out_uri">
<input type="hidden" name="humancheck_uh" value="$hash_uri">
<input type="text" name="human">
<input type="submit">
</form>
EOD;

        return array(
                                                         'msg'=>'Human Check',
                                                         'body'=>$content
                                                         );
}
?>

さらにpukiwiki.ini.php

$system_salt="何か推測されない文字列"; //ハッシュをとるときのソルと
$humancheck_timespan= 3600;  //human checkの頻度(一回の投稿はこの時間内におえなければいけない)

じつは高々こんなもののために2時間以上かかってしまった。。。orz

やっぱり俺へたれだ。まぁ、実験の計算完了待ちの間だからいいだけどねぇ。。

期間限定で下記URLテスト実装のものをおいてみました。

http://nosi.dip.jp/test/pukiwiki/index.php

うまくいくようなら、本家に提案したいけど、pukiwikiコミュニティわかりにくっorz


[]SPAMバウンス

よく女性のふりをしてエロサイト広告を投げてくるのがあるが。

それに、他のエロサイト広告メールアドレスをFromにして返信したらどうなるんだろう。

実は興味深いかも

# hyuki 『興味深く拝見しました。日本語を読める人しかチェックを通らないようにするには、タイトルはHuman Checkという英語じゃなくて日本語のほうがよいかもしれませんね。』

# akira_you 『たしかに。。。まぁ、試験実装ですから。(^^; 大目に見てやってくださいませ』

トラックバック - http://d.hatena.ne.jp/akira_you/20050107