Changeset 5055 for platform/tdiary/filter
- Timestamp:
- 01/20/08 16:22:46 (10 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
platform/tdiary/filter/antirefspam/filter/antirefspam.rb
r4635 r5055 14 14 15 15 class AntirefspamFilter < Filter 16 # ͭ������ꤷ���ե������ǥХå������������� def debug_out(filename, str) 16 # 有効にすると指定したファイルにデバッグ情報文字列を追記する 17 def debug_out(filename, str) 17 18 if $debug 18 19 filename = File.join(@conf.data_path,"AntiRefSpamFilter",filename) … … 23 24 end 24 25 25 # str �˻�ꤵ�줿ʸ��Ŭ��ʥ���������뤫����å�26 # str に指定された文字列が適切なリンク先を含んでいるかをチェック 26 27 def isIncludeMyUrl(str) 27 # str ���RL���ޤޤ����뤫�ɤ���28 # str に日記のURLが含まれているかどうか 28 29 base_url = @conf.base_url 29 30 unless base_url.empty? … … 33 34 end 34 35 35 # str �˥ȥåץڡ���URL���ޤޤ����뤫�ɤ���36 # str にトップページURLが含まれているかどうか 36 37 unless @conf.index_page.empty? 37 38 if /\Ahttps?:\/\// =~ @conf.index_page … … 42 43 end 43 44 44 # str �˵������褬�ޤޤ����뤫�ɤ���45 # str に許容するリンク先が含まれているかどうか 45 46 if (myurl = @conf['antirefspam.myurl']) && !myurl.empty? 46 47 if str.include? myurl … … 65 66 conf_proxy_port = @conf['antirefspam.proxy_port'] != nil && @conf['antirefspam.proxy_port'].size > 0 ? @conf['antirefspam.proxy_port'].to_s : nil 66 67 67 if conf_disable == 'true' or # ����������å���ͭ���ʤ����ϥ��롼���� referer == nil or # ��������̵�� 68 referer.size <= 1 or # ���Υ���ʤǹ������郎���ʤ��ʤ����б����뤿�ᡢ����������ʸ���ξ��ϵ� isIncludeMyUrl(referer) # ��ʬ�����������Ͽ������ then 68 if conf_disable == 'true' or # リンク元チェックが有効ではない場合はスルーする 69 referer == nil or # リンク元が無い 70 referer.size <= 1 or # 一部のアンテナで更新時刻が取れなくなる問題に対応するため、リンク元が1文字以内の場合は許容 71 isIncludeMyUrl(referer) # 自分の日記内からのリンクは信頼する 72 then 69 73 return true 70 74 end 71 75 72 # "����Ǥ���L" �Ĥ��ļ��Ф���eferer�ȹ����뤫����å����� conf_trustedurl.each_line do |trusted| 76 # "信頼できるURL" を1つずつ取り出してrefererと合致するかチェックする 77 conf_trustedurl.each_line do |trusted| 73 78 trusted.sub!(/\r?\n/,'') 74 next if trusted =~ /\A(\#|\s*)\z/ # # �ޤ��϶�ǻϤޤ���ɤ���79 next if trusted =~ /\A(\#|\s*)\z/ # #または空白で始まる行は読み飛ばす 75 80 76 # �ޤ���"����Ǥ���RL" �� referer �˴ޤޤ����ɤ���81 # まずは "信頼できる URL" が referer に含まれるかどうか 77 82 if referer.include? trusted 78 83 debug_out("trusted", trusted+" (include?) "+referer) … … 80 85 end 81 86 82 # �ޤޤ����ä�����"����Ǥ���RL" ���ɽ���Ȥߤʤ��ƺƥ���å�87 # 含まれなかった場合は "信頼できる URL" を正規表現とみなして再チェック 83 88 begin 84 89 if referer =~ Regexp.new( trusted.gsub("/", "\\/").gsub(":", "\\:") ) … … 91 96 end 92 97 93 # URL����ꥹ�Ȥ� if conf_checkreftable == 'true' 94 # "URL����ꥹ�� �Ĥ��ļ��Ф���eferer�ȹ����뤫����å����� @conf.referer_table.each do |url, name| 98 # URL置換リストを見る 99 if conf_checkreftable == 'true' 100 # "URL置換リスト" を1つずつ取り出してrefererと合致するかチェックする 101 @conf.referer_table.each do |url, name| 95 102 begin 96 103 if /#{url}/i =~ referer && url != '^(.{50}).*$' … … 105 112 106 113 @work_path = File.join(@conf.data_path,"AntiRefSpamFilter") 107 @spamurl_list = File.join(@work_path,"spamurls") # referer spam �Υ�������108 @spamip_list = File.join(@work_path,"spamips") # referer spam ��P��109 @safeurl_list = File.join(@work_path,"safeurls") # �����餯����Τʤ���������110 111 # �ǥ��쥯�ȥ�ե����뤬¸�ߤ��ʤ�����114 @spamurl_list = File.join(@work_path,"spamurls") # referer spam のリンク元一覧 115 @spamip_list = File.join(@work_path,"spamips") # referer spam のIP一覧 116 @safeurl_list = File.join(@work_path,"safeurls") # おそらくは問題のないリンク元一覧 117 118 # ディレクトリ/ファイルが存在しなければ作る 112 119 unless File.exist? @work_path 113 120 Dir::mkdir(@work_path) … … 122 129 uri = URI.parse(referer) 123 130 temp_filename = File.join(@work_path,uri.host) 124 # ����å����ˤ�оݤΥɥᥤ���ä����ե�������131 # チェック時には対象のドメイン名を持った一時ファイルを作る 125 132 begin 126 133 File::open(temp_filename, File::RDONLY | File::CREAT | File::EXCL).close 127 134 128 # �� SPAM URL �Ȥߤʤ��������ʸ��� spamurls = IO::readlines(@spamurl_list).map {|url| url.chomp } 135 # 一度 SPAM URL とみなしたら以後は以後は拒否 136 spamurls = IO::readlines(@spamurl_list).map {|url| url.chomp } 129 137 if spamurls.include? referer 130 138 return false 131 139 end 132 140 133 # �� SPAM URL �Ǥʤ��������������� safeurls = IO::readlines(@safeurl_list).map {|url| url.chomp } 141 # 一度 SPAM URL でないと判断したら以後は許可 142 safeurls = IO::readlines(@safeurl_list).map {|url| url.chomp } 134 143 if safeurls.include? referer 135 144 return true 136 145 end 137 146 138 # ������ URL ��HTML �����äƤ��� Net::HTTP.version_1_2 # ���ޤ��ʤ��餷�� 147 # リンク元 URL の HTML を引っ張ってくる 148 Net::HTTP.version_1_2 # おまじないらしい 139 149 body = "" 140 150 begin … … 148 158 end 149 159 150 # body ���URL ���ޤޤ����ʤ��� SPAM �Ȥߤʤ�160 # body に日記の URL が含まれていなければ SPAM とみなす 151 161 unless isIncludeMyUrl(body) 152 162 File::open(@spamurl_list, "a+") {|f| … … 163 173 end 164 174 rescue 165 # ���顼���Ф�����@spamurl_list �����������ˤ�����175 # エラーが出た場合は @spamurl_list に入れない&リンク元にも入れない 166 176 return false 167 177 end 168 178 169 179 rescue StandardError, TimeoutError 170 # ���ߥ���å���ʤ顢����������˴�����ʤ�180 # 現在チェック中なら、今回はリンク元に勘定しない 171 181 return false 172 182 ensure … … 184 194 def log_spamcomment( diary, comment ) 185 195 @work_path = File.join(@conf.data_path,"AntiRefSpamFilter") 186 @spamcomment_list = File.join(@work_path,"spamcomments") # comment spam �ΰ�187 188 # �ǥ��쥯�ȥ�ե����뤬¸�ߤ��ʤ�����196 @spamcomment_list = File.join(@work_path,"spamcomments") # comment spam の一覧 197 198 # ディレクトリ/ファイルが存在しなければ作る 189 199 unless File.exist? @work_path 190 200 Dir::mkdir(@work_path) … … 204 214 205 215 def comment_filter( diary, comment ) 206 # �ĥå��ߤ���Ҥ餬�������������ޤޤ����ʤ������ if @conf['antirefspam.comment_kanaonly'] != nil 216 # ツッコミに日本語(ひらがな/カタカナ)が含まれていなければ不許可 217 if @conf['antirefspam.comment_kanaonly'] != nil 207 218 if @conf['antirefspam.comment_kanaonly'].to_s == 'true' 208 unless comment.body =~ /[ ��-����/219 unless comment.body =~ /[ぁ-んァ-ヴー]/ 209 220 log_spamcomment( diary, comment ) 210 221 return false … … 213 224 end 214 225 215 # �ĥå��ߤ������ꤷ��������ʤ��ʤ��� maxsize = @conf['antirefspam.comment_maxsize'].to_i 226 # ツッコミの文字数が指定した上限以内でないなら不許可 227 maxsize = @conf['antirefspam.comment_maxsize'].to_i 216 228 if maxsize > 0 217 229 unless comment.body.size <= maxsize … … 221 233 end 222 234 223 # NG��ɤ����ĤǤ��ޤ��������� if @conf['antirefspam.comment_ngwords'] != nil 235 # NGワードが1つでも含まれていたら不許可 236 if @conf['antirefspam.comment_ngwords'] != nil 224 237 ngwords = @conf['antirefspam.comment_ngwords'] 225 238 ngwords.to_s.each_line do |ngword| … … 230 243 end 231 244 232 # �ޤޤ����ä�����"NG��� ���ɽ���Ȥߤʤ��ƺƥ���å�245 # 含まれなかった場合は "NGワード" を正規表現とみなして再チェック 233 246 begin 234 247 if comment.body =~ Regexp.new( ngword, Regexp::MULTILINE )
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)