function &to_akismet($item_data) { $false = false; if (!AKISMET_KEY) { return $false; } $options = $this->getOptions(); if (isset($options['akismet_body_field']) && $options['akismet_body_field']) { return $false; } $all_data = $this->udm->getData(); if (!isset($all_data[$options['akismet_body_field']])) { return $false; } $body_field = $all_data[$options['akismet_body_field']]; $ak_data = array(); $ak_data['author'] = $item_data['First_Name'] . ' ' . $item_data['Last_Name']; $ak_data['email'] = $item_data['Email']; $ak_data['type'] = 'form_input'; $ak_data['website'] = $item_data['Website']; $ak_data['body'] = $item_data[$body_field]; $ak_data['permalink'] = isset($item_data['modin']) && $item_data['modin'] ? AMP_url_update(AMP_SITE_URL . '/' . AMP_CONTENT_URL_FORM, array('modin' => $item_data['modin'])) : false; require_once 'akismet/akismet.class.php'; $akismet = new Akismet(AMP_SITE_URL, AKISMET_KEY, $ak_data); if ($akismet->isError(AKISMET_SERVER_NOT_FOUND)) { trigger_error('Akismet: Server Not Found'); return $false; } if ($akismet->isError(AKISMET_RESPONSE_FAILED)) { trigger_error('Akismet: Response Failed'); return $false; } if ($akismet->isError(AKISMET_INVALID_KEY)) { trigger_error('Akismet: Invalid Key'); return $false; } return $akismet; }
function akismet_check_submit(&$vars) { if (phpnum() >= 5) { include akismet_lib_path . 'Akismet.class_5.php'; $x = $x['linkres']; $user = new User(); $user->id = $x->author; $user->read(); $akismet = new Akismet(my_base_url . my_pligg_base, get_misc_data('wordpress_key')); $akismet->setCommentAuthor($user->username); $akismet->setCommentAuthorEmail($user->email); $akismet->setCommentAuthorURL($x->url); $akismet->setCommentContent($x->content); $akismet->setPermalink(getmyurl('story', $x->id)); if ($akismet->isCommentSpam()) { // store the comment but mark it as spam (in case of a mis-diagnosis) $spam_links = get_misc_data('spam_links'); if ($spam_links != '') { $spam_links = unserialize(get_misc_data('spam_links')); } else { $spam_links = array(); } $spam_links[] = $x->id; misc_data_update('spam_links', serialize($spam_links)); totals_adjust_count($x->status, -1); totals_adjust_count('discard', 1); $x->status = 'discard'; } else { // echo 'not spam'; } } else { include akismet_lib_path . 'Akismet.class_4.php'; $x = $vars['linkres']; $user = new User(); $user->id = $x->author; $user->read(); $story['author'] = $user->username; $story['email'] = $user->email; $story['website'] = $x->url; $story['body'] = $x->content; $story['permalink'] = getmyurl('story', $x->id); $story['user_ip'] = $user->extra_field['user_lastip']; $akismet = new Akismet(my_base_url . my_pligg_base, get_misc_data('wordpress_key'), $story); // test for errors if ($akismet->errorsExist()) { // returns true if any errors exist if ($akismet->isError('AKISMET_INVALID_KEY')) { // echo 'invalid key'; } elseif ($akismet->isError('AKISMET_RESPONSE_FAILED')) { // echo 'response failed'; } elseif ($akismet->isError('AKISMET_SERVER_NOT_FOUND')) { // echo 'server not found'; } } else { // No errors, check for spam if ($akismet->isSpam()) { // returns true if Akismet thinks the comment is spam $spam_links = get_misc_data('spam_links'); if ($spam_links != '') { $spam_links = unserialize(get_misc_data('spam_links')); } else { $spam_links = array(); } $spam_links[] = $x->id; misc_data_update('spam_links', serialize($spam_links)); } else { // echo 'not spam'; } } } }
} if (mb_strlen($subject, CHARSET) > $settings['email_subject_maxlength']) { $errors[] = 'formmail_error_subj_too_long'; } if (empty($errors)) { // Akismet spam check: if ($settings['akismet_key'] != '' && $settings['akismet_mail_check'] == 1) { #require('./cms/modules/akismet/akismet.class.php'); $mail_parts = explode("@", $email); $check_mail['author'] = $mail_parts[0]; $check_mail['email'] = $email; $check_mail['body'] = $message; $akismet = new Akismet(BASE_URL, $settings['akismet_key'], $check_mail); // test for errors if ($akismet->errorsExist()) { if ($akismet->isError(AKISMET_INVALID_KEY)) { $errors[] = 'akismet_error_api_key'; } elseif ($akismet->isError(AKISMET_RESPONSE_FAILED)) { $errors[] = 'akismet_error_connection'; } elseif ($akismet->isError(AKISMET_SERVER_NOT_FOUND)) { $errors[] = 'akismet_error_connection'; } } else { // No errors, check for spam if ($akismet->isSpam()) { $errors[] = 'akismet_spam_suspicion'; } } } // End Akismet spam check: }
public function get_pingback($id) { $postdata = file_get_contents("php://input"); if ($postdata) { $xml = new SimpleXMLElement($postdata); $pingback_sender_url = strval($xml->params->param[0]->value->string); $pingback_receiver_url = strval($xml->params->param[1]->value->string); // get content: if ($pingback_sender_url) { if ($url_content = $this->_get_url_content($pingback_sender_url)) { if (strpos($url_content[1], BASE_URL . PAGE) !== false) { // get title: preg_match("/<title>(.*)<\\/title>/i", $url_content[1], $matches); if (isset($matches[1]) && trim($matches[1]) != '') { $pingback_title = trim(filter_control_characters($matches[1])); if (mb_strlen($pingback_title) > $this->pingback_title_maxlength) { $pingback_title = truncate($pingback_title, $this->pingback_title_maxlength); } } else { $pingback_error = true; } // get body: preg_match("/<body[^>]*>(.*)<\\/body>/smi", $url_content[1], $b_matches); if (isset($b_matches[1]) && trim($b_matches[1]) != '') { $body = strip_tags($b_matches[1]); $body = preg_replace("/\r\n|\r|\n/", "\n", $body); $body_lines = explode("\n", $body); $cleared_body = ''; foreach ($body_lines as $body_line) { if (trim($body_line) != '') { $cleared_body .= trim($body_line) . ' '; } } $cleared_body = trim(filter_control_characters($cleared_body)); } else { $pingback_error = true; } if (empty($pingback_error)) { // not accepted words check: $joined_message = mb_strtolower($pingback_title . ' ' . $pingback_sender_url . ' ' . $cleared_body); $not_accepted_words = get_not_accepted_words($joined_message); if ($not_accepted_words) { $pingback_error = true; } } if (empty($pingback_error)) { // Akismet spam check: if ($this->settings['akismet_key'] != '' && $this->settings['akismet_entry_check'] == 1) { $check_posting['author'] = $pingback_title; $check_posting['website'] = $pingback_sender_url; $check_posting['body'] = truncate($cleared_body, 3000); $akismet = new Akismet(BASE_URL, $this->settings['akismet_key'], $check_posting); // test for errors if ($akismet->errorsExist()) { //$pingback_error = true; if ($akismet->isError(AKISMET_INVALID_KEY)) { $akismet_errors[] = 'akismet_error_api_key'; } elseif ($akismet->isError(AKISMET_RESPONSE_FAILED)) { $akismet_errors[] = 'akismet_error_connection'; } elseif ($akismet->isError(AKISMET_SERVER_NOT_FOUND)) { $akismet_errors[] = 'akismet_error_connection'; } } else { // No errors, check for spam if ($akismet->isSpam()) { // TODO: #$pingback_error = true; $akismet_spam = true; #$mail = new Mail(); #$mail->send($this->settings['email'], $this->settings['email'], 'Pingback-Spam?', $check_posting['author']."\n".$check_posting['website']."\n".$check_posting['body'], $this->settings['mail_parameter']); } } } } if (empty($pingback_error)) { // check if url was already posted: $dbr = Database::$entries->prepare("SELECT COUNT(*) FROM " . Database::$db_settings['comment_table'] . " WHERE comment_id=:comment_id AND type=0 AND comment='' AND email_hp=:email_hp"); $dbr->bindParam(':comment_id', $id, PDO::PARAM_INT); $dbr->bindParam(':email_hp', $pingback_sender_url, PDO::PARAM_STR); $dbr->execute(); $comment_count = $dbr->fetchColumn(); if ($comment_count > 0) { $pingback_error = true; } } if (empty($pingback_error)) { $dbr = Database::$entries->prepare("INSERT INTO " . Database::$db_settings['comment_table'] . " (type, comment_id, time, ip, name, email_hp, comment) VALUES (0, :comment_id, :time, :ip, :name, :email_hp, '')"); $dbr->bindParam(':comment_id', $id, PDO::PARAM_INT); $dbr->bindValue(':time', time(), PDO::PARAM_INT); $dbr->bindParam(':ip', $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR); $dbr->bindParam(':name', $pingback_title, PDO::PARAM_STR); $dbr->bindParam(':email_hp', $pingback_sender_url, PDO::PARAM_STR); $dbr->execute(); // E-mail notification to admin: if ($this->settings['comment_notification'] && $this->settings['email']) { $this->_localization->replacePlaceholder('page', PAGE, 'pingback_notification_subject'); $this->_localization->replacePlaceholder('title', $pingback_title, 'pingback_notification_message'); $this->_localization->replacePlaceholder('url', $pingback_sender_url, 'pingback_notification_message'); $this->_localization->replacePlaceholder('link', BASE_URL . PAGE, 'pingback_notification_message'); // TODO: if (isset($akismet_spam)) { $add = "\n\nAkismet: SPAM!"; } else { $add = ''; } $mail = new Mail(); $mail->set_charset(CHARSET); $mail->send($this->settings['email'], $this->settings['email'], Localization::$lang['pingback_notification_subject'], Localization::$lang['pingback_notification_message'] . $add, $this->settings['mail_parameter']); } $response = '<?xml version="1.0"?><methodResponse><params><param><value><string>OK</string></value></param></params></methodResponse>'; header('Content-Type: text/xml'); echo $response; return true; } } } } } $response = '<?xml version="1.0"?><methodResponse><fault><value><struct><member><name>faultCode</name><value><int>0</int></value></member><member><name>faultString</name><value><string>FAIL</string></value></member></struct></value></fault></methodResponse>'; header('Content-Type: text/xml'); echo $response; return false; }
function &to_akismet() { $false = false; if (!$this->hasData()) { return $false; } if (!defined('AKISMET_KEY')) { return $false; } /* if ( !defined( 'AKISMET_KEY')) { print( 'wheres my key?'); exit; } */ $comment_data = $this->getData(); $comment_data['user_agent'] = $comment_data['agent']; $comment_data['user_ip'] = $comment_data['author_IP']; $comment_data['website'] = $comment_data['author_url']; $comment_data['body'] = $comment_data['comment']; $comment_data['permalink'] = isset($comment_data['article_id']) && $comment_data['article_id'] ? AMP_url_update(AMP_SITE_URL . '/' . AMP_CONTENT_URL_ARTICLE, array('id' => $comment_data['article_id'])) : false; if (!$comment_data['permalink']) { $comment_data['permalink'] = isset($comment_data['userdata_id']) && $comment_data['userdata_id'] ? AMP_url_update(AMP_SITE_URL . '/' . AMP_CONTENT_URL_FORM_DISPLAY, array('uid' => $comment_data['userdata_id'])) : false; } $akismet_comment = array_elements_by_key(array('author', 'email', 'website', 'body', 'permalink'), $comment_data); require_once 'akismet/akismet.class.php'; $akismet = new Akismet(AMP_SITE_URL, AKISMET_KEY, $akismet_comment); if ($akismet->isError(AKISMET_SERVER_NOT_FOUND)) { trigger_error('Akismet: Server Not Found'); return $false; } if ($akismet->isError(AKISMET_RESPONSE_FAILED)) { trigger_error('Akismet: Response Failed'); return $false; } if ($akismet->isError(AKISMET_INVALID_KEY)) { trigger_error('Akismet: Invalid Key'); return $false; } return $akismet; }
function spamfilter($comment = null) { global $vars, $defaultpage; // Through if GET (Check only POST) if ($_SERVER['REQUEST_METHOD'] === 'GET') { return; } // Through if POST is from akismet plugin (submitHam) if (isset($vars['cmd']) && $vars['cmd'] == 'akismet') { return; } // Through if in IGNORE list $cmd = isset($vars['cmd']) ? $vars['cmd'] : (isset($vars['plugin']) ? $vars['plugin'] : 'read'); if (defined('PLUGIN_AKISMET_IGNORE_PLUGINS')) { if (in_array($cmd, explode(',', PLUGIN_AKISMET_IGNORE_PLUGINS))) { return; } } // Through if already known he is a human $use_authlevel = PLUGIN_AKISMET_THROUGH_IF_ENROLLEE ? ROLE_AUTH : (PLUGIN_AKISMET_THROUGH_IF_ADMIN ? ROLE_ADM_CONTENTS : 0); if (is_human(NULL, PLUGIN_AKISMET_USE_SESSION, $use_authlevel)) { return; } // Initialize $comment if (!isset($comment)) { // special case (now only supports edit plugin) if ($vars['cmd'] === 'edit' || $vars['plugin'] === 'edit') { $body = $vars['msg']; } else { $body = implode("\n", $vars); } $comment = array('author' => '', 'email' => '', 'website' => '', 'body' => $body, 'permalink' => '', 'user_ip' => $_SERVER['REMOTE_ADDR'], 'user_agent' => $_SERVER['HTTP_USER_AGENT']); } $is_spam = TRUE; if (PLUGIN_AKISMET_USE_AKISMET) { // Through if no body (Akismet recognizes as a spam if no body) if ($comment['body'] == '') { return; } // instantiate an instance of the class $akismet = new Akismet(get_script_uri(), PLUGIN_AKISMET_API_KEY, $comment); // test for errors if ($akismet->errorsExist()) { // returns TRUE if any errors exist if ($akismet->isError('AKISMET_INVALID_KEY')) { die_message('akismet : APIキーが不正です.'); } elseif ($akismet->isError('AKISMET_RESPONSE_FAILED')) { //die_message('akismet : レスポンスの取得に失敗しました'); } elseif ($akismet->isError('AKISMET_SERVER_NOT_FOUND')) { //die_message('akismet : サーバへの接続に失敗しました.'); } $is_spam = FALSE; // through if akismet.com is not available. } else { $is_spam = $akismet->isSpam(); } if ($is_spam) { $detail = PLUGIN_AKISMET_SPAMLOG_DETAIL ? $comment : array(); PluginAkismet::spamlog_write($vars, $detail, PLUGIN_AKISMET_SPAMLOG_FILENAME); } } if ($is_spam) { if (PLUGIN_AKISMET_RECAPTCHA_LOG) { PluginAkismet::spamlog_write($vars, array('body' => 'hit'), LOG_DIR . 'captchalog.txt'); } $form = PluginAkismet::get_captcha_form($vars, $comment); // die_message('</strong>' . $form . '<strong>'); $title = $page = 'キャプチャ認証'; pkwk_common_headers(); catbody($title, $page, $form); exit; } }
private function check_data($data, $save = false) { if ($this->comments_closed != false) { $this->errors[] = 'comment_error_closed'; } if (empty($this->errors) && $save) { if (empty($_SESSION[$this->_form_session])) { $this->errors[] = 'comment_error_invalid_request'; } else { if (time() - $_SESSION[$this->_form_session] < 2) { $this->errors[] = 'comment_error_too_fast'; } } } if (empty($this->errors)) { // check for not accepted words: $joined_message = mb_strtolower($data['name'] . ' ' . $data['email_hp'] . ' ' . $data['comment_text']); $not_accepted_words = get_not_accepted_words($joined_message); if ($not_accepted_words != false) { $not_accepted_words_listing = htmlspecialchars(implode(', ', $not_accepted_words)); if (count($not_accepted_words) == 1) { $this->errors[] = 'error_not_accepted_word'; #$this->assign_lang_placeholder('not_accepted_word', $not_accepted_words_listing, 'error_not_accepted_word'); $this->_localization->replacePlaceholder('not_accepted_word', $not_accepted_words_listing, 'error_not_accepted_word'); } else { $this->errors[] = 'error_not_accepted_words'; #$this->assign_lang_placeholder('not_accepted_words', $not_accepted_words_listing, 'error_not_accepted_words'); $this->_localization->replacePlaceholder('not_accepted_words', $not_accepted_words_listing, 'error_not_accepted_words'); } } if (empty($data['name'])) { $this->errors[] = 'comment_error_no_name'; } if (empty($data['comment_text'])) { $this->errors[] = 'comment_error_no_text'; } if (mb_strlen($data['name']) > $this->name_maxlength) { $this->errors[] = 'comment_error_name_too_long'; } if (mb_strlen($data['email_hp']) > $this->email_hp_maxlength) { $this->errors[] = 'comment_error_email_hp_too_long'; } if (!empty($data['email_hp'])) { if (strpos($data['email_hp'], ' ') !== false || strpos($data['email_hp'], '.') === false) { $this->errors[] = 'comment_error_email_hp_invalid'; } } if (mb_strlen($data['comment_text']) > $this->comment_maxlength) { $text_length = mb_strlen($data['comment_text']); $this->errors[] = 'comment_error_text_too_long'; $this->_localization->replacePlaceholder('characters', $text_length, 'comment_error_text_too_long'); $this->_localization->replacePlaceholder('max_characters', $this->comment_maxlength, 'comment_error_text_too_long'); } } if (empty($this->errors)) { if ($too_long_words = too_long_words(strip_tags($this->format_comment($data['comment_text'])), $this->word_maxlength)) { foreach ($too_long_words as $too_long_word) { $stripped_too_long_words[] = htmlspecialchars(mb_substr($too_long_word, 0, $this->word_maxlength)) . '...'; } $too_long_words_listing = implode(', ', $stripped_too_long_words); if (count($too_long_words) == 1) { $this->errors[] = 'comment_error_too_long_word'; #$this->assign_lang_placeholder('word', $too_long_words_listing, 'comment_error_too_long_word'); $this->_localization->replacePlaceholder('word', $too_long_words_listing, 'comment_error_too_long_word'); } else { $this->errors[] = 'comment_error_too_long_words'; #$this->assign_lang_placeholder('words', $too_long_words_listing, 'comment_error_too_long_words'); $this->_localization->replacePlaceholder('words', $too_long_words_listing, 'comment_error_too_long_words'); } } // check for double and repeated entries: $dbr = Database::$entries->prepare("SELECT COUNT(*) FROM " . Database::$db_settings['comment_table'] . " WHERE time>:time AND comment_id=:comment_id AND name=:name AND email_hp=:email_hp AND comment=:comment"); $time = time() - 300; // last 5 minutes $dbr->bindParam(':time', $time, PDO::PARAM_INT); $dbr->bindParam(':comment_id', $this->comment_id, PDO::PARAM_INT); $dbr->bindParam(':name', $data['name'], PDO::PARAM_STR); $dbr->bindParam(':email_hp', $data['email_hp'], PDO::PARAM_STR); $dbr->bindParam(':comment', $data['comment_text'], PDO::PARAM_STR); $dbr->execute(); if ($dbr->fetchColumn() > 0) { $this->errors[] = 'comment_error_entry_exists'; } if ($this->prevent_repeated_posts_minutes > 0) { $dbr = Database::$entries->prepare("SELECT COUNT(*) FROM " . Database::$db_settings['comment_table'] . " WHERE time>:time AND comment_id=:comment_id AND ip=:ip"); $time = time() - $this->prevent_repeated_posts_minutes * 60; $dbr->bindParam(':time', $time, PDO::PARAM_INT); $dbr->bindParam(':comment_id', $this->comment_id, PDO::PARAM_INT); $dbr->bindParam(':ip', $_SERVER["REMOTE_ADDR"], PDO::PARAM_STR); $dbr->execute(); if ($dbr->fetchColumn() > 0) { $this->errors[] = 'comment_error_repeated_post'; } } if ($save) { // Akismet spam check: if ($this->akismet_key != '' && $this->akismet_entry_check == 1) { #require('./cms/modules/akismet/akismet.class.php'); $check_posting['author'] = $data['name']; if ($data['email_hp'] != '') { if (preg_match("/^[^@]+@.+\\.\\D{2,5}\$/", $email_hp)) { $check_posting['email'] = $data['email_hp']; } else { $check_posting['website'] = $data['email_hp']; } } $check_posting['body'] = $data['comment_text']; $akismet = new Akismet(BASE_URL, $this->akismet_key, $check_posting); // test for errors if ($akismet->errorsExist()) { if ($akismet->isError(AKISMET_INVALID_KEY)) { $this->errors[] = 'akismet_error_api_key'; } elseif ($akismet->isError(AKISMET_RESPONSE_FAILED)) { $this->errors[] = 'akismet_error_connection'; } elseif ($akismet->isError(AKISMET_SERVER_NOT_FOUND)) { $this->errors[] = 'akismet_error_connection'; } } else { // No errors, check for spam if ($akismet->isSpam()) { $this->errors[] = 'akismet_spam_suspicion'; } } } } // end if($save) } }