wiki SPAM対策として、崩れた数字を表示させて人間かどうかチェックするというアイディアを言っちゃったので。
言い出しっぺの法則でさっくり書いて見た。
でも、、、崩れた数字で~~って特許とられてないか心配で実装が止まってる。
まぁ、萌え絵3種からえらばせてもいいか。
pukiwiki 1.4.4 の
lib/auth.phpのところに
function check_human(){
$system_salt="ablacatabra";//将来的にはpukiwiki.iniへと
$uri= urlencode($_SERVER{"REQUEST_URI"});
if(! isset($_COOKIE{"human"}))
header("Location: human_check.php?url=".$uri);
$tmp = preg_split('/:/',$_COOKIE{"human"});
$utime=$tmp[0];
$hash=$tmp[1];
if($utime + 3 < time() ||
$hash != md5($system_salt.$utime))
header("Location: human_check.php?url=".$uri);
}
こげな関数たして
check_editableのところで
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;
}
~~~~~以下省略~~~~~
と言うふうにパスワード突破で承認するまえにだすようにする。
そんでもって以下のようなhuman_check.phpを用意すればOk
<?
if($_POST{"human"}=="yes"){
$system_salt="ablacatabra";//将来的にはpukiwiki.iniへと
$utime=time();
$hash=md5($system_salt.$utime);
setcookie('human',$utime.':'.$hash);
header("Location: ".urldecode($_POST{"url"}));
}
if(isset($_POST{"url"}))$url=$_POST{"url"};
else $url=$_GET{"url"};
$url=urldecode($url);
?>
<html>
<body>
Aar you human?<br>
<form action="./human_check.php" method="POST">
<input type="hidden" name="url" value="<? print htmlentities(urlencode($url)) ?>">
<input type="text" name="human">
<input type="submit">
</from>
</body>
</html>
setcookieのところで本当はpathを指定してpukiwikiディレクトリ以下からしかクッキーをとれないようにしなきゃいけないんだけど。
とりあえずは省略
あと、md5のところでハッシュのキーがutimeだけだけど。本当は乱数も追加したいね。
0 件のコメント:
コメントを投稿