siteguard-login-history-table.php
1 month ago
siteguard-menu-admin-filter.php
4 weeks ago
siteguard-menu-author-query.php
2 weeks ago
siteguard-menu-captcha.php
4 weeks ago
siteguard-menu-dashboard.php
4 weeks ago
siteguard-menu-fail-once.php
4 weeks ago
siteguard-menu-init.php
1 month ago
siteguard-menu-login-alert.php
4 weeks ago
siteguard-menu-login-history.php
4 weeks ago
siteguard-menu-login-lock.php
4 weeks ago
siteguard-menu-protect-xmlrpc.php
4 weeks ago
siteguard-menu-rename-login.php
2 weeks ago
siteguard-menu-same-error.php
4 weeks ago
siteguard-menu-updates-notify.php
4 weeks ago
siteguard-menu-waf-tuning-support.php
4 weeks ago
siteguard-waf-exclude-rule-table.php
1 month ago
siteguard-menu-login-lock.php
164 lines
| 1 | <?php |
| 2 | |
| 3 | class SiteGuard_Menu_Login_Lock extends SiteGuard_Base { |
| 4 | const OPT_NAME_ENABLE = 'loginlock_enable'; |
| 5 | const OPT_NAME_INTERVAL = 'loginlock_interval'; |
| 6 | const OPT_NAME_THRESHOLD = 'loginlock_threshold'; |
| 7 | const OPT_NAME_LOCKSEC = 'loginlock_locksec'; |
| 8 | |
| 9 | function __construct() { |
| 10 | $this->render_page(); |
| 11 | } |
| 12 | function is_interval_value( $value ) { |
| 13 | $items = array( '1', '5', '30' ); |
| 14 | if ( in_array( $value, $items ) ) { |
| 15 | return true; |
| 16 | } |
| 17 | return false; |
| 18 | } |
| 19 | function is_threshold_value( $value ) { |
| 20 | $items = array( '3', '10', '100' ); |
| 21 | if ( in_array( $value, $items ) ) { |
| 22 | return true; |
| 23 | } |
| 24 | return false; |
| 25 | } |
| 26 | function is_locksec_value( $value ) { |
| 27 | $items = array( '30', '60', '300' ); |
| 28 | if ( in_array( $value, $items ) ) { |
| 29 | return true; |
| 30 | } |
| 31 | return false; |
| 32 | } |
| 33 | function render_page() { |
| 34 | global $siteguard_config; |
| 35 | |
| 36 | $opt_val_enable = $siteguard_config->get( self::OPT_NAME_ENABLE ); |
| 37 | $opt_val_interval = $siteguard_config->get( self::OPT_NAME_INTERVAL ); |
| 38 | $opt_val_threshold = $siteguard_config->get( self::OPT_NAME_THRESHOLD ); |
| 39 | $opt_val_locksec = $siteguard_config->get( self::OPT_NAME_LOCKSEC ); |
| 40 | if ( isset( $_POST['update'] ) && check_admin_referer( 'siteguard-menu-login-lock-submit' ) ) { |
| 41 | $error = false; |
| 42 | $errors = siteguard_check_multisite(); |
| 43 | if ( is_wp_error( $errors ) ) { |
| 44 | echo '<div class="error settings-error"><p><strong>'; |
| 45 | echo esc_html( $errors->get_error_message() ); |
| 46 | echo '</strong></p></div>'; |
| 47 | $error = true; |
| 48 | } |
| 49 | if ( ( false === $error ) |
| 50 | && ( ( false === $this->is_switch_value( $_POST[ self::OPT_NAME_ENABLE ] ) ) |
| 51 | || ( false === $this->is_interval_value( $_POST[ self::OPT_NAME_INTERVAL ] ) ) |
| 52 | || ( false === $this->is_threshold_value( $_POST[ self::OPT_NAME_THRESHOLD ] ) ) |
| 53 | || ( false === $this->is_locksec_value( $_POST[ self::OPT_NAME_LOCKSEC ] ) ) ) ) { |
| 54 | echo '<div class="error settings-error"><p><strong>'; |
| 55 | esc_html_e( 'ERROR: Invalid input value.', 'siteguard' ); |
| 56 | echo '</strong></p></div>'; |
| 57 | $error = true; |
| 58 | } |
| 59 | if ( false === $error ) { |
| 60 | $opt_val_enable = sanitize_text_field( $_POST[ self::OPT_NAME_ENABLE ] ); |
| 61 | $opt_val_interval = sanitize_text_field( $_POST[ self::OPT_NAME_INTERVAL ] ); |
| 62 | $opt_val_threshold = sanitize_text_field( $_POST[ self::OPT_NAME_THRESHOLD ] ); |
| 63 | $opt_val_locksec = sanitize_text_field( $_POST[ self::OPT_NAME_LOCKSEC ] ); |
| 64 | $siteguard_config->set( self::OPT_NAME_ENABLE, $opt_val_enable ); |
| 65 | $siteguard_config->set( self::OPT_NAME_INTERVAL, $opt_val_interval ); |
| 66 | $siteguard_config->set( self::OPT_NAME_THRESHOLD, $opt_val_threshold ); |
| 67 | $siteguard_config->set( self::OPT_NAME_LOCKSEC, $opt_val_locksec ); |
| 68 | $siteguard_config->update(); |
| 69 | ?> |
| 70 | <div class="updated"><p><strong><?php esc_html_e( 'Options saved.', 'siteguard' ); ?></strong></p></div> |
| 71 | <?php |
| 72 | } |
| 73 | } |
| 74 | |
| 75 | echo '<div class="wrap">'; |
| 76 | echo '<img src="' . SITEGUARD_URL_PATH . 'images/sg_wp_plugin_logo_40.png" alt="SiteGuard Logo" />'; |
| 77 | echo '<h2>' . esc_html__( 'Login Lock', 'siteguard' ) . '</h2>'; |
| 78 | $documentation_link = '<a href="' . esc_url( __( 'https://www.jp-secure.com/siteguard_wp_plugin_en/howto/login_lock/', 'siteguard' ) ) . '" target="_blank">' . esc_html__( 'online documentation', 'siteguard' ) . '</a>'; |
| 79 | echo '<div class="siteguard-description">' |
| 80 | . sprintf( |
| 81 | /* translators: %1$s: Link to the online documentation. */ |
| 82 | esc_html__( 'See the %1$s.', 'siteguard' ), |
| 83 | $documentation_link |
| 84 | ) |
| 85 | . '</div>'; |
| 86 | ?> |
| 87 | <form name="form1" method="post" action=""> |
| 88 | <table class="form-table"> |
| 89 | <tr> |
| 90 | <th scope="row" colspan="2"> |
| 91 | <ul class="siteguard-radios"> |
| 92 | <li> |
| 93 | <input type="radio" name="<?php echo self::OPT_NAME_ENABLE; ?>" id="<?php echo self::OPT_NAME_ENABLE . '_on'; ?>" value="1" <?php checked( $opt_val_enable, '1' ); ?> > |
| 94 | <label for="<?php echo self::OPT_NAME_ENABLE . '_on'; ?>"><?php esc_html_e( 'ON', 'siteguard' ); ?></label> |
| 95 | </li><li> |
| 96 | <input type="radio" name="<?php echo self::OPT_NAME_ENABLE; ?>" id="<?php echo self::OPT_NAME_ENABLE . '_off'; ?>" value="0" <?php checked( $opt_val_enable, '0' ); ?> > |
| 97 | <label for="<?php echo self::OPT_NAME_ENABLE . '_off'; ?>"><?php esc_html_e( 'OFF', 'siteguard' ); ?></label> |
| 98 | </li> |
| 99 | </ul> |
| 100 | <?php |
| 101 | $error = siteguard_check_multisite(); |
| 102 | if ( is_wp_error( $error ) ) { |
| 103 | echo '<p class="description">'; |
| 104 | echo esc_html( $error->get_error_message() ); |
| 105 | echo '</p>'; |
| 106 | } |
| 107 | ?> |
| 108 | </th> |
| 109 | </tr><tr> |
| 110 | <th scope="row"><?php esc_html_e( 'Interval', 'siteguard' ); ?></th> |
| 111 | <td> |
| 112 | <input type="radio" name="<?php echo self::OPT_NAME_INTERVAL; ?>" id="<?php echo self::OPT_NAME_INTERVAL . '_1'; ?>" value="1" <?php checked( $opt_val_interval, '1' ); ?> > |
| 113 | <label for="<?php echo self::OPT_NAME_INTERVAL . '_1'; ?>"><?php esc_html_e( '1 second', 'siteguard' ); ?></label> |
| 114 | <br /> |
| 115 | <input type="radio" name="<?php echo self::OPT_NAME_INTERVAL; ?>" id="<?php echo self::OPT_NAME_INTERVAL . '_5'; ?>" value="5" <?php checked( $opt_val_interval, '5' ); ?> > |
| 116 | <label for="<?php echo self::OPT_NAME_INTERVAL . '_5'; ?>"><?php esc_html_e( '5 seconds', 'siteguard' ); ?></label> |
| 117 | <br /> |
| 118 | <input type="radio" name="<?php echo self::OPT_NAME_INTERVAL; ?>" id="<?php echo self::OPT_NAME_INTERVAL . '_30'; ?>" value="30" <?php checked( $opt_val_interval, '30' ); ?> > |
| 119 | <label for="<?php echo self::OPT_NAME_INTERVAL . '_30'; ?>"><?php esc_html_e( '30 seconds', 'siteguard' ); ?></label> |
| 120 | </td> |
| 121 | </tr><tr> |
| 122 | <th scope="row"><?php esc_html_e( 'Threshold', 'siteguard' ); ?></th> |
| 123 | <td> |
| 124 | <input type="radio" name="<?php echo self::OPT_NAME_THRESHOLD; ?>" id="<?php echo self::OPT_NAME_THRESHOLD . '_3'; ?>" value="3" <?php checked( $opt_val_threshold, '3' ); ?> > |
| 125 | <label for="<?php echo self::OPT_NAME_THRESHOLD . '_3'; ?>"><?php esc_html_e( '3 times', 'siteguard' ); ?></label> |
| 126 | <br /> |
| 127 | <input type="radio" name="<?php echo self::OPT_NAME_THRESHOLD; ?>" id="<?php echo self::OPT_NAME_THRESHOLD . '_10'; ?>" value="10" <?php checked( $opt_val_threshold, '10' ); ?> > |
| 128 | <label for="<?php echo self::OPT_NAME_THRESHOLD . '_10'; ?>"><?php esc_html_e( '10 times', 'siteguard' ); ?></label> |
| 129 | <br /> |
| 130 | <input type="radio" name="<?php echo self::OPT_NAME_THRESHOLD; ?>" id="<?php echo self::OPT_NAME_THRESHOLD . '_100'; ?>" value="100" <?php checked( $opt_val_threshold, '100' ); ?> > |
| 131 | <label for="<?php echo self::OPT_NAME_THRESHOLD . '_100'; ?>"><?php esc_html_e( '100 times', 'siteguard' ); ?></label> |
| 132 | </td> |
| 133 | </tr><tr> |
| 134 | <th scope="row"><?php esc_html_e( 'Lock Time', 'siteguard' ); ?></th> |
| 135 | <td> |
| 136 | <input type="radio" name="<?php echo self::OPT_NAME_LOCKSEC; ?>" id="<?php echo self::OPT_NAME_LOCKSEC . '_30'; ?>" value="30" <?php checked( $opt_val_locksec, '30' ); ?> > |
| 137 | <label for="<?php echo self::OPT_NAME_LOCKSEC . '_30'; ?>"><?php esc_html_e( '30 seconds', 'siteguard' ); ?></label> |
| 138 | <br /> |
| 139 | <input type="radio" name="<?php echo self::OPT_NAME_LOCKSEC; ?>" id="<?php echo self::OPT_NAME_LOCKSEC . '_60'; ?>" value="60" <?php checked( $opt_val_locksec, '60' ); ?> > |
| 140 | <label for="<?php echo self::OPT_NAME_LOCKSEC . '_60'; ?>"><?php esc_html_e( '1 minute', 'siteguard' ); ?></label> |
| 141 | <br /> |
| 142 | <input type="radio" name="<?php echo self::OPT_NAME_LOCKSEC; ?>" id="<?php echo self::OPT_NAME_LOCKSEC . '_300'; ?>" value="300" <?php checked( $opt_val_locksec, '300' ); ?> > |
| 143 | <label for="<?php echo self::OPT_NAME_LOCKSEC . '_300'; ?>"><?php esc_html_e( '5 minutes', 'siteguard' ); ?></label> |
| 144 | </td> |
| 145 | </tr> |
| 146 | </table> |
| 147 | <div class="siteguard-description"> |
| 148 | <?php esc_html_e( 'Reduces the risk of brute-force and password list attacks. If an IP address reaches the specified number of failed login attempts within the selected interval, it is locked for the selected time. User accounts are not locked.', 'siteguard' ); ?> |
| 149 | </div> |
| 150 | <hr /> |
| 151 | <input type="hidden" name="update" value="Y"> |
| 152 | |
| 153 | <?php |
| 154 | wp_nonce_field( 'siteguard-menu-login-lock-submit' ); |
| 155 | submit_button(); |
| 156 | ?> |
| 157 | |
| 158 | </form> |
| 159 | </div> |
| 160 | |
| 161 | <?php |
| 162 | } |
| 163 | } |
| 164 |