垃圾評論一般是由機器發布了這樣可以導致幾分鐘內發上萬千上萬條垃圾信息了,這些對于我們來講沒有任何作用了,那么要如何來屏蔽這些垃圾評論呢?
大部分垃圾評論都是用自動化軟件來發的,它會先GET一個頁面,然后再往wp-comments-post.php文件POST內容.
例如:"GET /archives/589.html HTTP/1.1" 200 8490
"POST /wp-comments-post.php HTTP/1.1" 302 26
1、使用插件
垃圾評論過濾:Akismet插件
wordpress評論滑動解鎖:myQaptcha插件
發現效果不好,Akismet雖然能過濾垃圾評論但是阻止不了機器人提交評論,而且一來就是幾百個連接,VPS負載直接飆到4點幾,CPU占用率也很高,導致博客打開異常慢,上個月Akismet統計過濾了1,477,296條的垃圾評論怪不得會慢。
myQaptcha安裝后沒有起色,看日志里被繞過了。
2、直接屏蔽IP
網上找了一個類似功能修改下,先看下IP在日志里是第幾個字段,第一個就填$1,第二個就填$2以此類推.
先從日志中過濾出IP,代碼如下:
- awk '/wp-comments-post/ { printf $1 " "}' /var/log/httpd/live-in.org-access_log* | sort | uniq -d -c | awk '$1 > 10 {printf $2 " "}' >/tmp/iptables.txt 2>/dev/null
結果保存到/tmp/iptables.txt中。
iptables屏蔽,代碼如下:
- awk '{system("iptables -I INPUT -s "$0" -j DROP")}' /tmp/iptables.txt
- service iptables save
將/tmp/iptables.txt內的IP添加到iptables中并保存,查看添加的內容,代碼如下:
iptables -n -L |less
說明:-n表示不做DNS解析
提示:如果效果不好,直接屏蔽IP段,直接一個php函數,代碼如下:
- // 垃圾評論攔截
- class anti_spam {
- function anti_spam() {
- if ( !current_user_can('level_0') ) {
- add_action('template_redirect', array($this, 'w_tb'), 1);
- add_action('init', array($this, 'gate'), 1);
- add_action('preprocess_comment', array($this, 'sink'), 1);
- }
- } //www.49028c.com
- function w_tb() {
- if ( is_singular() ) {
- ob_start(create_function('$input','return preg_replace("#textarea(.*?)name=(["'])comment(["'])(.+)/textarea>#",
- "textarea$1name=$2w$3$4/textarea>",$input);') );
- }
- }
- function gate() {
- if ( !empty($_POST['w']) && empty($_POST['comment']) ) {
- $_POST['comment'] = $_POST['w'];
- } else {
- $request = $_SERVER['REQUEST_URI'];
- $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '隱瞞';
- $IP = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] . ' (透過代理)' : $_SERVER["REMOTE_ADDR"];
- $way = isset($_POST['w']) ? '手動操作' : '未經評論表格';
- $spamcom = isset($_POST['comment']) ? $_POST['comment'] : null;
- $_POST['spam_confirmed'] = "請求: ". $request. " 來路: ". $referer. " IP: ". $IP. " 方式: ". $way. " ?熱? ". $spamcom. " -- 記錄成功 --";
- }
- }
- function sink( $comment ) {
- if ( !empty($_POST['spam_confirmed']) ) {
- if ( in_array( $comment['comment_type'], array('pingback', 'trackback') ) ) return $comment;
- //方法一: 直接擋掉, ? die(); 前面兩斜線?h除即可.
- die();
- //方法二: 標記為 spam, 留在資料庫檢查是否誤判.
- //add_filter('pre_comment_approved', create_function('', 'return "spam";'));
- //$comment['comment_content'] = "[ 小墻判斷這是 Spam! ] ". $_POST['spam_confirmed'];
- }
- return $comment;
- }
- }
- $anti_spam = new anti_spam();
新聞熱點
疑難解答
圖片精選