1 ###############################################################################
3 # ¥¹¥Ñ¥àÅê¹Æ¤ò¥Õ¥£¥ë¥¿¥ê¥ó¥°¤¹¤ë¥Õ¥Ã¥¯¥×¥é¥°¥¤¥ó¡£
5 ###############################################################################
6 package plugin::core::SpamFilter;
8 #==============================================================================
10 #==============================================================================
14 return bless $self,$class;
16 #==============================================================================
18 #==============================================================================
22 my $cgi = $wiki->get_CGI();
24 my $content = $cgi->param("content");
25 return if($content eq '');
27 my $rule = &Util::load_config_text($wiki,'spam_rules.dat');
28 foreach my $line (split(/\n/, $rule)){
31 $result = RULE_MULTI_URL($content) if($line eq 'RULE_MULTI_URL');
32 $result = RULE_NO_USERAGENT($content) if($line eq 'RULE_NO_USERAGENT');
33 $wiki->redirect($cgi->param("page")) unless $result;
36 my $spam = Util::load_config_text($wiki,"spam.dat");
37 foreach my $spam_line (split(/\n/,$spam)){
39 if(index($content,$spam_line)!=-1){
40 $wiki->redirect($cgi->param("page"));
44 my $client = $ENV{'REMOTE_ADDR'};
45 my $ip_list = &Util::load_config_text($wiki,'spam_ip.dat');
46 foreach my $line (split(/\n/, $ip_list)){
47 my ($from, $to) = split(/-/, $line);
48 $to = $from if($to eq '');
49 unless(&ip_check($client, Util::trim($from), Util::trim($to))){
50 $wiki->redirect($cgi->param("page"));
56 #==============================================================================
57 # IP¥¢¥É¥ì¥¹¤Î¥Á¥§¥Ã¥¯
58 #==============================================================================
64 my @client_dim = split(/\./, $client);
65 my @from_dim = split(/\./, $from);
66 my @to_dim = split(/\./, $to);
68 foreach my $part (@client_dim){
69 unless((shift @from_dim) <= $part && $part <= (shift @to_dim)){
76 #==============================================================================
77 # 1¹Ô¤ËÂçÎ̤ÎURL¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¤ËÊݸ¤òµñÈݤ¹¤ë¥ë¡¼¥ë
78 #==============================================================================
81 foreach my $line (split(/\n/, $source)){
82 if($line =~ /(http:.*){5,}?/){
88 #==============================================================================
89 # USER-AGENT¤Ê¤·¤Î¾ì¹ç¤ËÊݸ¤òµñÈݤ¹¤ë¥ë¡¼¥ë
90 #==============================================================================
91 sub RULE_NO_USERAGENT {
92 return ($ENV{'HTTP_USER_AGENT'} ne '');