Throws SPAM Away - Version 2.5

Version Description

= 2.0 = IP IP

= 1.4 =

NG

= 1.3 =

= 1.2.1 =

= 1.2 = 1

= 1.1 =

= 1.0 =

Download this release

Release Info

Developer tsato
Plugin Icon wp plugin Throws SPAM Away
Version 2.5
Comparing to
See all releases

Code changes from version 2.4 to 2.5

Files changed (4) hide show
  1. hostbyip.php +3 -2
  2. readme.txt +32 -5
  3. throws_spam_away.class.php +183 -21
  4. throws_spam_away.php +9 -1
hostbyip.php CHANGED
@@ -16,8 +16,8 @@ $last_spam_comment_result = $newThrowsSpamAway->get_last_spam_comment($spam_ip);
16
  $last_comment_date = $last_spam_comment_result->post_date;
17
  $last_comment_post = get_permalink($last_spam_comment_result->post_id);
18
  $last_comment_post_title = get_the_title(get_post($last_spam_comment_result->post_id));
19
- ?>
20
- <!DOCTYPE html>
21
  <!--[if IE 8]>
22
  <html xmlns="http://www.w3.org/1999/xhtml" class="ie8 wp-toolbar" lang="ja" prefix="og: http://ogp.me/ns#" >
23
  <![endif]-->
@@ -56,6 +56,7 @@ Whois: <a href="http://whois.arin.net/rest/ip/<?php echo $spam_ip; ?>" target="_
56
  <div style="background: #999;color: #fff;margin:3px 0 0 0;">このIPからの最終投稿日時</div><?php echo $last_comment_date; ?><br />
57
  <div style="background: #999;color: #fff;margin:3px 0 0 0;">このIPからスパム投稿対象となったページ</div><a href="<?php echo $last_comment_post; ?>" target="_blank"><?php echo $last_comment_post_title; ?></a><br />
58
  <?php } ?>
 
59
  <div style="text-align:right;"><a href="javascript:void(0);" onclick="window.close();">閉じる</a></div>
60
  </div>
61
  </body>
16
  $last_comment_date = $last_spam_comment_result->post_date;
17
  $last_comment_post = get_permalink($last_spam_comment_result->post_id);
18
  $last_comment_post_title = get_the_title(get_post($last_spam_comment_result->post_id));
19
+ $is_spam_champuru = ( $newThrowsSpamAway->rejectSpamIP($spam_ip) ? FALSE : TRUE );
20
+ ?><!DOCTYPE html>
21
  <!--[if IE 8]>
22
  <html xmlns="http://www.w3.org/1999/xhtml" class="ie8 wp-toolbar" lang="ja" prefix="og: http://ogp.me/ns#" >
23
  <![endif]-->
56
  <div style="background: #999;color: #fff;margin:3px 0 0 0;">このIPからの最終投稿日時</div><?php echo $last_comment_date; ?><br />
57
  <div style="background: #999;color: #fff;margin:3px 0 0 0;">このIPからスパム投稿対象となったページ</div><a href="<?php echo $last_comment_post; ?>" target="_blank"><?php echo $last_comment_post_title; ?></a><br />
58
  <?php } ?>
59
+ <h4>スパムフィルター:<?php echo ($is_spam_champuru ? "スパムちゃんぷるー存在IPアドレス" : "未検出" ); ?></h4>
60
  <div style="text-align:right;"><a href="javascript:void(0);" onclick="window.close();">閉じる</a></div>
61
  </div>
62
  </body>
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: taman777
3
  Donate link: http://gti.jp/
4
  Tags: comments, spam
5
  Requires at least: 3.1
6
- Tested up to: 3.5.1
7
- Stable tag: 2.4
8
 
9
  コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
10
 
@@ -24,10 +24,32 @@ Stable tag: 2.4
24
  日本語が入っていないと許可しない設定を「オン・オフ」出来るようになっています。
25
  リンクと思わしき'http'を含んだ文字列が許容数(初期設定は3つ)を超えて包含される場合にエラーとします。
26
 
27
- 以前にスパムとしてチェックした投稿のIPアドレス及び、任意のIPアドレスでの制御も出来るようになっています。
28
- IPアドレスの指定は「改行」区切りで複数入力できますが、「192.168.1.0/24」のようにIPアドレスの範囲指定も可能です。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  ※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
30
-  [192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否対象とします。
 
 
 
 
 
 
 
 
31
 
32
  ・バージョン2.4
33
   スパム情報収集機能を「スパムコメント情報を保存する」にした場合に限り、「一定時間内スパム認定機能」が作動するように出来ます。
@@ -53,6 +75,11 @@ IPアドレスの指定は「改行」区切りで複数入力できますが、
53
  ○このIPアドレスからの最終投稿日時
54
  ○このIPアドレスからスパム投稿を受けた記事(リンク)
55
 
 
 
 
 
 
56
  ・バージョン2.3.1, 2.3.2 不具合修正 仕様は2.3のままです。
57
  ・バージョン2.3スパムコメント数を保持出来るようにしました。設定を変更しないと機能しませんのでご注意ください。
58
   保持データは下記の通り
3
  Donate link: http://gti.jp/
4
  Tags: comments, spam
5
  Requires at least: 3.1
6
+ Tested up to: 3.5.2
7
+ Stable tag: 2.5
8
 
9
  コメントに日本語が使用されていないものや任意のIPアドレスからの投稿を無視するプラグイン
10
 
24
  日本語が入っていないと許可しない設定を「オン・オフ」出来るようになっています。
25
  リンクと思わしき'http'を含んだ文字列が許容数(初期設定は3つ)を超えて包含される場合にエラーとします。
26
 
27
+ IPアドレスによる投稿制御が出来ます。
28
+
29
+ 以前スパムとしてチェックした投稿のIPアドレス及び、任意のIPアドレスでの制御も出来るようになっています。
30
+
31
+ 「スパムちゃんぷるー(ベータ)」http://spam-champuru.livedoor.com/dnsbl/ を利用してスパム判定することも可能です。
32
+ 設定にてON/OFF出来ます。
33
+
34
+ 「IPアドレス ホワイトリスト」があります。ホワイトリストに登録されたIPアドレスからの投稿はノーチェックで投稿完了されます。
35
+ ※ホワイトリストが一番強力にしてありますので、このIPアドレスがAkismetで捉えられていてもスパムちゃんぷるーでスパム扱いになったとしても優先で通過させます。
36
+
37
+ スパムデータベースでスパム投稿の増減を確認出来ます。
38
+ 表示期間を設定出来ますのでお好みの周期を設定してください。
39
+ また表示期間を過ぎたデータを削除することも可能です。
40
+ テストなどでスパム投稿したIPアドレスはスパム投稿一覧よりボタンひとつで削除出来ます。
41
+
42
+ IPアドレスの指定「ブロックリスト」「ホワイトリスト」共に「改行」区切りで複数入力できますが、「192.168.1.0/24」のようにIPアドレスの範囲指定も可能です。
43
  ※例:192.168.0.1,192.168.1.0/24,69.208.0.0/16 と指定した場合
44
+  [192.168.0.1]と[192.168.1.0 ~ 192.168.1.255]と[69.208.0.0 ~ 69.208.255.255]のIPアドレスを拒否(または優先通過)対象とします。
45
+
46
+ ・バージョン2.5
47
+  「スパムちゃんぷるー(ベータ)」http://spam-champuru.livedoor.com/dnsbl/ を利用出来ます!スパムちゃんぷるーでスパム判定する機能です。
48
+  「IPアドレス ホワイトリスト」を導入しました。ホワイトリストに登録されたIPアドレスからの投稿はノーチェックで投稿完了されます。
49
+  ※ホワイトリストが一番強力にしてありますので、このIPアドレスがAkismetで捉えられていてもスパムちゃんぷるーでスパム扱いになったとしても優先で通過させます。
50
+  スパムデータベースの表示期間を指定するようにしました。また表示期間を過ぎたデータを削除することも出来るようにしました。
51
+  テストでスパム投稿したIPアドレスなどをスパムデータベースから削除する機能を付けました。
52
+  スパム投稿データに「スパムちゃんぷるー」の結果も付加しました。
53
 
54
  ・バージョン2.4
55
   スパム情報収集機能を「スパムコメント情報を保存する」にした場合に限り、「一定時間内スパム認定機能」が作動するように出来ます。
75
  ○このIPアドレスからの最終投稿日時
76
  ○このIPアドレスからスパム投稿を受けた記事(リンク)
77
 
78
+  このバージョンよりファイル構成が変更になり、今まで「throws_spam_away.php」にプログラムのすべてが存在しましたが、プロセスの部分を
79
+  「throws_spam_away.php」に残し、クラスの部分を「throws_spam_away.class.php」に移しました。
80
+  これにより、throws_spam_away.class.php」を外部から読込みメソッドを使用することを目論んでいます。
81
+  ※まだ実験段階です。
82
+
83
  ・バージョン2.3.1, 2.3.2 不具合修正 仕様は2.3のままです。
84
  ・バージョン2.3スパムコメント数を保持出来るようにしました。設定を変更しないと機能しませんのでご注意ください。
85
   保持データは下記の通り
throws_spam_away.class.php CHANGED
@@ -9,17 +9,29 @@
9
  class ThrowsSpamAway {
10
 
11
  // version
12
- var $version = '2.4';
13
  var $table_name = "";
14
 
15
  public function __construct($flg = FALSE) {
16
  global $default_spam_data_save;
17
- if ($flg == FALSE) {
18
- add_action( 'admin_menu', array( $this, 'admin_menu' ) );
19
- }
20
  global $wpdb;
21
  // 接頭辞(wp_)を付けてテーブル名を設定
22
  $this->table_name = $wpdb->prefix . 'tsa_spam';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  }
24
 
25
  /**
@@ -65,6 +77,8 @@ class ThrowsSpamAway {
65
  * @param string $ip_address
66
  */
67
  function save_post_meta( $post_id, $ip_address ) {
 
 
68
  if ( get_option('tsa_spam_data_save', $default_spam_data_save) != "1" ) return;
69
 
70
  global $wpdb;
@@ -101,14 +115,38 @@ class ThrowsSpamAway {
101
  global $default_spam_limit_over_interval_error_msg;
102
  global $error_type;
103
 
 
104
  if( $user_ID ) {
105
  return $id;
106
  }
107
  // コメント(comment)及び名前(author)の中も検査
108
  $author = $_POST["author"];
109
  $comment = $_POST["comment"];
110
- // IP系の検査
 
111
  $ip = $_SERVER['REMOTE_ADDR'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  if ( !$newThrowsSpamAway->ip_check( $ip ) ) {
113
  // アウト!
114
  } else
@@ -157,6 +195,14 @@ class ThrowsSpamAway {
157
  global $wpdb; // WordPress DBアクセス
158
  global $newThrowsSpamAway;
159
  global $error_type;
 
 
 
 
 
 
 
 
160
  // IP制御 WordPressのスパムチェックにてスパム扱いしている投稿のIPをブロックするか
161
  $ip_block_from_spam_chk_flg = get_option( 'tsa_ip_block_from_spam_chk_flg' );
162
 
@@ -197,6 +243,49 @@ class ThrowsSpamAway {
197
  return TRUE;
198
  }
199
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  /**
201
  * CIDRチェック
202
  * @param string $ip
@@ -392,8 +481,25 @@ class ThrowsSpamAway {
392
  global $default_spam_limit_over_interval;
393
  global $default_spam_limit_over_interval_error_msg;
394
 
 
 
 
 
395
  // 設定完了の場合はメッセージ表示
396
  $_saved = FALSE;
 
 
 
 
 
 
 
 
 
 
 
 
 
397
  if ( $_GET['settings-updated'] == "true" ) {
398
  $_saved = TRUE;
399
  }
@@ -458,6 +564,14 @@ function addIpAddresses(newAddressStr) {
458
  }
459
  return false;
460
  }
 
 
 
 
 
 
 
 
461
  </script>
462
  <div class="wrap">
463
  <h2>Throws SPAM Away設定</h2>
@@ -600,6 +714,17 @@ function addIpAddresses(newAddressStr) {
600
  </table>
601
  <h3>投稿IPアドレスによる制御設定</h3>
602
  <table class="form-table">
 
 
 
 
 
 
 
 
 
 
 
603
  <tr valign="top">
604
  <th scope="row">WordPressのコメントで「スパム」にしたIPからの投稿にも採用する</th>
605
  <td><?php
@@ -609,7 +734,7 @@ function addIpAddresses(newAddressStr) {
609
  }
610
  ?> <label><input type="checkbox"
611
  name="tsa_ip_block_from_spam_chk_flg" value="1"
612
- <?php echo $chk; ?> />&nbsp;スパム投稿設定したIPアドレスからの投稿も無視する</label><br />
613
  <?php
614
  // wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
615
  $results = $wpdb->get_results("SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC ");
@@ -648,6 +773,16 @@ function addIpAddresses(newAddressStr) {
648
  size="80"
649
  value="<?php echo get_option('tsa_block_ip_address_error_message', $default_block_ip_address_error_msg);?>" /><br />(初期設定:<?php echo $default_block_ip_address_error_msg; ?>)</td>
650
  </tr>
 
 
 
 
 
 
 
 
 
 
651
  </table>
652
  <h3>スパムデータベース</h3>
653
  <table class="form-table">
@@ -660,7 +795,24 @@ function addIpAddresses(newAddressStr) {
660
  }
661
  ?> <label><input type="checkbox"
662
  name="tsa_spam_data_save" value="1" <?php echo $chk; ?> />&nbsp;スパムコメント情報を保存する</label><br />※Throws
663
- SPAM Away設定画面表示時に時間がかかることがあります。<br />※「保存する」を解除した場合でもテーブルは残りますので30日以内の取得データは表示されます。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
664
  </td>
665
  </tr>
666
  <tr valign="top">
@@ -693,7 +845,7 @@ function addIpAddresses(newAddressStr) {
693
 
694
  <input type="hidden" name="action" value="update" /> <input
695
  type="hidden" name="page_options"
696
- value="tsa_on_flg,tsa_japanese_string_min_count,tsa_back_second,tsa_caution_message,tsa_error_message,tsa_ng_keywords,tsa_ng_key_error_message,tsa_must_keywords,tsa_must_key_error_message,tsa_tb_on_flg,tsa_tb_url_flg,tsa_block_ip_addresses,tsa_ip_block_from_spam_chk_flg,tsa_block_ip_address_error_message,tsa_url_count_on_flg,tsa_ok_url_count,tsa_url_count_over_error_message,tsa_spam_data_save,tsa_spam_limit_flg,tsa_spam_limit_minutes,tsa_spam_limit_count,tsa_spam_limit_over_interval,tsa_spam_limit_over_interval_error_message" />
697
  <p class="submit">
698
  <input type="submit" class="button-primary"
699
  value="<?php _e('Save Changes') ?>" />
@@ -702,12 +854,13 @@ function addIpAddresses(newAddressStr) {
702
  <?php
703
  if ( get_option( 'tsa_spam_data_save' ) == "1" ) {
704
  // 日数
705
- $gdays = 30;
 
706
  // 表カラー
707
  $unique_color="#114477";
708
  $web_color="#3377B6";
709
  ?>
710
- <h3>スパム投稿30日間の推移</h3>
711
  <div class="clear"></div>
712
 
713
  <div class="clear" style="background-color: #efefef;">
@@ -786,7 +939,7 @@ print "><div style='float:left;width:100%;font-family:Helvetica;font-size:7pt;te
786
  <?php
787
  // wp_tsa_spam の ip_address カラムに存在するIP_ADDRESS投稿は無視するか
788
  $results = $wpdb->get_results(
789
- "SELECT count(ip_address) as cnt,ip_address,max(ppd) as post_date FROM (select ip_address, SUBSTRING(post_date,1,10) as ppd from $this->table_name) as D
790
  WHERE ppd >= '". gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays )."'
791
  GROUP BY ip_address
792
  ORDER BY cnt DESC"
@@ -801,6 +954,7 @@ ORDER BY cnt DESC"
801
  ※「このIPアドレスを任意のブロック対象IPアドレスにコピーする」ボタンを押した場合は上の<b>「変更を保存」</b>をクリックし内容を保存してください。
802
  </p>
803
  <p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
 
804
  <?php if ( count( $results ) > 0 ) {
805
  $p_url = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
806
  wp_enqueue_script("jquery.tablesorter", $p_url."js/jquery.tablesorter.min.js", array('jquery'), FALSE);
@@ -949,10 +1103,11 @@ jQuery(function() {
949
  jQuery('#spam_list').tablesorter({
950
  widgets: ['zebra'],
951
  headers: {
952
- 0: {id:"ipAddress"},
953
- 3: {sorter:false},
954
- 2: { sorter: "shortDate" }
955
- }
 
956
  });
957
 
958
  });
@@ -969,7 +1124,7 @@ jQuery(function() {
969
  <tr>
970
  <th class="cols0">IPアドレス</th>
971
  <th class="cols1">投稿数</th>
972
- <th class="cols2">最終投稿日</th>
973
  <th class="cols3">スパムIP登録</th>
974
  </tr>
975
  </thead>
@@ -983,14 +1138,17 @@ jQuery(function() {
983
  <tr>
984
  <td>
985
  <b><a href="javascript:void(0);"
986
- onclick="window.open('<?php echo $p_url; ?>hostbyip.php?ip=<?php echo $spam_ip; ?>', 'hostbyip', 'width=350,height=250,scrollbars=no,location=no,menubar=no,toolbar=no,directories=no,status=no');"><?php echo $spam_ip; ?>
987
- </a></b>
 
 
 
988
  </td>
989
  <td><?php echo $spam_cnt; ?>回</td>
990
  <td><?php echo $last_post_date; ?></td>
991
- <td>&nbsp;<input type="button"
992
  onclick="javascript:addIpAddresses('<?php echo $spam_ip; ?>');"
993
- value="このIPアドレスを任意のブロック対象IPアドレスにコピーする" /></td>
994
  </tr>
995
  <?php
996
  }
@@ -1003,9 +1161,12 @@ jQuery(function() {
1003
  </div>
1004
  <?php } ?>
1005
  </form>
 
 
 
 
1006
  <p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
1007
  <div class="clear"></div>
1008
-
1009
  </div>
1010
 
1011
  <?php
@@ -1067,4 +1228,5 @@ jQuery(function() {
1067
  }
1068
  return NULL;
1069
  }
 
1070
  }
9
  class ThrowsSpamAway {
10
 
11
  // version
12
+ var $version = '2.5';
13
  var $table_name = "";
14
 
15
  public function __construct($flg = FALSE) {
16
  global $default_spam_data_save;
 
 
 
17
  global $wpdb;
18
  // 接頭辞(wp_)を付けてテーブル名を設定
19
  $this->table_name = $wpdb->prefix . 'tsa_spam';
20
+ if ($flg == FALSE) {
21
+ add_action( 'admin_menu', array( $this, 'admin_menu' ) );
22
+ global $default_spam_keep_day_count;
23
+ global $lower_spam_keep_day_count;
24
+
25
+ // 保存期間終了したデータ削除
26
+ $skdc = intval( get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count) );
27
+ if ( $skdc < $lower_spam_keep_day_count ) { $skdc = $lower_spam_keep_day_count; }
28
+ if ( get_option('tsa_spam_data_delete_flg', "") == "1" ) {
29
+ // 期間 get_option('tsa_spam_keep_day_count') 日
30
+ $wpdb->query(
31
+ "DELETE FROM ".$this->table_name." WHERE post_date < '".gmdate('Y-m-d 23:59:59', current_time('timestamp')-86400 * $skdc)."'"
32
+ );
33
+ }
34
+ }
35
  }
36
 
37
  /**
77
  * @param string $ip_address
78
  */
79
  function save_post_meta( $post_id, $ip_address ) {
80
+ global $default_spam_data_save;
81
+
82
  if ( get_option('tsa_spam_data_save', $default_spam_data_save) != "1" ) return;
83
 
84
  global $wpdb;
115
  global $default_spam_limit_over_interval_error_msg;
116
  global $error_type;
117
 
118
+ // ログインしている場合は通過させます。
119
  if( $user_ID ) {
120
  return $id;
121
  }
122
  // コメント(comment)及び名前(author)の中も検査
123
  $author = $_POST["author"];
124
  $comment = $_POST["comment"];
125
+
126
+ // チェック対象IPアドレス
127
  $ip = $_SERVER['REMOTE_ADDR'];
128
+
129
+ // ホワイトリスト優先通過
130
+ // IP制御 任意のIPアドレスをあればブロックする
131
+ $white_ip_addresses = get_option( 'tsa_white_ip_addresses', "" );
132
+ if ( $white_ip_addresses != NULL && $white_ip_addresses != "" ) {
133
+ // 改行区切りの場合はカンマ区切りに文字列置換後リスト化
134
+ $white_ip_addresses = str_replace("\n", ",", $white_ip_addresses);
135
+ $ip_list = mb_split( ",", $white_ip_addresses );
136
+ foreach ( $ip_list as $_ip ) {
137
+ // 指定IPが範囲指定の場合 例:192.168.1.0/24
138
+ if ( strpos( $_ip, "/" ) != FALSE ) {
139
+ if ( $this->inCIDR( $ip, $_ip ) ) {
140
+ // 通過対象
141
+ return $id;
142
+ }
143
+ } elseif ( trim( $_ip ) == trim( $ip ) ) {
144
+ // 通過対象
145
+ return $id;
146
+ }
147
+ }
148
+ }
149
+ // IP系の検査
150
  if ( !$newThrowsSpamAway->ip_check( $ip ) ) {
151
  // アウト!
152
  } else
195
  global $wpdb; // WordPress DBアクセス
196
  global $newThrowsSpamAway;
197
  global $error_type;
198
+ // スパムフィルター利用あれば始めに通す
199
+ // 1.スパムちゃんぷるー
200
+ $spam_filter_spam_champuru_flg = get_option( 'tsa_spam_champuru_flg' );
201
+ if ( get_option( 'tsa_spam_champuru_flg', "" ) == "1" ) {
202
+ return $this->rejectSpamIP( $target_ip );
203
+ }
204
+ // 2.以降あれば追加
205
+
206
  // IP制御 WordPressのスパムチェックにてスパム扱いしている投稿のIPをブロックするか
207
  $ip_block_from_spam_chk_flg = get_option( 'tsa_ip_block_from_spam_chk_flg' );
208
 
243
  return TRUE;
244
  }
245
 
246
+ /**
247
+ * スパムちゃんぷるー利用ブロック
248
+ */
249
+ function rejectSpamIP( $ip ) {
250
+ global $spam_champuru_host;
251
+
252
+ $spam_IP = '127.0.0.2';
253
+ $host = $spam_champuru_host;
254
+ $pattern = '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/';
255
+ $check_IP = trim(preg_match($pattern, $ip) ? $ip : $_SERVER['REMOTE_ADDR']);
256
+ $spam = false;
257
+ if (preg_match($pattern, $check_IP)) {
258
+ $host = implode('.',array_reverse(split('\.',$check_IP))) . '.' . $host;
259
+ if (function_exists('dns_get_record')) {
260
+ $check_recs = dns_get_record($host, DNS_A);
261
+ if (isset($check_recs[0]['ip'])) $spam = ($check_recs[0]['ip'] === $spam_IP);
262
+ unset($check_recs);
263
+ } elseif (function_exists('gethostbyname')) {
264
+ $checked = (gethostbyname($host) === $spam_IP);
265
+ } elseif (class_exists('Net_DNS_Resolver')) {
266
+ $resolver = new Net_DNS_Resolver();
267
+ $response = $resolver->query($host, 'A');
268
+ if ($response) {
269
+ foreach ($response->answer as $rr) {
270
+ if ($rr->type === 'A') {
271
+ $spam = ($rr->address === $spam_IP);
272
+ break;
273
+ }
274
+ }
275
+ }
276
+ unset($response);
277
+ unset($resolver);
278
+ } elseif (function_exists('checkdnsrr')) {
279
+ $spam = (checkdnsrr($host, "A") === true);
280
+ }
281
+ }
282
+ if ($spam) {
283
+ $error_type = "block_ip";
284
+ return FALSE;
285
+ }
286
+ return TRUE;
287
+ }
288
+
289
  /**
290
  * CIDRチェック
291
  * @param string $ip
481
  global $default_spam_limit_over_interval;
482
  global $default_spam_limit_over_interval_error_msg;
483
 
484
+ global $default_spam_display_day_count;
485
+
486
+ global $default_spam_keep_day_count;
487
+
488
  // 設定完了の場合はメッセージ表示
489
  $_saved = FALSE;
490
+ // スパム情報から 特定IPアドレス削除
491
+ if ( $_POST['act'] != NULL && $_POST['act'] == "remove_ip" ) {
492
+ $remove_ip_address = @htmlspecialchars($_POST['ip_address']);
493
+ if ( !isset($remove_ip_address) || strlen($remove_ip_address) == 0 ) {
494
+ // N/A
495
+ } else {
496
+ // スパムデータベースから特定IP情報削除
497
+ $wpdb->query(
498
+ "DELETE FROM ".$this->table_name." WHERE ip_address = '".$remove_ip_address."' "
499
+ );
500
+ $_saved = TRUE;
501
+ }
502
+ }
503
  if ( $_GET['settings-updated'] == "true" ) {
504
  $_saved = TRUE;
505
  }
564
  }
565
  return false;
566
  }
567
+ function removeIpAddressOnData(ipAddressStr) {
568
+ if (confirm('['+ipAddressStr+'] をスパムデータベースから削除します。よろしいですか?この操作は取り消せません')) {
569
+ jQuery('#remove_ip_address').val(ipAddressStr);
570
+ jQuery('#remove').submit();
571
+ } else {
572
+ return false;
573
+ }
574
+ }
575
  </script>
576
  <div class="wrap">
577
  <h2>Throws SPAM Away設定</h2>
714
  </table>
715
  <h3>投稿IPアドレスによる制御設定</h3>
716
  <table class="form-table">
717
+ <tr valign="top">
718
+ <th scope="row">SPAMブラックリスト利用</th>
719
+ <td><?php
720
+ $chk = "";
721
+ if (get_option('tsa_spam_champuru_flg', "") == "1" ) {
722
+ $chk = "checked=\"checked\"";
723
+ }
724
+ ?>
725
+ <label><input type="checkbox" name="tsa_spam_champuru_flg" value="1" <?php echo $chk; ?> /><a href="http://spam-champuru.livedoor.com/dnsbl/">スパムちゃんぷるーDNSBL</a>に登録されているIPアドレスからのコメントを拒否する</label>
726
+ </td>
727
+ </tr>
728
  <tr valign="top">
729
  <th scope="row">WordPressのコメントで「スパム」にしたIPからの投稿にも採用する</th>
730
  <td><?php
734
  }
735
  ?> <label><input type="checkbox"
736
  name="tsa_ip_block_from_spam_chk_flg" value="1"
737
+ <?php echo $chk; ?> />&nbsp;スパム投稿設定したIPアドレスからの投稿も無視する</label>&nbsp;※Akismet等で自動的にスパムマークされたものも含む<br />
738
  <?php
739
  // wp_commentsの comment_approved カラムが「spam」のIP_ADDRESSからの投稿は無視する
740
  $results = $wpdb->get_results("SELECT DISTINCT comment_author_IP FROM $wpdb->comments WHERE comment_approved = 'spam' ORDER BY comment_author_IP ASC ");
773
  size="80"
774
  value="<?php echo get_option('tsa_block_ip_address_error_message', $default_block_ip_address_error_msg);?>" /><br />(初期設定:<?php echo $default_block_ip_address_error_msg; ?>)</td>
775
  </tr>
776
+
777
+ <tr style="background-color: #efefef;"><td colspan="2"><hr />※上記のスパムチェックから除外するIPアドレスがあれば下記に設定してください。優先的に通過させます。<br />※トラックバックは優先通過ではありません。</td></tr>
778
+ <tr style="background-color: #efefef;" valign="top">
779
+ <th scope="row"><strong>IP制御免除<br />ホワイトリスト</strong><br />※ここに登録したIPアドレスはスパムフィルタを掛けず優先的に通します。<br />※日本語以外の言語でご利用になられるお客様のIPアドレスを登録するなどご利用ください。<br />改行区切りで複数設定できます。範囲指定も可能です。(半角数字とスラッシュ、ドットのみ)</th>
780
+ <td>
781
+ <textarea name="tsa_white_ip_addresses"
782
+ id="tsa_white_ip_addresses" cols="80" rows="10"><?php echo get_option('tsa_white_ip_addresses', "");?></textarea>
783
+ </td>
784
+ </tr>
785
+
786
  </table>
787
  <h3>スパムデータベース</h3>
788
  <table class="form-table">
795
  }
796
  ?> <label><input type="checkbox"
797
  name="tsa_spam_data_save" value="1" <?php echo $chk; ?> />&nbsp;スパムコメント情報を保存する</label><br />※Throws
798
+ SPAM Away設定画面表示時に時間がかかることがあります。<br />※「保存する」を解除した場合でもテーブルは残りますので<?php echo get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count); ?>日以内の取得データは表示されます。
799
+ </td>
800
+ </tr>
801
+ <tr>
802
+ <th scope="row">スパムデータを表示する期間</th>
803
+ <td>
804
+ <input
805
+ type="text" name="tsa_spam_keep_day_count" size="3"
806
+ value="<?php echo get_option('tsa_spam_keep_day_count', $default_spam_keep_day_count); ?>" />日分(最低7日)&nbsp;
807
+ <?php
808
+ $chk = "";
809
+ if (get_option('tsa_spam_data_delete_flg', "") == "1") {
810
+ $chk = "checked=\"checked\"";
811
+ }
812
+ ?>
813
+ <label><input type="checkbox" name="tsa_spam_data_delete_flg" value="1"
814
+ <?php echo $chk; ?> />&nbsp;期間が過ぎたデータを削除する</label><br />
815
+ ※一度消したデータは復活出来ませんのでご注意ください。また最低7日分は保存されます。
816
  </td>
817
  </tr>
818
  <tr valign="top">
845
 
846
  <input type="hidden" name="action" value="update" /> <input
847
  type="hidden" name="page_options"
848
+ value="tsa_on_flg,tsa_japanese_string_min_count,tsa_back_second,tsa_caution_message,tsa_error_message,tsa_ng_keywords,tsa_ng_key_error_message,tsa_must_keywords,tsa_must_key_error_message,tsa_tb_on_flg,tsa_tb_url_flg,tsa_block_ip_addresses,tsa_ip_block_from_spam_chk_flg,tsa_block_ip_address_error_message,tsa_url_count_on_flg,tsa_ok_url_count,tsa_url_count_over_error_message,tsa_spam_data_save,tsa_spam_limit_flg,tsa_spam_limit_minutes,tsa_spam_limit_count,tsa_spam_limit_over_interval,tsa_spam_limit_over_interval_error_message,tsa_spam_champuru_flg,tsa_spam_keep_day_count,tsa_spam_data_delete_flg,tsa_white_ip_addresses" />
849
  <p class="submit">
850
  <input type="submit" class="button-primary"
851
  value="<?php _e('Save Changes') ?>" />
854
  <?php
855
  if ( get_option( 'tsa_spam_data_save' ) == "1" ) {
856
  // 日数
857
+ $gdays = get_option( 'tsa_spam_keep_day_count', $default_spam_keep_day_count);
858
+ if ( $gdays < $lower_spam_keep_day_count ) { $gdays = $lower_spam_keep_day_count; }
859
  // 表カラー
860
  $unique_color="#114477";
861
  $web_color="#3377B6";
862
  ?>
863
+ <h3>スパム投稿<?php echo $gdays; ?>日間の推移</h3>
864
  <div class="clear"></div>
865
 
866
  <div class="clear" style="background-color: #efefef;">
939
  <?php
940
  // wp_tsa_spam の ip_address カラムに存在するIP_ADDRESS投稿は無視するか
941
  $results = $wpdb->get_results(
942
+ "SELECT count(ip_address) as cnt,ip_address,max(ppd) as post_date FROM (select ip_address, post_date as ppd from $this->table_name) as D
943
  WHERE ppd >= '". gmdate( 'Y-m-d', current_time( 'timestamp' ) - 86400 * $gdays )."'
944
  GROUP BY ip_address
945
  ORDER BY cnt DESC"
954
  ※「このIPアドレスを任意のブロック対象IPアドレスにコピーする」ボタンを押した場合は上の<b>「変更を保存」</b>をクリックし内容を保存してください。
955
  </p>
956
  <p>※IPアドレスをクリックすると特定のホストが存在するか確認し存在する場合は表示されます。</p>
957
+ <p>「スパムデータから削除する」ボタンを押しますと該当IPアドレスのスパム投稿データが削除されます。テストしたあとの削除などに使用してください。</p>
958
  <?php if ( count( $results ) > 0 ) {
959
  $p_url = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
960
  wp_enqueue_script("jquery.tablesorter", $p_url."js/jquery.tablesorter.min.js", array('jquery'), FALSE);
1103
  jQuery('#spam_list').tablesorter({
1104
  widgets: ['zebra'],
1105
  headers: {
1106
+ 0: { id: "ipAddress" },
1107
+ 1: { sorter: "digit" },
1108
+ 2: { sorter: "shortDate" },
1109
+ 3: { sorter: false }
1110
+ }
1111
  });
1112
 
1113
  });
1124
  <tr>
1125
  <th class="cols0">IPアドレス</th>
1126
  <th class="cols1">投稿数</th>
1127
+ <th class="cols2">最終投稿日時</th>
1128
  <th class="cols3">スパムIP登録</th>
1129
  </tr>
1130
  </thead>
1138
  <tr>
1139
  <td>
1140
  <b><a href="javascript:void(0);"
1141
+ onclick="window.open('<?php echo $p_url; ?>hostbyip.php?ip=<?php echo $spam_ip; ?>', 'hostbyip', 'width=350,height=300,scrollbars=no,location=no,menubar=no,toolbar=no,directories=no,status=no');"><?php echo $spam_ip; ?>
1142
+ </a></b><br clear="all" />
1143
+ <input type="button"
1144
+ onclick="javascript:removeIpAddressOnData('<?php echo $spam_ip; ?>');"
1145
+ value="スパムデータから削除する" />
1146
  </td>
1147
  <td><?php echo $spam_cnt; ?>回</td>
1148
  <td><?php echo $last_post_date; ?></td>
1149
+ <td><input type="button"
1150
  onclick="javascript:addIpAddresses('<?php echo $spam_ip; ?>');"
1151
+ value="ブロック対象IPアドレスにコピー[<?php echo $spam_ip; ?>]" /></td>
1152
  </tr>
1153
  <?php
1154
  }
1161
  </div>
1162
  <?php } ?>
1163
  </form>
1164
+ <form method="post" id="remove">
1165
+ <input type="hidden" name="ip_address" id="remove_ip_address" value="" />
1166
+ <input type="hidden" name="act" value="remove_ip" />
1167
+ </form>
1168
  <p>スパム投稿IPアドレスを参考にアクセス禁止対策を行なってください。</p>
1169
  <div class="clear"></div>
 
1170
  </div>
1171
 
1172
  <?php
1228
  }
1229
  return NULL;
1230
  }
1231
+
1232
  }
throws_spam_away.php CHANGED
@@ -4,7 +4,7 @@
4
  Plugin URI: http://gti.jp/tsa/
5
  Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
6
  Author: 株式会社ジーティーアイ さとう たけし
7
- Version: 2.4
8
  Author URI: http://gti.jp/
9
  */
10
  require_once 'throws_spam_away.class.php';
@@ -49,6 +49,14 @@ $default_spam_limit_count = 2; // 2回までは許そうか。
49
  $default_spam_limit_over_interval = 10; // だがそれを超えたら(デフォルト3回目以降)10分はOKコメントでもスパム扱いするんでよろしく!
50
  $default_spam_limit_over_interval_error_msg = ""; // そしてその際のエラーメッセージは・・・
51
 
 
 
 
 
 
 
 
 
52
  /** オプションキー */
53
  // 日本語が存在しない時エラーとするかフラグ [tsa_on_flg] 1:する 2:しない
54
  // 日本語文字列含有数 (入力値以下ならエラー) [tsa_japanese_string_min_count] 数値型
4
  Plugin URI: http://gti.jp/tsa/
5
  Description: コメント内に日本語の記述が存在しない場合はあたかも受け付けたように振る舞いながらも捨ててしまうプラグイン
6
  Author: 株式会社ジーティーアイ さとう たけし
7
+ Version: 2.5
8
  Author URI: http://gti.jp/
9
  */
10
  require_once 'throws_spam_away.class.php';
49
  $default_spam_limit_over_interval = 10; // だがそれを超えたら(デフォルト3回目以降)10分はOKコメントでもスパム扱いするんでよろしく!
50
  $default_spam_limit_over_interval_error_msg = ""; // そしてその際のエラーメッセージは・・・
51
 
52
+ // スパムデータ保持期間(日)
53
+ $default_spam_keep_day_count = 30;
54
+ // 最低保存期間(日)
55
+ $lower_spam_keep_day_count = 7;
56
+
57
+ // スパムちゃんぷるーホスト
58
+ $spam_champuru_host = "dnsbl.spam-champuru.livedoor.com";
59
+
60
  /** オプションキー */
61
  // 日本語が存在しない時エラーとするかフラグ [tsa_on_flg] 1:する 2:しない
62
  // 日本語文字列含有数 (入力値以下ならエラー) [tsa_japanese_string_min_count] 数値型