首先寫下一段簡單的Javascript code,name、value的值可隨意改,不過因Server side 要接值判斷,所以要記得您給的值。
document.write("<input type=hidden name='CaptchaDIY' value='right'>");
將上述的源碼片段拿到 http://javascriptcompressor.com/ 網站,貼到 paste you code 的輸入框裡,中間位置,選最複雜的演算法(目前這版為Base62 ?)。按「Compress」的button。將得到下面的程序代碼:
eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('0.1("<2 3=4 5=\'6\' 7=\'8\'>");',9,9,'document|write|input|type|hidden|name|CaptchaDIY|value|right'.split('|'),0,{}))
我用的mt 版本為 4.x ,將上述產生的代碼貼到下列位置Comment Form的Template裡。
( Design=>Template=>Template Modules=>Comment Form )
打開 Comment Fomr後,找到表單(form)的位置,如下程序碼:
<form method="post"....
將上述編碼的 code 貼到 form 的下一行,如下 sample (上述的編碼程式為javascript code ,所以要用<script></script>的 code 給包住)
<form method="post" action="<$MTCGIPath$><$MTCommentScript$>" name="comments_form" id="comments-form" onsubmit="if (this.bakecookie.checked) rememberMe(this)">
<script language="javascript">
eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('0.1("<2 3=4 5=\'6\' 7=\'8\'>");',9,9,'document|write|input|type|hidden|name|CaptchaDIY|value|right'.split('|'),0,{}))
</script>
接下來的工作,修改server side 的程式碼:
打開Comments.pm,位置在mt 安裝的資料下。如 \cgi-bin\mt\lib\MT\App\Comments.pm,打開後找到下面程式碼:
sub post {
my $app = shift;
my $q = $app->param;
將判斷式加入在上面的程式碼之後,如下 sample:
sub post {
my $app = shift;
my $q = $app->param;
my $CaptchaDIY = $q->param('CaptchaDIY') or return $app->error($app->translate("You are not allowed to post comments."));
return $app->error($app->translate("You are not allowed to post comments.")) if $CaptchaDIY != "right";
存檔後,就可以避開大部份的span資料。
這種方法無法擋住刻意的span留言,因為如果真的有心,任何的方法都是可被破解的,如我的朋友說的,這種方法跟圖形驗證一樣可以擋下大部份的垃圾資料。

Leave a comment