WordPress.org

Plugin Directory


Ignore:
Location:
better-wp-security
Files:
364 added
2 deleted
40 edited

Legend:

Unmodified
Added
Removed
  • better-wp-security/trunk/better-wp-security.php

    r1283582 r1330783  
    77 * Author: iThemes 
    88 * Author URI: https://ithemes.com 
    9  * Version: 5.1.1 
     9 * Version: 5.2.0 
    1010 * Text Domain: better-wp-security 
    1111 * Network: True 
     
    1414 
    1515 
    16 $itsec_dir = dirname( __FILE__ ); 
    17  
    1816$locale = apply_filters( 'plugin_locale', get_locale(), 'better-wp-security' ); 
    1917load_textdomain( 'better-wp-security', WP_LANG_DIR . "/plugins/better-wp-security/better-wp-security-$locale.mo" ); 
    2018load_plugin_textdomain( 'better-wp-security' ); 
    2119 
     20if ( isset( $itsec_dir ) || class_exists( 'ITSEC_Core' ) ) { 
     21    include( dirname( __FILE__ ) . '/core/show-multiple-version-notice.php' ); 
     22    return; 
     23} 
     24 
     25 
     26$itsec_dir = dirname( __FILE__ ); 
     27 
    2228if ( is_admin() ) { 
    2329    require( "$itsec_dir/lib/icon-fonts/load.php" ); 
    24     require( "$itsec_dir/lib/one-version/index.php" ); 
    2530} 
    2631 
    2732require( "$itsec_dir/core/class-itsec-core.php" ); 
    28 new ITSEC_Core( __FILE__, __( 'iThemes Security', 'better-wp-security' ) ); 
     33$itsec_core = ITSEC_Core::get_instance(); 
     34$itsec_core->init( __FILE__, __( 'iThemes Security', 'better-wp-security' ) ); 
  • better-wp-security/trunk/core/class-itsec-core.php

    r1283582 r1330783  
    1919    final class ITSEC_Core { 
    2020 
     21        /** 
     22         * @var ITSEC_Core - Static property to hold our singleton instance 
     23         */ 
     24        static $instance = false; 
     25 
    2126        private 
    2227            $tooltip_modules, 
     
    3136 
    3237        /** 
     38         * Private constructor to make this a singleton 
     39         * 
     40         * @access private 
     41         */ 
     42        private function __construct() { 
     43        } 
     44 
     45        /** 
    3346         * Loads core functionality across both admin and frontend. 
    3447         * 
     
    4457         * 
    4558         */ 
    46         function __construct( $plugin_file, $plugin_name ) { 
     59        public function init( $plugin_file, $plugin_name ) { 
    4760 
    4861            global $itsec_globals, $itsec_files, $itsec_logger, $itsec_lockout, $itsec_notify, $itsec_sync; 
     
    5669                } 
    5770            } 
    58              
     71 
    5972            if ( ! isset( $upload_dir ) || ! is_array( $upload_dir ) ) { 
    6073 
     
    94107                'current_time_gmt'   => current_time( 'timestamp', 1 ), //the current gmt time in unix timestamp format 
    95108                'settings'           => get_site_option( 'itsec_global' ), 
    96                 'free_modules'       => array( 
    97                     'ipcheck'           => array( 
    98                         'has_front' => true, 
    99                         'option'    => 'itsec_ipcheck', 
    100                         'setting'   => 'api_s', 
    101                         'value'     => 'present', 
    102                         'class_id'  => 'ipcheck', 
    103                     ), 
    104                     'four-oh-four'      => array( 
    105                         'has_front' => true, 
    106                         'option'    => 'itsec_four_oh_four', 
    107                         'setting'   => 'enabled', 
    108                         'value'     => true, 
    109                         'class_id'  => 'Four_Oh_Four', 
    110                     ), 
    111                     'admin-user'        => array( 
    112                         'has_front' => false, 
    113                         'class_id'  => 'Admin_User', 
    114                     ), 
    115                     'away-mode'         => array( 
    116                         'has_front' => true, 
    117                         'option'    => 'itsec_away_mode', 
    118                         'setting'   => 'enabled', 
    119                         'value'     => true, 
    120                         'class_id'  => 'Away_Mode', 
    121                     ), 
    122                     'ban-users'         => array( 
    123                         'has_front' => true, 
    124                         'option'    => 'itsec_global', 
    125                         'setting'   => 'blacklist', 
    126                         'value'     => true, 
    127                         'class_id'  => 'Ban_Users', 
    128                     ), 
    129                     'brute-force'       => array( 
    130                         'has_front' => true, 
    131                         'option'    => 'itsec_brute_force', 
    132                         'setting'   => 'enabled', 
    133                         'value'     => true, 
    134                         'class_id'  => 'Brute_Force', 
    135                     ), 
    136                     'backup'            => array( 
    137                         'has_front' => true, 
    138                         'option'    => 'itsec_backup', 
    139                         'setting'   => 'enabled', 
    140                         'value'     => true, 
    141                         'class_id'  => 'Backup', 
    142                     ), 
    143                     'salts'     => array( 
    144                         'has_front' => false, 
    145                         'class_id'  => 'Salts', 
    146                     ), 
    147                     'file-change'       => array( 
    148                         'has_front' => true, 
    149                         'option'    => 'itsec_file_change', 
    150                         'setting'   => 'enabled', 
    151                         'value'     => true, 
    152                         'class_id'  => 'File_Change', 
    153                     ), 
    154                     'hide-backend'      => array( 
    155                         'has_front' => true, 
    156                         'option'    => 'itsec_hide_backend', 
    157                         'setting'   => 'enabled', 
    158                         'value'     => true, 
    159                         'class_id'  => 'Hide_Backend', 
    160                     ), 
    161                     'malware'           => array( 
    162                         'has_front' => true, 
    163                         'class_id'  => 'Malware', 
    164                     ), 
    165                     'ssl'               => array( 
    166                         'has_front' => true, 
    167                         'option'    => 'itsec_ssl', 
    168                         'setting'   => 'frontend', 
    169                         'value'     => array( 1, 2 ), 
    170                         'class_id'  => 'SSL', 
    171                     ), 
    172                     'strong-passwords'  => array( 
    173                         'has_front' => true, 
    174                         'option'    => 'itsec_strong_passwords', 
    175                         'setting'   => 'enabled', 
    176                         'value'     => true, 
    177                         'class_id'  => 'Strong_Passwords', 
    178                     ), 
    179                     'tweaks'            => array( 
    180                         'has_front' => true, 
    181                         'class_id'  => 'Tweaks', 
    182                     ), 
    183                     'content-directory' => array( 
    184                         'has_front' => false, 
    185                         'class_id'  => 'Content_Directory', 
    186                     ), 
    187                     'database-prefix'   => array( 
    188                         'has_front' => false, 
    189                         'class_id'  => 'Database_Prefix', 
    190                     ), 
    191                     'help'              => array( 
    192                         'has_front' => false, 
    193                         'class_id'  => 'Help', 
    194                     ), 
    195                     'core'              => array( 
    196                         'has_front' => false, 
    197                         'class_id'  => 'Core', 
    198                     ), 
    199                 ), 
    200                 'pro_modules'        => array( 
    201                     'malware-scheduling' => array( 
    202                         'has_front' => true, 
    203                         'option'    => 'itsec_malware_scheduling', 
    204                         'setting'   => 'enabled', 
    205                         'value'     => true, 
    206                         'class_id'  => 'Malware_Scheduling', 
    207                     ), 
    208                     'online-files'       => array( 
    209                         'has_front' => true, 
    210                         'option'    => 'itsec_online_files', 
    211                         'setting'   => 'enabled', 
    212                         'value'     => true, 
    213                         'class_id'  => 'Online_Files', 
    214                     ), 
    215                     'privilege'          => array( 
    216                         'has_front' => true, 
    217                         'option'    => 'itsec_privilege', 
    218                         'setting'   => 'enabled', 
    219                         'value'     => true, 
    220                         'class_id'  => 'Privilege', 
    221                     ), 
    222                     'password'           => array( 
    223                         'has_front' => true, 
    224                         'option'    => 'itsec_password', 
    225                         'setting'   => 'enabled', 
    226                         'value'     => true, 
    227                         'class_id'  => 'Password', 
    228                     ), 
    229                     'recaptcha'           => array( 
    230                         'has_front' => true, 
    231                         'option'    => 'itsec_recaptcha', 
    232                         'setting'   => 'enabled', 
    233                         'value'     => true, 
    234                         'class_id'  => 'Recaptcha', 
    235                     ), 
    236                     'settings'           => array( 
    237                         'has_front' => false, 
    238                         'class_id'  => 'Settings', 
    239                     ), 
    240                     'two-factor'         => array( 
    241                         'has_front' => true, 
    242                         'option'    => 'itsec_two_factor', 
    243                         'setting'   => 'enabled', 
    244                         'value'     => true, 
    245                         'class_id'  => 'Two_Factor', 
    246                     ), 
    247                     'user-logging'       => array( 
    248                         'has_front' => true, 
    249                         'option'    => 'itsec_user_logging', 
    250                         'setting'   => 'enabled', 
    251                         'value'     => true, 
    252                         'class_id'  => 'User_Logging', 
    253                     ), 
    254                     'help'               => array( 
    255                         'has_front' => false, 
    256                         'class_id'  => 'Help', 
    257                     ), 
    258                     'core'               => array( 
    259                         'has_front' => false, 
    260                         'class_id'  => 'Core', 
    261                     ), 
    262                     'dashboard-widget'   => array( 
    263                         'has_front' => false, 
    264                         'class_id'  => 'Dashboard_Widget', 
    265                     ), 
    266                     'wp-cli'   => array( 
    267                         'has_front' => true, 
    268                         'class_id'  => 'WP_ClI', 
    269                     ), 
    270                 ), 
    271109            ); 
    272110 
    273             $free_modules_folder = trailingslashit( $itsec_globals['plugin_dir'] ) . 'core/modules'; 
    274             $pro_modules_folder  = trailingslashit( $itsec_globals['plugin_dir'] ) . 'pro'; 
    275  
    276             $itsec_globals['has_pro'] = is_dir( $pro_modules_folder ); 
     111            require_once( 'class-itsec-modules.php' ); 
     112            add_action( 'itsec-register-modules', array( $this, 'itsec_register_modules' ) ); 
     113 
     114            $itsec_globals['has_pro'] = is_dir( trailingslashit( $itsec_globals['plugin_dir'] ) . 'pro' ); 
    277115 
    278116            $this->pages = array( 
     
    307145            ); 
    308146 
    309             if ( isset( $itsec_globals['has_pro'] ) && $itsec_globals['has_pro'] === true && sizeof( $itsec_globals['pro_modules'] ) > 2 ) { 
     147            if ( isset( $itsec_globals['has_pro'] ) && $itsec_globals['has_pro'] === true ) { 
    310148 
    311149                $this->pages[] = array( 
     
    430268                } 
    431269 
    432                 //Process support plugin nag 
    433                 add_action( 'itsec_admin_init', array( $this, 'upgrade_nag' ) ); 
    434  
    435270                //Process plugin api nag 
    436271                add_action( 'itsec_admin_init', array( $this, 'api_nag' ) ); 
     
    482317 
    483318            //load all present modules 
    484             $this->load_modules( $free_modules_folder, $pro_modules_folder, $itsec_globals['has_pro'] ); 
     319            do_action( 'itsec-register-modules' ); 
     320            $itsec_modules = ITSEC_Modules::get_instance(); 
     321            $itsec_modules->init_modules(); 
    485322 
    486323            //see if the saved build version is older than the current build version 
     
    511348            add_action( 'itsec_rewrite_metabox', array( $itsec_files, 'rewrite_metabox_contents' ) ); 
    512349        } 
    513          
     350 
     351        /** 
     352         * Function to instantiate our class and make it a singleton 
     353         */ 
     354        public static function get_instance() { 
     355            if ( ! self::$instance ) { 
     356                self::$instance = new self; 
     357            } 
     358 
     359            return self::$instance; 
     360        } 
     361 
     362        public function itsec_register_modules() { 
     363            $itset_modules = ITSEC_Modules::get_instance(); 
     364            $itset_modules->register_module( 'strong-passwords',    'core/modules/strong-passwords'    ); 
     365            $itset_modules->register_module( 'brute-force',         'core/modules/brute-force'         ); 
     366            $itset_modules->register_module( 'admin-user',          'core/modules/admin-user'          ); 
     367            $itset_modules->register_module( 'away-mode',           'core/modules/away-mode'           ); 
     368            $itset_modules->register_module( 'backup',              'core/modules/backup'              ); 
     369            $itset_modules->register_module( 'ban-users',           'core/modules/ban-users'           ); 
     370            $itset_modules->register_module( 'content-directory',   'core/modules/content-directory'   ); 
     371            $itset_modules->register_module( 'core',                'core/modules/core'                ); 
     372            $itset_modules->register_module( 'database-prefix',     'core/modules/database-prefix'     ); 
     373            $itset_modules->register_module( 'file-change',         'core/modules/file-change'         ); 
     374            $itset_modules->register_module( '404-detection',       'core/modules/four-oh-four'        ); 
     375            $itset_modules->register_module( 'help',                'core/modules/help'                ); 
     376            $itset_modules->register_module( 'hide-backend',        'core/modules/hide-backend'        ); 
     377            $itset_modules->register_module( 'ip-check',            'core/modules/ipcheck'             ); 
     378            $itset_modules->register_module( 'malware',             'core/modules/malware'             ); 
     379            $itset_modules->register_module( 'salts',               'core/modules/salts'               ); 
     380            $itset_modules->register_module( 'ssl',                 'core/modules/ssl'                 ); 
     381            $itset_modules->register_module( 'tweaks',              'core/modules/tweaks'              ); 
     382        } 
     383 
    514384        /** 
    515385         * Add action link to plugin page. 
     
    11601030            new ITSEC_Setup( 'upgrade', $itsec_globals['data']['build'] ); //run upgrade scripts 
    11611031 
    1162             $modules             = $itsec_globals['free_modules']; 
    1163             $has_pro             = $itsec_globals['has_pro']; 
    1164             $free_modules_folder = trailingslashit( $itsec_globals['plugin_dir'] ) . 'core/modules'; 
    1165             $pro_modules_folder  = trailingslashit( $itsec_globals['plugin_dir'] ) . 'pro'; 
    1166  
    1167             if ( $has_pro ) { 
    1168  
    1169                 $modules = array_merge( $modules, $itsec_globals['pro_modules'] ); 
    1170  
    1171             } 
    1172  
    1173             foreach ( $modules as $module => $info ) { 
    1174  
    1175                 if ( $has_pro === false || ! array_key_exists( $module, $itsec_globals['pro_modules'] ) ) { //don't duplicate module if pro version already loaded 
    1176  
    1177                     $setup_file = $pro_modules_folder . '/' . $module . '/setup.php'; 
    1178  
    1179                 } else { 
    1180  
    1181                     $setup_file = $free_modules_folder . '/' . $module . '/setup.php'; 
    1182  
    1183                 } 
    1184  
    1185                 if ( file_exists( $setup_file ) ) { 
    1186  
    1187                     $setup_class = 'ITSEC_' . $info['class_id'] . '_SETUP'; 
    1188  
    1189                     if ( ! class_exists( $setup_class ) ) { 
    1190                         require( $setup_file ); 
    1191                     } 
    1192  
    1193                     new $setup_class; 
    1194  
    1195                 } 
    1196  
    1197             } 
     1032            $itsec_modules = ITSEC_Modules::get_instance(); 
     1033            $itsec_modules->run_activation(); 
    11981034 
    11991035        } 
     
    12171053 
    12181054            return $this->toc_items; 
    1219  
    1220         } 
    1221  
    1222         /** 
    1223          * Loads required plugin modules. 
    1224          * 
    1225          * 
    1226          * Recursively loads all modules in the modules/ folder by calling their index.php. 
    1227          * Note: Do not modify this area other than to specify modules to load. 
    1228          * Build all functionality into the appropriate module. 
    1229          * 
    1230          * @since 4.0 
    1231          * 
    1232          * @param string $free_modules_folder location of free modules 
    1233          * @param string $pro_modules_folder  location of pro modules 
    1234          * @param bool   $has_pro             whether or not pro is present 
    1235          * 
    1236          * @return void 
    1237          */ 
    1238         public function load_modules( $free_modules_folder, $pro_modules_folder, $has_pro ) { 
    1239  
    1240             global $itsec_globals; 
    1241  
    1242             $modules = $itsec_globals['free_modules']; 
    1243  
    1244             if ( $has_pro ) { 
    1245  
    1246                 $modules = array_merge( $modules, $itsec_globals['pro_modules'] ); 
    1247  
    1248             } 
    1249  
    1250             foreach ( $modules as $module => $info ) { 
    1251  
    1252                 if ( $has_pro === false || ! array_key_exists( $module, $itsec_globals['pro_modules'] ) ) { //don't duplicate module if pro version already loaded 
    1253  
    1254                     $this->module_loader( $free_modules_folder, $module, $info ); 
    1255  
    1256                 } else { 
    1257  
    1258                     $this->module_loader( $pro_modules_folder, $module, $info ); 
    1259  
    1260                 } 
    1261  
    1262             } 
    1263  
    1264         } 
    1265  
    1266         /** 
    1267          * Actually does the module loading 
    1268          * 
    1269          * @since 4.0.27 
    1270          * 
    1271          * @param string $module_folder the location of the module 
    1272          * @param string $module        the name of the module 
    1273          * @param        $info          array of module info for loading 
    1274          * 
    1275          * @return void 
    1276          */ 
    1277         private function module_loader( $module_folder, $module, $info ) { 
    1278  
    1279             $run_front = false; 
    1280             $run_admin = false; 
    1281             $front     = null; 
    1282  
    1283             if ( is_admin() ) { 
    1284  
    1285                 $run_admin = true; 
    1286  
    1287             } 
    1288  
    1289             //Front end class loading 
    1290             if ( isset( $info['has_front'] ) && $info['has_front'] === true ) { 
    1291  
    1292                 $option = isset( $info['option'] ) ? get_site_option( $info['option'] ) : false; 
    1293  
    1294                 //If there is a setting to check and it is write then load it 
    1295                 if ( 
    1296                     isset( $info['setting'] ) && 
    1297                     ! is_array( $info['value'] ) && 
    1298                     isset( $option[ $info['setting'] ] ) && 
    1299                     ( 
    1300                         $info['value'] === 'present' || 
    1301                         $option[ $info['setting'] ] == $info['value'] 
    1302                     ) 
    1303                 ) { 
    1304  
    1305                     $run_front = true; 
    1306  
    1307                     //check an array of settings 
    1308                 } elseif ( isset( $info['setting'] ) && is_array( $info['value'] ) ) { 
    1309  
    1310                     foreach ( $info['value'] as $value ) { 
    1311  
    1312                         if ( isset( $option[ $info['setting'] ] ) && $option[ $info['setting'] ] == $value ) { 
    1313  
    1314                             $run_front = true; 
    1315  
    1316                         } 
    1317  
    1318                     } 
    1319  
    1320                     //Always load front-end class, not setting dependent 
    1321                 } elseif ( ! isset( $info['setting'] ) ) { 
    1322  
    1323                     $run_front = true; 
    1324  
    1325                 } 
    1326  
    1327             } 
    1328  
    1329             if ( $run_front === true ) { //load the front end class 
    1330  
    1331                 $front_file = $module_folder . '/' . $module . '/class-itsec-' . $module . '.php'; 
    1332  
    1333                 if ( file_exists( $front_file ) ) { 
    1334  
    1335                     $front_class = 'ITSEC_' . $info['class_id']; 
    1336  
    1337                     if ( ! class_exists( $front_class ) ) { 
    1338                         require( $front_file ); 
    1339                     } 
    1340  
    1341                     $front = new $front_class( $this ); 
    1342  
    1343                     if ( method_exists( $front, 'run' ) ) { 
    1344                         $front->run( $this ); 
    1345                     } 
    1346  
    1347                 } 
    1348  
    1349             } 
    1350  
    1351             if ( $run_admin === true ) { //load the admin class 
    1352  
    1353                 $admin_file = $module_folder . '/' . $module . '/class-itsec-' . $module . '-admin.php'; 
    1354  
    1355                 if ( file_exists( $admin_file ) ) { 
    1356  
    1357                     //Always load the admin class 
    1358                     $admin_class = 'ITSEC_' . $info['class_id'] . '_Admin'; 
    1359  
    1360                     if ( ! class_exists( $admin_class ) ) { 
    1361                         require( $admin_file ); 
    1362                     } 
    1363  
    1364                     $admin = new $admin_class; 
    1365  
    1366                     if ( method_exists( $admin, 'run' ) ) { 
    1367                         $admin->run( $this ); 
    1368                     } 
    1369  
    1370                 } 
    1371  
    1372             } 
    13731055 
    13741056        } 
     
    18621544        } 
    18631545 
    1864         /** 
    1865          * Display (and hide) upgrade reminder. 
    1866          * 
    1867          * This will display a notice to the admin of the site only asking them to support 
    1868          * the plugin after they have used it for 30 days. 
    1869          * 
    1870          * @since 4.0 
    1871          * 
    1872          * @return void 
    1873          */ 
    1874         public function upgrade_nag() { 
    1875  
    1876             global $blog_id; 
    1877  
    1878             if ( is_multisite() && ( $blog_id != 1 || ! current_user_can( 'manage_network_options' ) ) ) { //only display to network admin if in multisite 
    1879                 return; 
    1880             } 
    1881  
    1882             //display the notifcation if they haven't turned it off and they've been using the plugin at least 30 days 
    1883             if ( get_site_option( 'itsec_had_other_version' ) !== false ) { 
    1884  
    1885                 if ( ! function_exists( 'ithemes_plugin_upgrade_notice' ) ) { 
    1886  
    1887                     function ithemes_plugin_upgrade_notice() { 
    1888  
    1889                         global $itsec_globals; 
    1890  
    1891                         echo '<div class="updated" id="itsec_upgrade_notice"> 
    1892                         <a class="itsec-notice-hide" onclick="document.location.href=\'?itsec_no_upgrade_nag=off&_wpnonce=' . wp_create_nonce( 'itsec-nag' ) . '\';">&times;</a><span class="itsec_notice_text">' . __( 'Thank you for activating', 'better-wp-security' ) . ' ' . $itsec_globals['plugin_name'] . '. ' . __( 'It looks like you had another version of this plugin activated. To avoid conflicts the extra version has been deactivated and we recommend you delete it.', 'better-wp-security' ) . '</span> 
    1893                         </div>'; 
    1894  
    1895                     } 
    1896  
    1897                 } 
    1898  
    1899                 if ( is_multisite() ) { 
    1900                     add_action( 'network_admin_notices', 'ithemes_plugin_upgrade_notice' ); //register notification 
    1901                 } else { 
    1902                     add_action( 'admin_notices', 'ithemes_plugin_upgrade_notice' ); //register notification 
    1903                 } 
    1904  
    1905             } 
    1906  
    1907             //if they've clicked a button hide the notice 
    1908             if ( isset( $_GET['itsec_no_upgrade_nag'] ) && wp_verify_nonce( $_REQUEST['_wpnonce'], 'itsec-nag' ) ) { 
    1909  
    1910                 delete_site_option( 'itsec_had_other_version' ); 
    1911  
    1912                 $options = get_site_option( 'itsec_data' ); 
    1913  
    1914                 $options['already_supported'] = true; 
    1915  
    1916                 update_site_option( 'itsec_data', $options ); 
    1917  
    1918                 if ( is_multisite() ) { 
    1919                     remove_action( 'network_admin_notices', 'ithemes_plugin_upgrade_notice' ); 
    1920                 } else { 
    1921                     remove_action( 'admin_notices', 'ithemes_plugin_upgrade_notice' ); 
    1922                 } 
    1923  
    1924                 if ( sanitize_text_field( $_GET['itsec_no_upgrade_nag'] ) == 'off' && isset( $_SERVER['HTTP_REFERER'] ) ) { 
    1925  
    1926                     wp_redirect( $_SERVER['HTTP_REFERER'], '302' ); 
    1927  
    1928                 } else { 
    1929  
    1930                     wp_redirect( 'admin.php?page=itsec', '302' ); 
    1931  
    1932                 } 
    1933  
    1934             } 
    1935  
    1936         } 
    1937  
    19381546    } 
    19391547 
  • better-wp-security/trunk/core/class-itsec-dashboard-admin.php

    r1283582 r1330783  
    4343    public function itsec_add_admin_meta_boxes() { 
    4444 
    45         //System status shows which plugin features have been activated 
    46         add_meta_box( 
    47             'itsec_status', 
    48             __( 'Security Status', 'better-wp-security' ), 
    49             array( $this, 'metabox_normal_status' ), 
    50             'toplevel_page_itsec', 
    51             'advanced', 
    52             'core' 
    53         ); 
    54  
    5545        add_meta_box( 
    5646            'itsec_file_permissions', 
     
    8676 
    8777        require_once( 'content/perms.php' ); 
    88  
    89     } 
    90  
    91     /** 
    92      * Display security status. 
    93      * 
    94      * Builds and displays the table showing the security status as determined 
    95      * by which features have been configured. 
    96      * 
    97      * @since 4.0.0 
    98      * 
    99      * @return void 
    100      */ 
    101     public function metabox_normal_status() { 
    102  
    103         require_once( 'content/status.php' ); 
    10478 
    10579    } 
  • better-wp-security/trunk/core/class-itsec-global-settings.php

    r1283582 r1330783  
    6666    public function add_module_advanced_intro() { 
    6767 
    68         global $itsec_globals; 
    69  
    70         if ( array_key_exists( 'backup', $itsec_globals['free_modules'] ) ) { 
    71  
    72             $backup_link_open  = '<strong><a href="?page=toplevel_page_itsec_backups">'; 
    73             $backup_link_close = '</a></strong>'; 
    74  
    75         } else { 
    76  
    77             $backup_link_open  = ''; 
    78             $backup_link_close = ''; 
    79  
    80         } 
    81  
    8268        printf( 
    83             '<p>%s %s%s%s %s</p>', 
     69            '<p>%s %s %s</p>', 
    8470            __( 'The settings below are more advanced settings that should be done with caution on an existing site.', 'better-wp-security' ), 
    85             $backup_link_open, 
    86             __( 'Make sure you have a good backup before changing any setting on this page.', 'better-wp-security' ), 
    87             $backup_link_close, 
     71            apply_filters( 'itsec_advanced_intro_backup_text', __( 'Make sure you have a good backup before changing any setting on this page.', 'better-wp-security' ) ), 
    8872            __( 'In addition, these settings will not be reversed if you remove this plugin. That said, all settings on this page use methods recommended by WordPress.org itself and will help in improving the security of your site.', 'better-wp-security' ) 
    8973        ); 
  • better-wp-security/trunk/core/class-itsec-setup.php

    r1283582 r1330783  
    106106     */ 
    107107    function do_modules() { 
    108  
    109         global $itsec_globals; 
    110  
    111         $free_modules_folder = trailingslashit( $itsec_globals['plugin_dir'] ) . 'core/modules'; 
    112         $pro_modules_folder  = trailingslashit( $itsec_globals['plugin_dir'] ) . 'pro'; 
    113  
    114         $has_pro = is_dir( $pro_modules_folder ); 
    115  
    116         if ( $has_pro ) { 
    117  
    118             foreach ( $itsec_globals['pro_modules'] as $module => $info ) { 
    119  
    120                 if ( file_exists( $pro_modules_folder . '/' . $module . '/setup.php' ) ) { 
    121                     require( $pro_modules_folder . '/' . $module . '/setup.php' ); 
    122                 } 
    123  
    124             } 
    125  
    126         } 
    127  
    128         foreach ( $itsec_globals['free_modules'] as $module => $info ) { 
    129  
    130             if ( ( $has_pro === false || ! in_array( $module, $itsec_globals['pro_modules'] ) ) && file_exists( $free_modules_folder . '/' . $module . '/setup.php' ) ) { 
    131                 require( $free_modules_folder . '/' . $module . '/setup.php' ); 
    132             } 
    133  
    134         } 
    135  
     108        $itsec_modules = ITSEC_Modules::get_instance(); 
     109        $itsec_modules->run_activation(); 
    136110    } 
    137111 
  • better-wp-security/trunk/core/history.txt

    r1283582 r1330783  
    296296    Enhancement: Added detailed information about Sucuri malware scan errors to Malware Scan log details. 
    297297    Bug Fix: No longer enables display of database errors when an event is logged. 
     2982.1.0 - 2016-01-11 - Chris Jean & Aaron D. Campbell 
     299    Security Fix: Fixed PHP code that could allow AJAX requests to list directories and files outside the directory structure of the WordPress installation. Note that these AJAX requests required a logged in user with admin-level privileges. This vulnerability was unable to be exploited by non-privileged or anonymous requests. 
     300    Bug Fix: Updated the SSL feature to use 301 redirects rather than 302 redirects. 
     301    Bug Fix: Fixed situations where security nonces would incorrectly trigger "security check" errors when enabling specific combinations of features on the settings page. 
     302    Bug Fix: Enabling scheduled database backups and setting a backup interval of 0 days no longer results in a backup being created on every page load. 
     303    Feature Removal: Removed the "Security Status" portion of the Security > Dashboard page. This is in preparation for a new tool that provides suggestions tailored to the site and server that Security is running on. 
     304    Enhancement: Updated the way the feature modules function in order to allow them to be redesigned in a more efficient and flexible way for future releases. 
     305    Enhancement: Updated the File Change Detection feature to attempt a max memory limit of 256M rather than 128M as some users experience out of memory issues which could be fixed with the higher memory limit. 
     306    Enhancement: Updated the Database Backup feature to attempt a max memory limit of 256M rather than 128M as some users experience out of memory issues which could be fixed with the higher memory limit. 
     307    Enhancement: Added localization support for some non-localized strings. 
     3082.1.1 - 2016-01-14 - Chris Jean & Aaron D. Campbell 
     309    Bug Fix: Module-specific data is properly initialized/removed on plugin activation, deactivation, and uninstallation. 
     3102.1.2 - 2016-01-15 - Chris Jean & Aaron D. Campbell 
     311    Enhancement: Updated handler for multiple active versions of iThemes Security. 
  • better-wp-security/trunk/core/modules/admin-user/class-itsec-admin-user-admin.php

    r1283582 r1330783  
    1515        add_action( 'admin_enqueue_scripts', array( $this, 'admin_script' ) ); //enqueue scripts for admin page 
    1616        add_action( 'itsec_add_admin_meta_boxes', array( $this, 'add_admin_meta_boxes' ) ); //add meta boxes to admin page 
    17         add_filter( 'itsec_add_dashboard_status', array( $this, 'dashboard_status' ) ); //add information for plugin status 
    1817 
    1918        if ( ! empty( $_POST ) ) { 
     
    162161 
    163162    /** 
    164      * Sets the status in the plugin dashboard 
    165      * 
    166      * @since 4.0 
    167      * 
    168      * @return array array of statuses 
    169      */ 
    170     public function dashboard_status( $statuses ) { 
    171  
    172         if ( ! username_exists( 'admin' ) ) { 
    173  
    174             $status_array = 'safe-high'; 
    175             $status       = array( 
    176                 'text' => __( 'The <em>admin</em> user has been removed or renamed.', 'better-wp-security' ), 
    177                 'link' => '#itsec_authentication_admin_user_username', 'advanced' => true, 
    178             ); 
    179  
    180         } else { 
    181  
    182             $status_array = 'high'; 
    183             $status       = array( 
    184                 'text' => __( 'The <em>admin</em> user still exists.', 'better-wp-security' ), 
    185                 'link' => '#itsec_authentication_admin_user_username', 'advanced' => true, 
    186             ); 
    187  
    188         } 
    189  
    190         array_push( $statuses[$status_array], $status ); 
    191  
    192         if ( ! ITSEC_Lib::user_id_exists( 1 ) ) { 
    193  
    194             $status_array = 'safe-medium'; 
    195             $status       = array( 
    196                 'text' => __( 'The user with id 1 has been removed.', 'better-wp-security' ), 
    197                 'link' => '#itsec_authentication_admin_user_userid', 'advanced' => true, 
    198             ); 
    199  
    200         } else { 
    201  
    202             $status_array = 'medium'; 
    203             $status       = array( 
    204                 'text' => __( 'A user with id 1 still exists.', 'better-wp-security' ), 
    205                 'link' => '#itsec_authentication_admin_user_userid', 'advanced' => true, 
    206             ); 
    207  
    208         } 
    209  
    210         array_push( $statuses[$status_array], $status ); 
    211  
    212         return $statuses; 
    213  
    214     } 
    215  
    216     /** 
    217163     * Execute admin initializations 
    218164     * 
     
    224170 
    225171        if ( ! $this->settings === true && isset( $_POST['itsec_enable_admin_user'] ) && $_POST['itsec_enable_admin_user'] == 'true' ) { 
    226  
    227             if ( ! wp_verify_nonce( $_POST['wp_nonce'], 'ITSEC_admin_save' ) ) { 
     172            if ( empty( $_POST['admin_user_nonce'] ) ) { 
     173                return; 
     174            } 
     175 
     176            if ( ! wp_verify_nonce( $_POST['admin_user_nonce'], 'save_admin_user_settings' ) ) { 
    228177                die( __( 'Security check', 'better-wp-security' ) ); 
    229178            } 
     
    311260                  class="itsec-form"> 
    312261 
    313                 <?php wp_nonce_field( 'ITSEC_admin_save', 'wp_nonce' ); ?> 
     262                <?php wp_nonce_field( 'save_admin_user_settings', 'admin_user_nonce' ); ?> 
    314263 
    315264                <table class="form-table"> 
  • better-wp-security/trunk/core/modules/away-mode/class-itsec-away-mode-admin.php

    r1283582 r1330783  
    2323        add_action( 'itsec_admin_init', array( $this, 'initialize_admin' ) ); //initialize admin area 
    2424        add_action( 'admin_enqueue_scripts', array( $this, 'admin_script' ) ); //enqueue scripts for admin page 
    25         add_filter( 'itsec_add_dashboard_status', array( 
    26             $this, 'dashboard_status' 
    27         ) ); //add information for plugin status 
    2825        add_filter( 'itsec_tracking_vars', array( $this, 'tracking_vars' ) ); 
    2926 
     
    273270 
    274271    /** 
    275      * Sets the status in the plugin dashboard 
    276      * 
    277      * @since 4.0 
    278      * 
    279      * @return array array of statuses 
    280      */ 
    281     public function dashboard_status( $statuses ) { 
    282  
    283         if ( $this->settings['enabled'] === true ) { 
    284  
    285             $status_array = 'safe-medium'; 
    286             $status       = array( 
    287                 'text' => __( 'Away Mode is enabled and your WordPress Dashboard is not available when you will not be needing it.', 'better-wp-security' ), 
    288                 'link' => '#itsec_away_mode_enabled', 
    289             ); 
    290  
    291         } else { 
    292  
    293             $status_array = 'medium'; 
    294             $status       = array( 
    295                 'text' => __( 'Your WordPress Dashboard is available 24/7. Do you really update 24 hours a day? Consider using Away Mode.', 'better-wp-security' ), 
    296                 'link' => '#itsec_away_mode_enabled', 
    297             ); 
    298  
    299         } 
    300  
    301         array_push( $statuses[$status_array], $status ); 
    302  
    303         return $statuses; 
    304  
    305     } 
    306  
    307     /** 
    308272     * Execute admin initializations 
    309273     * 
  • better-wp-security/trunk/core/modules/away-mode/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1316 
    1417            $this->defaults = array( 
     
    1821                'end'     => 1, 
    1922            ); 
    20  
    21             if ( isset( $itsec_setup_action ) ) { 
    22  
    23                 switch ( $itsec_setup_action ) { 
    24  
    25                     case 'activate': 
    26                         $this->execute_activate(); 
    27                         break; 
    28                     case 'upgrade': 
    29                         $this->execute_upgrade(); 
    30                         break; 
    31                     case 'deactivate': 
    32                         $this->execute_deactivate(); 
    33                         break; 
    34                     case 'uninstall': 
    35                         $this->execute_uninstall(); 
    36                         break; 
    37  
    38                 } 
    39  
    40             } else { 
    41                 wp_die( 'error' ); 
    42             } 
    4323 
    4424        } 
     
    9474         * @return void 
    9575         */ 
    96         public function execute_upgrade() { 
    97  
    98             global $itsec_old_version; 
     76        public function execute_upgrade( $itsec_old_version ) { 
    9977 
    10078            if ( $itsec_old_version < 4000 ) { 
  • better-wp-security/trunk/core/modules/backup/class-itsec-backup-admin.php

    r1283582 r1330783  
    6262        add_action( 'itsec_admin_init', array( $this, 'itsec_admin_init' ) ); //initialize admin area 
    6363 
    64         add_filter( 'itsec_add_dashboard_status', array( $this, 'itsec_add_dashboard_status' ) ); //add information for plugin status 
    6564        add_filter( 'itsec_tooltip_modules', array( $this, 'itsec_tooltip_modules' ) ); //register tooltip action 
    6665        add_filter( 'itsec_tracking_vars', array( $this, 'itsec_tracking_vars' ) ); 
     
    7271        } 
    7372 
     73        add_filter( 'itsec_advanced_intro_backup_text', array( $this, 'itsec_advanced_intro_backup_text' ) ); 
     74 
     75    } 
     76 
     77    /** 
     78     * Wrap the advanced intro backup text in a link 
     79     * 
     80     * @param string $text The current text 
     81     * 
     82     * @return string The link 
     83     */ 
     84    public function itsec_advanced_intro_backup_text( $text ) { 
     85        return "<strong><a href='?page=toplevel_page_itsec_backups'>{$text}</a></strong>"; 
    7486    } 
    7587 
     
    247259 
    248260        } 
    249  
    250     } 
    251  
    252     /** 
    253      * Sets the status in the plugin dashboard 
    254      * 
    255      * Sets a medium priority item for the module's functionality in the plugin 
    256      * dashboard. 
    257      * 
    258      * @since 4.0.0 
    259      * 
    260      * @param array $statuses array of existing plugin dashboard statuses 
    261      * 
    262      * @return array statuses 
    263      */ 
    264     public function itsec_add_dashboard_status( $statuses ) { 
    265  
    266         if ( ! is_multisite() && class_exists( 'backupbuddy_api' ) && 1 <= sizeof( backupbuddy_api::getSchedules() ) ) { 
    267  
    268             if ( true === $this->settings['enabled'] ) { //disable our backups if we have to 
    269  
    270                 $this->settings['enabled'] = false; 
    271                 update_site_option( 'itsec_backup', $this->settings ); 
    272  
    273             } 
    274  
    275             $status_array = 'safe-medium'; 
    276             $status       = array( 
    277                 'text' => __( 'Your site is performing scheduled database and file backups.', 'better-wp-security' ), 
    278                 'link' => '?page=pb_backupbuddy_scheduling', 
    279             ); 
    280  
    281         } elseif ( ! is_multisite() && class_exists( 'backupbuddy_api' ) ) { 
    282  
    283             if ( $this->settings['enabled'] === true ) { //disable our backups if we have to 
    284  
    285                 $this->settings['enabled'] = false; 
    286                 update_site_option( 'itsec_backup', $this->settings ); 
    287  
    288             } 
    289  
    290             $status_array = 'medium'; 
    291             $status       = array( 
    292                 'text' => __( 'BackupBuddy is installed but backups do not appear to have been scheduled. Please schedule backups.', 'better-wp-security' ), 
    293                 'link' => '?page=pb_backupbuddy_scheduling', 
    294             ); 
    295  
    296         } elseif ( true === $this->has_backup() && true === $this->scheduled_backup() ) { 
    297  
    298             if ( true === $this->settings['enabled'] ) { //disable our backups if we have to 
    299  
    300                 $this->settings['enabled'] = false; 
    301                 update_site_option( 'itsec_backup', $this->settings ); 
    302  
    303             } 
    304  
    305             $status_array = 'safe-medium'; 
    306             $status       = array( 
    307                 'text' => __( 'You are using a 3rd party backup solution.', 'better-wp-security' ), 
    308                 'link' => $this->external_backup_link(), 
    309             ); 
    310  
    311         } elseif ( true === $this->has_backup() ) { 
    312  
    313             if ( true === $this->settings['enabled'] ) { //disable our backups if we have to 
    314  
    315                 $this->settings['enabled'] = false; 
    316                 update_site_option( 'itsec_backup', $this->settings ); 
    317  
    318             } 
    319  
    320             $status_array = 'medium'; 
    321             $status       = array( 
    322                 'text' => __( 'It looks like you have a 3rd-party backup solution in place but are not using it. Please turn on scheduled backups.', 'better-wp-security' ), 
    323                 'link' => $this->external_backup_link(), 
    324             ); 
    325  
    326         } elseif ( true === $this->settings['enabled'] ) { 
    327  
    328             $status_array = 'medium'; 
    329             $status       = array( 
    330                 'text' => __( 'Your site is performing scheduled database backups but is not backing up files. Consider purchasing or scheduling BackupBuddy to protect your investment.', 'better-wp-security' ), 
    331                 'link' => 'http://ithemes.com/better-backups', 
    332             ); 
    333  
    334         } else { 
    335  
    336             $status_array = 'high'; 
    337             $status       = array( 
    338                 'text' => __( 'Your site is not performing any scheduled database backups.', 'better-wp-security' ), 
    339                 'link' => '#itsec_backup_enabled', 
    340             ); 
    341  
    342         } 
    343  
    344         array_push( $statuses[$status_array], $status ); 
    345  
    346         return $statuses; 
    347261 
    348262    } 
  • better-wp-security/trunk/core/modules/backup/class-itsec-backup.php

    r1283582 r1330783  
    6262                false === ITSEC_BACKUP_CRON 
    6363            ) && 
     64            ! class_exists( 'pb_backupbuddy' ) && 
    6465            true === $this->settings['enabled'] && 
    65             ! class_exists( 'pb_backupbuddy' ) && 
     66            ( $this->settings['interval'] > 0 ) && 
    6667            ( $itsec_globals['current_time_gmt'] - $this->settings['interval'] * 24 * 60 * 60 ) > $this->settings['last_run'] 
    6768        ) { 
     
    9293        global $itsec_files; 
    9394 
    94         ITSEC_Lib::set_minimum_memory_limit( '128M' ); 
     95        ITSEC_Lib::set_minimum_memory_limit( '256M' ); 
    9596 
    9697        if ( $itsec_files->get_file_lock( 'backup' ) ) { 
  • better-wp-security/trunk/core/modules/backup/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action, $itsec_globals; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
     16 
     17            global $itsec_globals; 
    1318 
    1419            $this->defaults = array( 
     
    2732                'retain'    => 0, 
    2833            ); 
    29  
    30             if ( isset( $itsec_setup_action ) ) { 
    31  
    32                 switch ( $itsec_setup_action ) { 
    33  
    34                     case 'activate': 
    35                         $this->execute_activate(); 
    36                         break; 
    37                     case 'upgrade': 
    38                         $this->execute_upgrade(); 
    39                         break; 
    40                     case 'deactivate': 
    41                         $this->execute_deactivate(); 
    42                         break; 
    43                     case 'uninstall': 
    44                         $this->execute_uninstall(); 
    45                         break; 
    46  
    47                 } 
    48  
    49             } else { 
    50                 wp_die( 'error' ); 
    51             } 
    5234 
    5335        } 
     
    9880         * @return void 
    9981         */ 
    100         public function execute_upgrade() { 
    101  
    102             global $itsec_old_version; 
     82        public function execute_upgrade( $itsec_old_version ) { 
    10383 
    10484            if ( $itsec_old_version < 4000 ) { 
  • better-wp-security/trunk/core/modules/ban-users/class-itsec-ban-users-admin.php

    r1283582 r1330783  
    1818        add_action( 'itsec_admin_init', array( $this, 'initialize_admin' ) ); //initialize admin area 
    1919        add_action( 'admin_enqueue_scripts', array( $this, 'admin_script' ) ); //enqueue scripts for admin page 
    20         add_filter( 'itsec_add_dashboard_status', array( $this, 'dashboard_status' ) ); //add information for plugin status 
    2120        add_filter( 'itsec_tracking_vars', array( $this, 'tracking_vars' ) ); 
    2221 
     
    194193        $modification .= $this->get_server_config_ban_hosts_rules( 'apache' ); 
    195194        $modification .= $this->get_server_config_ban_user_agents_rules( 'apache' ); 
    196          
     195 
    197196        return $modification; 
    198197    } 
    199      
     198 
    200199    public function filter_nginx_server_config_modification( $modification ) { 
    201200        $modification .= $this->get_server_config_default_blacklist_rules( 'nginx' ); 
    202201        $modification .= $this->get_server_config_ban_hosts_rules( 'nginx' ); 
    203202        $modification .= $this->get_server_config_ban_user_agents_rules( 'nginx' ); 
    204          
     203 
    205204        return $modification; 
    206205    } 
    207      
     206 
    208207    public function filter_litespeed_server_config_modification( $modification ) { 
    209208        $modification .= $this->get_server_config_default_blacklist_rules( 'litespeed' ); 
    210209        $modification .= $this->get_server_config_ban_hosts_rules( 'litespeed' ); 
    211210        $modification .= $this->get_server_config_ban_user_agents_rules( 'litespeed' ); 
    212          
     211 
    213212        return $modification; 
    214213    } 
    215      
     214 
    216215    protected function get_server_config_default_blacklist_rules( $server_type ) { 
    217216        if ( true !== $this->settings['default'] ) { 
    218217            return ''; 
    219218        } 
    220          
    221          
     219 
     220 
    222221        $rules = ''; 
    223          
     222 
    224223        require_once( trailingslashit( $GLOBALS['itsec_globals']['plugin_dir'] ) . 'core/lib/class-itsec-lib-file.php' ); 
    225          
     224 
    226225        $file = plugin_dir_path( __FILE__ ) . "lists/hackrepair-$server_type.inc"; 
    227          
     226 
    228227        if ( ITSEC_Lib_File::is_file( $file ) ) { 
    229228            $default_list = ITSEC_Lib_File::read( $file ); 
    230              
     229 
    231230            if ( ! empty( $default_list ) ) { 
    232231                $default_list = preg_replace( '/^/m', "\t", $default_list ); 
    233                  
     232 
    234233                $rules .= "\n"; 
    235234                $rules .= "\t# " . __( 'Enable HackRepair.com\'s blacklist feature - Security > Settings > Banned Users > Default Blacklist', 'better-wp-security' ) . "\n"; 
     
    237236            } 
    238237        } 
    239          
     238 
    240239        return $rules; 
    241240    } 
    242      
     241 
    243242    protected function get_server_config_ban_hosts_rules( $server_type ) { 
    244243        if ( true !== $this->settings['enabled']  ) { 
     
    248247            return ''; 
    249248        } 
    250          
    251          
    252          
     249 
     250 
     251 
    253252        if ( ! class_exists( 'ITSEC_Ban_Users' ) ) { 
    254253            require( dirname( __FILE__ ) . '/class-itsec-ban-users.php' ); 
    255254        } 
    256          
    257          
     255 
     256 
    258257        $host_rules = ''; 
    259258        $set_env_rules = ''; 
    260259        $deny_rules = ''; 
    261260        $require_rules = ''; 
    262          
     261 
    263262        // process hosts list 
    264263        foreach ( $this->settings['host_list'] as $host ) { 
    265264            $host = ITSEC_Lib::ip_wild_to_mask( $host ); 
    266265            $host = trim( $host ); 
    267              
     266 
    268267            if ( empty( $host ) ) { 
    269268                continue; 
    270269            } 
    271              
     270 
    272271            if ( ITSEC_Ban_Users::is_ip_whitelisted( $host ) ) { 
    273272                /** 
     
    276275                continue; 
    277276            } 
    278              
    279              
     277 
     278 
    280279            if ( in_array( $server_type, array( 'apache', 'litespeed' ) ) ) { 
    281280                $converted_host = ITSEC_Lib::ip_mask_to_range( $host ); 
    282281                $converted_host = trim( $converted_host ); 
    283                  
     282 
    284283                if ( empty( $converted_host ) ) { 
    285284                    continue; 
    286285                } 
    287                  
    288                  
     286 
     287 
    289288                $set_env_host = str_replace( '.', '\\.', $converted_host ); 
    290                  
     289 
    291290                $set_env_rules .= "\tSetEnvIF REMOTE_ADDR \"^$set_env_host$\" DenyAccess\n"; // Ban IP 
    292291                $set_env_rules .= "\tSetEnvIF X-FORWARDED-FOR \"^$set_env_host$\" DenyAccess\n"; // Ban IP from a proxy 
    293292                $set_env_rules .= "\tSetEnvIF X-CLUSTER-CLIENT-IP \"^$set_env_host$\" DenyAccess\n"; // Ban IP from a load balancer 
    294293                $set_env_rules .= "\n"; 
    295                  
    296                  
     294 
     295 
    297296                $require_host = str_replace( '.[0-9]+', '', $converted_host ); 
    298                  
     297 
    299298                $require_rules .= "\t\t\tRequire not ip $require_host\n"; 
    300299                $deny_rules .= "\t\tDeny from $require_host\n"; 
     
    303302            } 
    304303        } 
    305          
    306          
     304 
     305 
    307306        $rules = ''; 
    308          
     307 
    309308        if ( 'apache' === $server_type ) { 
    310309            if ( ! empty( $set_env_rules ) ) { 
     
    345344            } 
    346345        } 
    347          
     346 
    348347        return $rules; 
    349348    } 
    350      
     349 
    351350    protected function get_server_config_ban_user_agents_rules( $server_type ) { 
    352351        if ( true !== $this->settings['enabled']  ) { 
     
    356355            return ''; 
    357356        } 
    358          
    359          
     357 
     358 
    360359        $agent_rules = ''; 
    361360        $rewrite_rules = ''; 
    362          
     361 
    363362        foreach ( $this->settings['agent_list'] as $index => $agent ) { 
    364363            $agent = trim( $agent ); 
    365              
     364 
    366365            if ( empty( $agent ) ) { 
    367366                continue; 
    368367            } 
    369              
    370              
     368 
     369 
    371370            $agent = preg_quote( $agent ); 
    372              
     371 
    373372            if ( in_array( $server_type, array( 'apache', 'litespeed' ) ) ) { 
    374373                $agent = str_replace( ' ', '\\ ', $agent ); 
     
    379378            } 
    380379        } 
    381          
     380 
    382381        if ( in_array( $server_type, array( 'apache', 'litespeed' ) ) && ! empty( $rewrite_rules ) ) { 
    383382            $rewrite_rules = preg_replace( "/\[NC,OR\]\n$/", "[NC]\n", $rewrite_rules ); 
    384              
     383 
    385384            $agent_rules .= "\t<IfModule mod_rewrite.c>\n"; 
    386385            $agent_rules .= "\t\tRewriteEngine On\n"; 
     
    389388            $agent_rules .= "\t</IfModule>\n"; 
    390389        } 
    391          
    392          
     390 
     391 
    393392        $rules = ''; 
    394          
     393 
    395394        if ( ! empty( $agent_rules ) ) { 
    396395            $rules .= "\n"; 
     
    398397            $rules .= $agent_rules; 
    399398        } 
    400          
     399 
    401400        return $rules; 
    402     } 
    403  
    404     /** 
    405      * Sets the status in the plugin dashboard 
    406      * 
    407      * @since 4.0 
    408      * 
    409      * @return array statuses 
    410      */ 
    411     public function dashboard_status( $statuses ) { 
    412  
    413         if ( $this->settings['enabled'] === true ) { 
    414  
    415             $status_array = 'safe-low'; 
    416             $status       = array( 
    417                 'text' => __( 'You are blocking known bad hosts and agents with the ban users tool.', 'better-wp-security' ), 
    418                 'link' => '#itsec_ban_users_enabled', 
    419             ); 
    420  
    421         } else { 
    422  
    423             $status_array = 'low'; 
    424             $status       = array( 
    425                 'text' => __( 'You are not blocking any users that are known to be a problem. Consider turning on the Ban Users feature.', 'better-wp-security' ), 
    426                 'link' => '#itsec_ban_users_enabled', 
    427             ); 
    428  
    429         } 
    430  
    431         array_push( $statuses[$status_array], $status ); 
    432  
    433         return $statuses; 
    434  
    435401    } 
    436402 
     
    582548        foreach ( $agents as $agent ) { 
    583549            $agent = trim( sanitize_text_field( $agent ) ); 
    584              
     550 
    585551            if ( ! empty( $agent ) ) { 
    586552                $good_agents[] = $agent; 
     
    602568            require( dirname( __FILE__ ) . '/class-itsec-ban-users.php' ); 
    603569        } 
    604          
     570 
    605571        $bad_ips   = array(); 
    606572        $white_ips = array(); 
    607573        $raw_ips   = array(); 
    608          
     574 
    609575        foreach ( $addresses as $index => $address ) { 
    610576            $address = trim( $address ); 
    611              
     577 
    612578            if ( empty( $address ) ) { 
    613579                continue; 
    614580            } 
    615              
     581 
    616582            if ( ! ITSEC_Lib::validates_ip_address( $address ) ) { 
    617583                $bad_ips[] = trim( filter_var( $address, FILTER_SANITIZE_STRING ) ); 
    618584            } 
    619              
     585 
    620586            if ( ITSEC_Ban_Users::is_ip_whitelisted( $address, null, true ) ) { 
    621587                $white_ips[] = trim( filter_var( $address, FILTER_SANITIZE_STRING ) ); 
    622588            } 
    623              
     589 
    624590            $raw_ips[] = trim( filter_var( $address, FILTER_SANITIZE_STRING ) ); 
    625591        } 
  • better-wp-security/trunk/core/modules/ban-users/setup.php

    r1283582 r1330783  
    99 
    1010        public function __construct() { 
    11  
    12             global $itsec_setup_action; 
     11            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     12            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     13            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     14            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1315 
    1416            $this->defaults = array( 
     
    1820                'agent_list' => array(), 
    1921            ); 
    20  
    21             if ( isset( $itsec_setup_action ) ) { 
    22  
    23                 switch ( $itsec_setup_action ) { 
    24  
    25                     case 'activate': 
    26                         $this->execute_activate(); 
    27                         break; 
    28                     case 'upgrade': 
    29                         $this->execute_upgrade(); 
    30                         break; 
    31                     case 'deactivate': 
    32                         $this->execute_deactivate(); 
    33                         break; 
    34                     case 'uninstall': 
    35                         $this->execute_uninstall(); 
    36                         break; 
    37  
    38                 } 
    39  
    40             } else { 
    41                 wp_die( 'error' ); 
    42             } 
    4322 
    4423        } 
     
    9271         * @return void 
    9372         */ 
    94         public function execute_upgrade() { 
    95  
    96             global $itsec_old_version; 
     73        public function execute_upgrade( $itsec_old_version ) { 
    9774 
    9875            if ( $itsec_old_version < 4000 ) { 
  • better-wp-security/trunk/core/modules/brute-force/class-itsec-brute-force-admin.php

    r1283582 r1330783  
    1818        add_action( 'itsec_admin_init', array( $this, 'itsec_admin_init' ) ); //initialize admin area 
    1919 
    20         add_filter( 'itsec_add_dashboard_status', array( $this, 'itsec_add_dashboard_status' ) ); //add information for plugin status 
    2120        add_filter( 'itsec_logger_displays', array( $this, 'itsec_logger_displays' ) ); //adds logs metaboxes 
    22         add_filter( 'itsec_one_click_settings', array( $this, 'itsec_one_click_settings' ) ); 
    2321        add_filter( 'itsec_tracking_vars', array( $this, 'itsec_tracking_vars' ) ); 
    2422 
     
    7270                   ) 
    7371        ); 
    74  
    75     } 
    76  
    77     /** 
    78      * Sets the status in the plugin dashboard 
    79      * 
    80      * @since 4.0 
    81      * 
    82      * @param array $statuses array of statuses 
    83      * 
    84      * @return array array of statuses 
    85      */ 
    86     public function itsec_add_dashboard_status( $statuses ) { 
    87  
    88         $ipcheck = get_site_option( 'itsec_ipcheck' ); 
    89         $api_ban = false; 
    90  
    91         if ( class_exists( 'ITSEC_IPCheck_Admin' ) && isset( $ipcheck['api_key'] ) && isset( $ipcheck['api_s'] ) && isset( $ipcheck['api_ban'] ) && $ipcheck['api_ban'] === true ) { 
    92             $api_ban = true; 
    93         } 
    94  
    95         if ( isset( $this->settings['enabled'] ) && $this->settings['enabled'] === true && $api_ban === true ) { 
    96  
    97             $status_array = 'safe-high'; 
    98             $status       = array( 'text' => __( 'Your login area is protected from brute force attacks.', 'better-wp-security' ), 'link' => '#itsec_brute_force_settings', ); 
    99  
    100         } elseif ( ( ( ! isset( $this->settings['enabled'] ) || $this->settings['enabled'] === false ) && $api_ban === true ) || ( ( isset( $this->settings['enabled'] ) && $this->settings['enabled'] === true ) && $api_ban === false ) ) { 
    101  
    102             $status_array = 'medium'; 
    103             $status       = array( 'text' => __( 'Your login area is partially protected from brute force attacks. We recommend you use both network and local blocking for full security.', 'better-wp-security' ), 'link' => '#itsec_brute_force_settings', ); 
    104  
    105         } else { 
    106  
    107             $status_array = 'high'; 
    108             $status       = array( 'text' => __( 'Your login area is not protected from brute force attacks.', 'better-wp-security' ), 'link' => '#itsec_brute_force_settings', ); 
    109  
    110         } 
    111  
    112         array_push( $statuses[$status_array], $status ); 
    113  
    114         return $statuses; 
    11572 
    11673    } 
     
    215172 
    216173    /** 
    217      * Register one-click settings 
    218      * 
    219      * @since 4.0 
    220      * 
    221      * @param array $one_click_settings array of one-click settings 
    222      * 
    223      * @return array array of one-click settings 
    224      */ 
    225     public function itsec_one_click_settings( $one_click_settings ) { 
    226  
    227         $one_click_settings['itsec_brute_force'][] = array( 
    228             'option' => 'enabled', 
    229             'value'  => 1, 
    230         ); 
    231  
    232         return $one_click_settings; 
    233  
    234     } 
    235  
    236     /** 
    237174     * Adds fields that will be tracked for Google Analytics 
    238175     * 
  • better-wp-security/trunk/core/modules/brute-force/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1316 
    1417            $this->defaults = array( 
     
    1922                'auto_ban_admin'    => false, 
    2023            ); 
    21  
    22             if ( isset( $itsec_setup_action ) ) { 
    23  
    24                 switch ( $itsec_setup_action ) { 
    25  
    26                     case 'activate': 
    27                         $this->execute_activate(); 
    28                         break; 
    29                     case 'upgrade': 
    30                         $this->execute_upgrade(); 
    31                         break; 
    32                     case 'deactivate': 
    33                         $this->execute_deactivate(); 
    34                         break; 
    35                     case 'uninstall': 
    36                         $this->execute_uninstall(); 
    37                         break; 
    38  
    39                 } 
    40  
    41             } else { 
    42                 wp_die( 'error' ); 
    43             } 
    4424 
    4525        } 
     
    9070         * @return void 
    9171         */ 
    92         public function execute_upgrade() { 
    93  
    94             global $itsec_old_version; 
     72        public function execute_upgrade( $itsec_old_version ) { 
    9573 
    9674            if ( $itsec_old_version < 4000 ) { 
  • better-wp-security/trunk/core/modules/content-directory/class-itsec-content-directory-admin.php

    r1283582 r1330783  
    2121 
    2222        if ( ! $this->is_custom_directory() || $this->is_modified_by_it_security() ) { 
    23             add_action( 'admin_enqueue_scripts', array( $this, 'admin_script' ) ); 
    2423            add_action( 'itsec_add_admin_meta_boxes', array( $this, 'add_admin_meta_boxes' ) ); 
    2524        } 
     
    8281 
    8382    /** 
    84      * Add Away mode Javascript 
    85      * 
    86      * @return void 
    87      */ 
    88     public function admin_script() { 
    89  
    90         global $itsec_globals; 
    91  
    92         if ( isset( get_current_screen()->id ) && strpos( get_current_screen()->id, 'security_page_toplevel_page_itsec_advanced' ) !== false ) { 
    93  
    94             wp_enqueue_script( 'itsec_content_directory_js', $this->module_path . 'js/admin-content_directory.js', array( 'jquery' ), $itsec_globals['plugin_build'] ); 
    95  
    96         } 
    97  
    98     } 
    99  
    100     /** 
    10183     * Execute admin initializations 
    10284     * 
  • better-wp-security/trunk/core/modules/core/setup.php

    r1283582 r1330783  
    77        public function __construct() { 
    88 
    9             global $itsec_setup_action; 
    10  
    11             if ( isset( $itsec_setup_action ) ) { 
    12  
    13                 switch ( $itsec_setup_action ) { 
    14  
    15                     case 'activate': 
    16                         $this->execute_activate(); 
    17                         break; 
    18                     case 'upgrade': 
    19                         $this->execute_upgrade(); 
    20                         break; 
    21                     case 'deactivate': 
    22                         $this->execute_deactivate(); 
    23                         break; 
    24                     case 'uninstall': 
    25                         $this->execute_uninstall(); 
    26                         break; 
    27  
    28                 } 
    29  
    30             } else { 
    31                 wp_die( 'error' ); 
    32             } 
     9            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     10            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     11            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     12            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    3313 
    3414        } 
  • better-wp-security/trunk/core/modules/database-prefix/class-itsec-database-prefix-admin.php

    r1283582 r1330783  
    1919        add_action( 'itsec_admin_init', array( $this, 'initialize_admin' ) ); //initialize admin area 
    2020        add_action( 'itsec_add_admin_meta_boxes', array( $this, 'add_admin_meta_boxes' ) ); //add meta boxes to admin page 
    21         add_filter( 'itsec_add_dashboard_status', array( $this, 'dashboard_status' ) ); //add information for plugin status 
    2221        add_filter( 'itsec_tracking_vars', array( $this, 'tracking_vars' ) ); 
    2322 
     
    4443            'core' 
    4544        ); 
    46  
    47     } 
    48  
    49     /** 
    50      * Sets the status in the plugin dashboard 
    51      * 
    52      * @since 4.0 
    53      * 
    54      * @return array statuses 
    55      */ 
    56     public function dashboard_status( $statuses ) { 
    57  
    58         if ( $this->settings !== true ) { 
    59  
    60             $status_array = 'safe-medium'; 
    61             $status       = array( 
    62                 'text'     => sprintf( '%s wp_.', __( 'Your database table prefix is not using', 'better-wp-security' ) ), 
    63                 'link'     => '#itsec_change_table_prefix', 
    64                 'advanced' => true, 
    65             ); 
    66  
    67         } else { 
    68  
    69             $status_array = 'medium'; 
    70             $status       = array( 
    71                 'text'     => sprintf( '%s wp_.', __( 'Your database table prefix should not be', 'better-wp-security' ) ), 
    72                 'link'     => '#itsec_change_table_prefix', 
    73                 'advanced' => true, 
    74             ); 
    75  
    76         } 
    77  
    78         array_push( $statuses[ $status_array ], $status ); 
    79  
    80         return $statuses; 
    8145 
    8246    } 
  • better-wp-security/trunk/core/modules/file-change/class-itsec-file-change-admin.php

    r1283582 r1330783  
    6464        add_action( 'wp_ajax_itsec_jquery_filetree_ajax', array( $this, 'wp_ajax_itsec_jquery_filetree_ajax' ) ); 
    6565 
    66         add_filter( 'itsec_add_dashboard_status', array( $this, 'itsec_add_dashboard_status' ) ); //add information for plugin status 
    6766        add_filter( 'itsec_logger_displays', array( $this, 'itsec_logger_displays' ) ); //adds logs metaboxes 
    6867        add_filter( 'itsec_tracking_vars', array( $this, 'itsec_tracking_vars' ) ); 
     
    107106                'itsec_file_change', 
    108107                array( 
    109                     'mem_limit'            => ITSEC_Lib::get_memory_limit(), 
    110                     'text'                 => __( 'Warning: Your server has less than 128MB of RAM dedicated to PHP. If you have many files in your installation or a lot of active plugins activating this feature may result in your site becoming disabled with a memory error. See the plugin homepage for more information.', 'better-wp-security' ), 
    111108                    'module_path'          => $this->module_path, 
    112109                    'button_text'          => isset( $this->settings['split'] ) && true === $this->settings['split'] ? __( 'Scan Next File Chunk', 'better-wp-security' ) : __( 'Scan Files Now', 'better-wp-security' ), 
     
    252249     */ 
    253250    public function file_change_form( $origin ) { 
    254  
    255         if ( isset( $this->settings['enabled'] ) && true === $this->settings['enabled'] ) { 
    256  
    257             echo '<form id="itsec_one_time_file_check" method="post" action="">'; 
    258             echo wp_nonce_field( 'itsec_do_file_check', 'wp_nonce' ); 
    259             echo '<input type="hidden" name="itsec_file_change_origin" value="' . sanitize_text_field( $origin ) . '">'; 
    260             echo '<p>' . __( "Press the button below to scan your site's files for changes. Note that if changes are found this will take you to the logs page for details.", 'better-wp-security' ) . '</p>'; 
    261             echo '<p><input type="submit" id="itsec_one_time_file_check_submit" class="button-primary" value="' . ( isset( $this->settings['split'] ) && true === $this->settings['split'] ? __( 'Scan Next File Chunk', 'better-wp-security' ) : __( 'Scan Files Now', 'better-wp-security' ) ) . '" /></p>'; 
    262             echo '<div id="itsec_file_change_status"><p></p></div>'; 
    263             echo '</form>'; 
    264  
    265         } 
     251        if ( empty( $this->settings['enabled'] ) ) { 
     252            return; 
     253        } 
     254 
     255        echo '<form id="itsec_one_time_file_check" method="post" action="">'; 
     256        echo wp_nonce_field( 'itsec_do_file_check', 'wp_nonce' ); 
     257        echo '<input type="hidden" name="itsec_file_change_origin" value="' . sanitize_text_field( $origin ) . '">'; 
     258        echo '<p>' . __( "Press the button below to scan your site's files for changes. Note that if changes are found this will take you to the logs page for details.", 'better-wp-security' ) . '</p>'; 
     259        echo '<p><input type="submit" id="itsec_one_time_file_check_submit" class="button-primary" value="' . ( isset( $this->settings['split'] ) && true === $this->settings['split'] ? __( 'Scan Next File Chunk', 'better-wp-security' ) : __( 'Scan Files Now', 'better-wp-security' ) ) . '" /></p>'; 
     260        echo '<div id="itsec_file_change_status"><p></p></div>'; 
     261        echo '</form>'; 
    266262 
    267263    } 
     
    301297 
    302298    /** 
    303      * Sets the status in the plugin dashboard 
    304      * 
    305      * Sets a medium priority item for the module's functionality in the plugin 
    306      * dashboard. 
    307      * 
    308      * @since 4.0.0 
    309      * 
    310      * @param array $statuses array of existing plugin dashboard statuses 
    311      * 
    312      * @return array statuses 
    313      */ 
    314     public function itsec_add_dashboard_status( $statuses ) { 
    315  
    316         if ( isset( $this->settings['enabled'] ) && true === $this->settings['enabled'] ) { 
    317  
    318             $status_array = 'safe-medium'; 
    319             $status       = array( 
    320                 'text' => __( 'Your site will detect changes to your files.', 'better-wp-security' ), 
    321                 'link' => '#itsec_file_change_enabled', 
    322             ); 
    323  
    324         } else { 
    325  
    326             $status_array = 'medium'; 
    327             $status       = array( 
    328                 'text' => __( 'Your website is not looking for changed files. Consider turning on file change detections.', 'better-wp-security' ), 
    329                 'link' => '#itsec_file_change_enabled', 
    330             ); 
    331  
    332         } 
    333  
    334         array_push( $statuses[ $status_array ], $status ); 
    335  
    336         return $statuses; 
    337  
    338     } 
    339  
    340     /** 
    341299     * Execute admin initializations 
    342300     * 
     
    471429    public function itsec_logger_displays( $displays ) { 
    472430 
    473         if ( isset( $this->settings['enabled'] ) && true === $this->settings['enabled'] ) { 
    474  
    475             $displays[] = array( 
    476                 'module'   => 'file_change', 
    477                 'title'    => __( 'File Change History', 'better-wp-security' ), 
    478                 'callback' => array( $this, 'logs_metabox_content' ) 
    479             ); 
    480  
    481         } 
     431        $displays[] = array( 
     432            'module'   => 'file_change', 
     433            'title'    => __( 'File Change History', 'better-wp-security' ), 
     434            'callback' => array( $this, 'logs_metabox_content' ) 
     435        ); 
    482436 
    483437        return $displays; 
     
    528482        } 
    529483 
    530         if ( isset( $this->settings['enabled'] ) && true === $this->settings['enabled'] ) { 
    531  
    532             // If we're splitting the file check run it every 6 hours. Else daily. 
    533             if ( isset( $this->settings['split'] ) && true === $this->settings['split'] ) { 
    534  
    535                 $interval = 12342; 
    536  
    537             } else { 
    538  
    539                 $interval = 86400; 
    540  
    541             } 
    542  
    543             $next_run_raw = $this->settings['last_run'] + $interval; 
    544  
    545             if ( date( 'j', $next_run_raw ) == date( 'j', $itsec_globals['current_time'] ) ) { 
    546                 $next_run_day = __( 'Today', 'better-wp-security' ); 
    547             } else { 
    548                 $next_run_day = __( 'Tomorrow', 'better-wp-security' ); 
    549             } 
    550  
    551             $next_run = $next_run_day . ' at ' . date( 'g:i a', $next_run_raw ); 
    552  
    553             echo '<p>' . __( 'Next automatic scan at: ', 'better-wp-security' ) . '<strong>' . $next_run . '*</strong></p>'; 
    554             echo '<p><em>*' . __( 'Automatic file change scanning is triggered by a user visiting your page and may not happen exactly at the time listed.', 'better-wp-security' ) . '</em>'; 
    555  
    556         } 
     484 
     485        // If we're splitting the file check run it every 6 hours. Else daily. 
     486        if ( isset( $this->settings['split'] ) && true === $this->settings['split'] ) { 
     487 
     488            $interval = 12342; 
     489 
     490        } else { 
     491 
     492            $interval = 86400; 
     493 
     494        } 
     495 
     496        $next_run_raw = $this->settings['last_run'] + $interval; 
     497 
     498        if ( date( 'j', $next_run_raw ) == date( 'j', $itsec_globals['current_time'] ) ) { 
     499            $next_run_day = __( 'Today', 'better-wp-security' ); 
     500        } else { 
     501            $next_run_day = __( 'Tomorrow', 'better-wp-security' ); 
     502        } 
     503 
     504        $next_run = $next_run_day . ' at ' . date( 'g:i a', $next_run_raw ); 
     505 
     506        echo '<p>' . __( 'Next automatic scan at: ', 'better-wp-security' ) . '<strong>' . $next_run . '*</strong></p>'; 
     507        echo '<p><em>*' . __( 'Automatic file change scanning is triggered by a user visiting your page and may not happen exactly at the time listed.', 'better-wp-security' ) . '</em>'; 
    557508 
    558509        $log_display = new ITSEC_File_Change_Log(); 
     
    576527 
    577528        echo '<p>' . __( 'Even the best security solutions can fail. How do you know if someone gets into your site? You will know because they will change something. File Change detection will tell you what files have changed in your WordPress installation alerting you to changes not made by yourself. Unlike other solutions this plugin will look only at your installation and compare files to the last check instead of comparing them with a remote installation thereby taking into account whether or not you modify the files yourself.', 'better-wp-security' ) . '</p>'; 
     529 
     530        if ( ITSEC_Lib::get_memory_limit() < 128 ) { 
     531            echo '<div class="itsec-warning-message">' . __( 'Warning: Your server has less than 128MB of RAM dedicated to PHP. If you have many files in your installation or a lot of active plugins activating this feature may result in your site becoming disabled with a memory error. See the plugin homepage for more information.', 'better-wp-security' ) . '</div>'; 
     532        } 
    578533 
    579534        echo $this->file_change_form( 'logs' ); 
     
    721676 
    722677    /** 
     678     * 
    723679     * echos Enable File Change Detection Field 
    724680     * 
     
    936892 
    937893        $directory = sanitize_text_field( $_POST['dir'] ); 
    938  
    939894        $directory = urldecode( $directory ); 
     895        $directory = realpath( $directory ); 
     896 
     897        $base_directory = realpath( ITSEC_Lib::get_home_path() ); 
     898 
     899        // Ensure that requests cannot traverse arbitrary directories. 
     900        if ( 0 !== strpos( $directory, $base_directory ) ) { 
     901            $directory = $base_directory; 
     902        } 
     903 
     904        $directory .= '/'; 
    940905 
    941906        if ( file_exists( $directory ) ) { 
  • better-wp-security/trunk/core/modules/file-change/class-itsec-file-change.php

    r1283582 r1330783  
    165165            $send_email    = true; 
    166166 
    167             ITSEC_Lib::set_minimum_memory_limit( '128M' ); 
     167            ITSEC_Lib::set_minimum_memory_limit( '256M' ); 
    168168 
    169169            if ( $itsec_files->get_file_lock( 'file_change', 300 ) ) { //make sure it isn't already running 
  • better-wp-security/trunk/core/modules/file-change/js/admin-file-change.js

    r1283582 r1330783  
    1717 
    1818    } ).change(); 
    19  
    20     /** 
    21      * Warns the user that they probably don't have enough RAM to perform a file scan 
    22      */ 
    23     if ( itsec_file_change.mem_limit <= 128 ) { 
    24  
    25         $( "#itsec_file_change_enabled" ).change( function () { 
    26  
    27             if ( this.checked ) { 
    28                 alert( itsec_file_change.text ); 
    29  
    30             } 
    31  
    32         } ); 
    33  
    34     } 
    3519 
    3620    /** 
  • better-wp-security/trunk/core/modules/file-change/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1316 
    1417            $this->defaults = array( 
     
    2932                'notify_admin' => true, 
    3033            ); 
    31  
    32             if ( isset( $itsec_setup_action ) ) { 
    33  
    34                 switch ( $itsec_setup_action ) { 
    35  
    36                     case 'activate': 
    37                         $this->execute_activate(); 
    38                         break; 
    39                     case 'upgrade': 
    40                         $this->execute_upgrade(); 
    41                         break; 
    42                     case 'deactivate': 
    43                         $this->execute_deactivate(); 
    44                         break; 
    45                     case 'uninstall': 
    46                         $this->execute_uninstall(); 
    47                         break; 
    48  
    49                 } 
    50  
    51             } else { 
    52                 wp_die( 'error' ); 
    53             } 
    5434 
    5535        } 
     
    11292         * @return void 
    11393         */ 
    114         public function execute_upgrade() { 
    115  
    116             global $itsec_old_version; 
     94        public function execute_upgrade( $itsec_old_version ) { 
    11795 
    11896            if ( $itsec_old_version < 4000 ) { 
  • better-wp-security/trunk/core/modules/four-oh-four/class-itsec-four-oh-four-admin.php

    r1283582 r1330783  
    2727        add_action( 'itsec_admin_init', array( $this, 'initialize_admin' ) ); //initialize admin area 
    2828        add_action( 'admin_enqueue_scripts', array( $this, 'admin_script' ) ); //enqueue scripts for admin page 
    29         add_filter( 'itsec_add_dashboard_status', array( 
    30             $this, 'dashboard_status' 
    31         ) ); //add information for plugin status 
    3229        add_filter( 'itsec_logger_displays', array( $this, 'register_logger_displays' ) ); //adds logs metaboxes 
    3330        add_filter( 'itsec_tracking_vars', array( $this, 'tracking_vars' ) ); 
     
    8784 
    8885        } 
    89  
    90     } 
    91  
    92     /** 
    93      * Sets the status in the plugin dashboard 
    94      * 
    95      * @since 4.0 
    96      * 
    97      * @return array statuses 
    98      */ 
    99     public function dashboard_status( $statuses ) { 
    100  
    101         if ( $this->settings['enabled'] === true ) { 
    102  
    103             $status_array = 'safe-medium'; 
    104             $status       = array( 
    105                 'text' => __( 'Your site is protecting against bots looking for known vulnerabilities.', 'better-wp-security' ), 
    106                 'link' => '#itsec_four_oh_four_enabled', 
    107             ); 
    108  
    109         } else { 
    110  
    111             $status_array = 'medium'; 
    112             $status       = array( 
    113                 'text' => __( 'Your website is not protected against bots looking for known vulnerabilities. Consider turning on 404 protection.', 
    114                               'better-wp-security' ), 'link' => '#itsec_four_oh_four_enabled', 
    115             ); 
    116  
    117         } 
    118  
    119         array_push( $statuses[$status_array], $status ); 
    120  
    121         return $statuses; 
    12286 
    12387    } 
     
    326290    public function metabox_advanced_four_oh_four_settings() { 
    327291 
    328         global $itsec_lockout; 
    329  
    330         echo '<p>' . __( '404 detection looks at a user who is hitting a large number of non-existent pages and getting a large number of 404 errors. 404 detection assumes that a user who hits a lot of 404 errors in a short period of time is scanning for something (presumably a vulnerability) and locks them out accordingly. This also gives the added benefit of helping you find hidden problems causing 404 errors on unseen parts of your site. All errors will be logged in the \"View Logs\" page. You can set thresholds for this feature below.', 'better-wp-security' ) . '</p>'; 
    331         echo $itsec_lockout->get_lockout_description(); 
    332  
    333         $this->core->do_settings_section( 'security_page_toplevel_page_itsec_settings', 'four_oh_four-enabled', false ); 
    334         $this->core->do_settings_section( 'security_page_toplevel_page_itsec_settings', 'four_oh_four-settings', 
    335                                           false ); 
    336  
    337         echo '<p>' . PHP_EOL; 
    338  
    339         settings_fields( 'security_page_toplevel_page_itsec_settings' ); 
    340  
    341         echo '<input class="button-primary" name="submit" type="submit" value="' . __( 'Save All Changes', 
    342                                                                                        'better-wp-security' ) . '" />' . PHP_EOL; 
    343  
    344         echo '</p>' . PHP_EOL; 
     292        if ( ( get_option( 'permalink_structure' ) == '' || get_option( 'permalink_structure' ) == false ) && ! is_multisite() ) { 
     293 
     294            $adminurl = is_multisite() ? admin_url() . 'network/' : admin_url(); 
     295 
     296            printf( '<p class="noPermalinks">%s <a href="%soptions-permalink.php">%s</a> %s</p>', 
     297                                __( 'You must turn on', 'better-wp-security' ), $adminurl, __( 'WordPress permalinks', 'better-wp-security' ), 
     298                                __( 'to use this feature.', 'better-wp-security' ) ); 
     299        } else { 
     300            global $itsec_lockout; 
     301 
     302            echo '<p>' . __( '404 detection looks at a user who is hitting a large number of non-existent pages and getting a large number of 404 errors. 404 detection assumes that a user who hits a lot of 404 errors in a short period of time is scanning for something (presumably a vulnerability) and locks them out accordingly. This also gives the added benefit of helping you find hidden problems causing 404 errors on unseen parts of your site. All errors will be logged in the "View Logs" page. You can set thresholds for this feature below.', 'better-wp-security' ) . '</p>'; 
     303            echo $itsec_lockout->get_lockout_description(); 
     304 
     305            $this->core->do_settings_section( 'security_page_toplevel_page_itsec_settings', 'four_oh_four-enabled', false ); 
     306            $this->core->do_settings_section( 'security_page_toplevel_page_itsec_settings', 'four_oh_four-settings', false ); 
     307 
     308            echo '<p>' . PHP_EOL; 
     309 
     310            settings_fields( 'security_page_toplevel_page_itsec_settings' ); 
     311 
     312            echo '<input class="button-primary" name="submit" type="submit" value="' . __( 'Save All Changes', 
     313                                                                                           'better-wp-security' ) . '" />' . PHP_EOL; 
     314 
     315            echo '</p>' . PHP_EOL; 
     316        } 
    345317 
    346318    } 
  • better-wp-security/trunk/core/modules/four-oh-four/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1316 
    1417            $this->defaults = array( 
     
    3538                ), 
    3639            ); 
    37  
    38             if ( isset( $itsec_setup_action ) ) { 
    39  
    40                 switch ( $itsec_setup_action ) { 
    41  
    42                     case 'activate': 
    43                         $this->execute_activate(); 
    44                         break; 
    45                     case 'upgrade': 
    46                         $this->execute_upgrade(); 
    47                         break; 
    48                     case 'deactivate': 
    49                         $this->execute_deactivate(); 
    50                         break; 
    51                     case 'uninstall': 
    52                         $this->execute_uninstall(); 
    53                         break; 
    54  
    55                 } 
    56  
    57             } else { 
    58                 wp_die( 'error' ); 
    59             } 
    6040 
    6141        } 
     
    10686         * @return void 
    10787         */ 
    108         public function execute_upgrade() { 
    109  
    110             global $itsec_old_version; 
     88        public function execute_upgrade( $itsec_old_version ) { 
    11189 
    11290            if ( $itsec_old_version < 4000 ) { 
  • better-wp-security/trunk/core/modules/hide-backend/class-itsec-hide-backend-admin.php

    r1283582 r1330783  
    1919        add_action( 'itsec_admin_init', array( $this, 'initialize_admin' ) ); //initialize admin area 
    2020        add_action( 'admin_enqueue_scripts', array( $this, 'admin_script' ) ); //enqueue scripts for admin page 
    21         add_filter( 'itsec_add_dashboard_status', array( $this, 'dashboard_status' ) ); //add information for plugin status 
    2221        add_filter( 'itsec_tracking_vars', array( $this, 'tracking_vars' ) ); 
    2322 
     
    116115    public function filter_apache_server_config_modification( $modification ) { 
    117116        $input = get_site_option( 'itsec_hide_backend' ); 
    118          
     117 
    119118        if ( true != $input['enabled'] ) { 
    120119            return $modification; 
    121120        } 
    122          
    123          
     121 
     122 
    124123        $home_root = ITSEC_Lib::get_home_root(); 
    125          
     124 
    126125        $modification .= "\n"; 
    127126        $modification .= "\t# " . __( 'Enable the hide backend feature - Security > Settings > Hide Login Area > Hide Backend', 'better-wp-security' ) . "\n"; 
    128127        $modification .= "\tRewriteRule ^($home_root)?{$input['slug']}/?$ {$home_root}wp-login.php [QSA,L]\n"; 
    129          
     128 
    130129        if ( 'wp-register.php' != $input['register'] ) { 
    131130            $modification .= "\tRewriteRule ^($home_root)?{$input['register']}/?$ /wplogin?action=register [QSA,L]\n"; 
    132131        } 
    133          
     132 
    134133        return $modification; 
    135134    } 
    136      
     135 
    137136    public function filter_nginx_server_config_modification( $modification ) { 
    138137        $input = get_site_option( 'itsec_hide_backend' ); 
    139          
     138 
    140139        if ( true != $input['enabled'] ) { 
    141140            return $modification; 
    142141        } 
    143          
    144          
     142 
     143 
    145144        $home_root = ITSEC_Lib::get_home_root(); 
    146          
     145 
    147146        $modification .= "\n"; 
    148147        $modification .= "\t# " . __( 'Enable the hide backend feature - Security > Settings > Hide Login Area > Hide Backend', 'better-wp-security' ) . "\n"; 
    149148        $modification .= "\trewrite ^($home_root)?{$input['slug']}/?$ {$home_root}wp-login.php?\$query_string break;\n"; 
    150          
     149 
    151150        if ( 'wp-register.php' != $input['register'] ) { 
    152151            $modification .= "\trewrite ^($home_root)?{$input['register']}/?$ {$home_root}{$input['slug']}?action=register break;\n"; 
    153152        } 
    154          
     153 
    155154        return $modification; 
    156     } 
    157  
    158     /** 
    159      * Sets the status in the plugin dashboard 
    160      * 
    161      * @since 4.0 
    162      * 
    163      * @return array array of statuses 
    164      */ 
    165     public function dashboard_status( $statuses ) { 
    166  
    167         if ( $this->settings['enabled'] === true ) { 
    168  
    169             $status_array = 'safe-medium'; 
    170             $status       = array( 
    171                 'text' => __( 'Your WordPress Dashboard is hidden.', 'better-wp-security' ), 'link' => '#itsec_hide_backend_enabled', 
    172             ); 
    173  
    174         } else { 
    175  
    176             $status_array = 'medium'; 
    177             $status       = array( 
    178                 'text' => __( 'Your WordPress Dashboard is using the default addresses. This can make a brute force attack much easier.', 'better-wp-security' ), 
    179                 'link' => '#itsec_hide_backend_enabled', 
    180             ); 
    181  
    182         } 
    183  
    184         array_push( $statuses[$status_array], $status ); 
    185  
    186         return $statuses; 
    187  
    188155    } 
    189156 
  • better-wp-security/trunk/core/modules/hide-backend/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1316 
    1417            $this->defaults = array( 
     
    2023                'post_logout_slug'  => '', 
    2124            ); 
    22  
    23             if ( isset( $itsec_setup_action ) ) { 
    24  
    25                 switch ( $itsec_setup_action ) { 
    26  
    27                     case 'activate': 
    28                         $this->execute_activate(); 
    29                         break; 
    30                     case 'upgrade': 
    31                         $this->execute_upgrade(); 
    32                         break; 
    33                     case 'deactivate': 
    34                         $this->execute_deactivate(); 
    35                         break; 
    36                     case 'uninstall': 
    37                         $this->execute_uninstall(); 
    38                         break; 
    39  
    40                 } 
    41  
    42             } else { 
    43                 wp_die( 'error' ); 
    44             } 
    4525 
    4626        } 
     
    122102         * @return void 
    123103         */ 
    124         public function execute_upgrade() { 
    125  
    126             global $itsec_old_version; 
     104        public function execute_upgrade( $itsec_old_version ) { 
    127105 
    128106            if ( $itsec_old_version < 4000 ) { 
  • better-wp-security/trunk/core/modules/ipcheck/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1316 
    1417            $this->defaults = array( 
    1518                'api_ban' => true, 
    1619            ); 
    17  
    18             if ( isset( $itsec_setup_action ) ) { 
    19  
    20                 switch ( $itsec_setup_action ) { 
    21  
    22                     case 'activate': 
    23                         $this->execute_activate(); 
    24                         break; 
    25                     case 'upgrade': 
    26                         $this->execute_upgrade(); 
    27                         break; 
    28                     case 'deactivate': 
    29                         $this->execute_deactivate(); 
    30                         break; 
    31                     case 'uninstall': 
    32                         $this->execute_uninstall(); 
    33                         break; 
    34  
    35                 } 
    36  
    37             } else { 
    38                 wp_die( 'error' ); 
    39             } 
    4020 
    4121        } 
  • better-wp-security/trunk/core/modules/malware/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1316 
    1417            $this->defaults = array( 
     
    1619                'api_key' => '', 
    1720            ); 
    18  
    19             if ( isset( $itsec_setup_action ) ) { 
    20  
    21                 switch ( $itsec_setup_action ) { 
    22  
    23                     case 'activate': 
    24                         $this->execute_activate(); 
    25                         break; 
    26                     case 'upgrade': 
    27                         $this->execute_upgrade(); 
    28                         break; 
    29                     case 'deactivate': 
    30                         $this->execute_deactivate(); 
    31                         break; 
    32                     case 'uninstall': 
    33                         $this->execute_uninstall(); 
    34                         break; 
    35  
    36                 } 
    37  
    38             } else { 
    39                 wp_die( 'error' ); 
    40             } 
    4121 
    4222        } 
  • better-wp-security/trunk/core/modules/salts/class-itsec-salts-admin.php

    r1283582 r1330783  
    5959 
    6060        add_action( 'itsec_add_admin_meta_boxes', array( $this, 'itsec_add_admin_meta_boxes' ) ); //add meta boxes to admin page 
    61         add_filter( 'itsec_add_dashboard_status', array( $this, 'itsec_add_dashboard_status' ) ); //add information for plugin status 
    6261        add_filter( 'itsec_tracking_vars', array( $this, 'itsec_tracking_vars' ) ); //Usage information tracked via Google Analytics (opt-in) 
    6362 
     
    8786            'core' 
    8887        ); 
    89  
    90     } 
    91  
    92     /** 
    93      * Sets the status in the plugin dashboard 
    94      * 
    95      * Sets a low priority item for the module's functionality in the plugin 
    96      * dashboard. 
    97      * 
    98      * @since 4.6.0 
    99      * 
    100      * @param array $statuses array of existing plugin dashboard statuses 
    101      * 
    102      * @return array statuses 
    103      */ 
    104     public function itsec_add_dashboard_status( $statuses ) { 
    105  
    106         global $itsec_globals; 
    107  
    108         $last_update = get_site_option( 'itsec_salts' ); 
    109  
    110         if ( false === $last_update ) { 
    111  
    112             $status_array = 'low'; 
    113             $status       = array( 
    114                 'text' => __( 'Your WordPress Salts have not been changed. You should change them now.', 'better-wp-security' ), 
    115                 'link' => '#itsec_enable_salts', 'advanced' => true, 
    116             ); 
    117  
    118         } elseif ( absint( $last_update ) < ( $itsec_globals['current_time_gmt'] - ( 30 * 24 * 60 * 60 ) ) ) { 
    119  
    120             $status_array = 'low'; 
    121             $status       = array( 
    122                 'text' => __( 'Your WordPress Salts have not been changed 30 days. You should change them now.', 'better-wp-security' ), 
    123                 'link' => '#itsec_enable_salts', 'advanced' => true, 
    124             ); 
    125  
    126         } else { 
    127  
    128             $status_array = 'safe-low'; 
    129             $status       = array( 
    130                 'text' => __( 'You have recently changed your WordPress Salts.', 'better-wp-security' ), 
    131                 'link' => '#itsec_enable_salts', 'advanced' => true, 
    132             ); 
    133  
    134         } 
    135  
    136         array_push( $statuses[$status_array], $status ); 
    137  
    138         return $statuses; 
    13988 
    14089    } 
     
    261210        $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()-_=+[]{}|;:<>,./? '; 
    262211        $salt = ''; 
    263          
     212 
    264213        for ( $count = 0; $count < 64; $count++ ) { 
    265214            $character_index = rand( 0, strlen( $characters ) - 1 ); 
    266215            $salt .= $characters[$character_index]; 
    267216        } 
    268          
     217 
    269218        return $salt; 
    270219    } 
     
    277226    public function process_salts() { 
    278227        global $itsec_globals; 
    279          
    280          
     228 
     229 
    281230        require_once( trailingslashit( $GLOBALS['itsec_globals']['plugin_dir'] ) . 'core/lib/class-itsec-lib-config-file.php' ); 
    282231        require_once( trailingslashit( $GLOBALS['itsec_globals']['plugin_dir'] ) . 'core/lib/class-itsec-lib-file.php' ); 
    283          
     232 
    284233        $config_file_path = ITSEC_Lib_Config_File::get_wp_config_file_path(); 
    285234        $config = ITSEC_Lib_File::read( $config_file_path ); 
    286235        $error = ''; 
    287          
     236 
    288237        if ( is_wp_error( $config ) ) { 
    289238            $error = sprintf( __( 'Unable to read the <code>wp-config.php</code> file in order to update the salts. Error details as follows: %1$s (%2$s)', 'better-wp-security' ), $config->get_error_message(), $config->get_error_code() ); 
     
    299248                'NONCE_SALT', 
    300249            ); 
    301              
     250 
    302251            foreach ( $defines as $define ) { 
    303252                $new_salt = $this->get_salt(); 
    304253                $new_salt = str_replace( '$', '\\$', $new_salt ); 
    305                  
     254 
    306255                $regex = "/(define\s*\(\s*(['\"])$define\\2\s*,\s*)(['\"]).+?\\3(\s*\)\s*;)/"; 
    307256                $config = preg_replace( $regex, "\${1}'$new_salt'\${4}", $config ); 
    308257            } 
    309              
     258 
    310259            $write_result = ITSEC_Lib_File::write( $config_file_path, $config ); 
    311              
     260 
    312261            if ( is_wp_error( $write_result ) ) { 
    313262                $error = sprintf( __( 'Unable to update the <code>wp-config.php</code> file in order to update the salts. Error details as follows: %1$s (%2$s)', 'better-wp-security' ), $config->get_error_message(), $config->get_error_code() ); 
    314263            } 
    315264        } 
    316          
     265 
    317266        if ( ! empty( $error ) ) { 
    318267            add_settings_error( 'itsec', esc_attr( 'settings_updated' ), $error, 'error' ); 
     
    356305 
    357306} 
    358  
  • better-wp-security/trunk/core/modules/salts/setup.php

    r1283582 r1330783  
    77        public function __construct() { 
    88 
    9             global $itsec_setup_action; 
    10  
    11             if ( isset( $itsec_setup_action ) ) { 
    12  
    13                 switch ( $itsec_setup_action ) { 
    14  
    15                     case 'activate': 
    16                         $this->execute_activate(); 
    17                         break; 
    18                     case 'upgrade': 
    19                         $this->execute_upgrade(); 
    20                         break; 
    21                     case 'deactivate': 
    22                         $this->execute_deactivate(); 
    23                         break; 
    24                     case 'uninstall': 
    25                         $this->execute_uninstall(); 
    26                         break; 
    27  
    28                 } 
    29  
    30             } else { 
    31                 wp_die( 'error' ); 
    32             } 
     9            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     10            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     11            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     12            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    3313 
    3414        } 
  • better-wp-security/trunk/core/modules/ssl/class-itsec-ssl-admin.php

    r1283582 r1330783  
    1919        add_action( 'itsec_add_admin_meta_boxes', array( $this, 'add_admin_meta_boxes' ) ); //add meta boxes to admin page 
    2020        add_action( 'itsec_admin_init', array( $this, 'initialize_admin' ) ); //initialize admin area 
    21         add_filter( 'itsec_add_dashboard_status', array( $this, 'dashboard_status' ) ); //add information for plugin status 
    2221        add_action( 'admin_enqueue_scripts', array( $this, 'admin_script' ) ); //enqueue scripts for admin page 
    2322        add_filter( 'itsec_tracking_vars', array( $this, 'tracking_vars' ) ); 
     
    3736 
    3837        add_filter( 'itsec_filter_wp_config_modification', array( $this, 'filter_wp_config_modification' ) ); 
     38    } 
     39 
     40    public function enabled() { 
     41        return ( isset( $this->settings['frontend'] ) && in_array( $this->settings['frontend'], array( 1, 2 ) ) ); 
    3942    } 
    4043 
     
    145148 
    146149    /** 
    147      * Sets the status in the plugin dashboard 
    148      * 
    149      * @since 4.0 
    150      * 
    151      * @return array statuses 
    152      */ 
    153     public function dashboard_status( $statuses ) { 
    154         if ( ( defined( 'FORCE_SSL_ADMIN' ) && FORCE_SSL_ADMIN ) || ( defined( 'FORCE_SSL_LOGIN' ) && FORCE_SSL_LOGIN ) ) { 
    155             $status_array = 'safe-low'; 
    156             $status       = array( 
    157                 'text' => __( 'You are requiring a secure connection for accessing the dashboard.', 'better-wp-security' ), 
    158                 'link' => '#itsec_ssl_admin', 
    159             ); 
    160         } else { 
    161             $status_array = 'low'; 
    162             $status       = array( 
    163                 'text' => __( 'You are not requiring a secure connection for accessing the dashboard.', 'better-wp-security' ), 
    164                 'link' => '#itsec_ssl_admin', 
    165             ); 
    166         } 
    167          
    168         array_push( $statuses[$status_array], $status ); 
    169          
    170         return $statuses; 
    171     } 
    172  
    173     /** 
    174150     * Execute admin initializations. 
    175151     * 
     
    230206            $frontend = 0; 
    231207        } 
    232          
     208 
    233209        echo '<select id="itsec_ssl_frontend" name="itsec_ssl[frontend]">'; 
    234          
     210 
    235211        echo '<option value="0" ' . selected( $frontend, '0', false ) . '>' . __( 'Off', 'better-wp-security' ) . '</option>'; 
    236212        echo '<option value="1" ' . selected( $frontend, '1', false ) . '>' . __( 'Per Content', 'better-wp-security' ) . '</option>'; 
     
    303279    public function filter_wp_config_modification( $modification ) { 
    304280        $input = get_site_option( 'itsec_ssl', false ); 
    305          
     281 
    306282        if ( ! is_array( $input ) ) { 
    307283            return $modification; 
    308284        } 
    309          
    310          
     285 
     286 
    311287        if ( ( isset( $input['login'] ) && ( true == $input['login'] ) ) || ( isset( $input['admin'] ) && ( true == $input['admin'] ) ) ) { 
    312288            $modification .= "define( 'FORCE_SSL_LOGIN', true ); // " . __( 'Force SSL for Dashboard - Security > Settings > Secure Socket Layers (SSL) > SSL for Dashboard', 'better-wp-security' ) . "\n"; 
    313289            $modification .= "define( 'FORCE_SSL_ADMIN', true ); // " . __( 'Force SSL for Dashboard - Security > Settings > Secure Socket Layers (SSL) > SSL for Dashboard', 'better-wp-security' ) . "\n"; 
    314290        } 
    315          
     291 
    316292        return $modification; 
    317293    } 
  • better-wp-security/trunk/core/modules/ssl/class-itsec-ssl.php

    r1283582 r1330783  
    7878         
    7979        if ( isset( $redirect ) ) { 
    80             wp_redirect( $redirect, 302 ); 
     80            wp_redirect( $redirect, 301 ); 
    8181            exit(); 
    8282        } 
  • better-wp-security/trunk/core/modules/ssl/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1316 
    1417            $this->defaults = array( 
     
    1720                'login'    => false, 
    1821            ); 
    19  
    20             if ( isset( $itsec_setup_action ) ) { 
    21  
    22                 switch ( $itsec_setup_action ) { 
    23  
    24                     case 'activate': 
    25                         $this->execute_activate(); 
    26                         break; 
    27                     case 'upgrade': 
    28                         $this->execute_upgrade(); 
    29                         break; 
    30 //                  case 'deactivate': 
    31 //                      $this->execute_deactivate(); 
    32 //                      break; 
    33                     case 'uninstall': 
    34                         $this->execute_uninstall(); 
    35                         break; 
    36  
    37                 } 
    38  
    39             } else { 
    40                 wp_die( 'error' ); 
    41             } 
    4222 
    4323        } 
     
    10585         * @return void 
    10686         */ 
    107         public function execute_upgrade() { 
    108  
    109             global $itsec_old_version; 
     87        public function execute_upgrade( $itsec_old_version ) { 
    11088 
    11189            if ( $itsec_old_version < 4000 ) { 
  • better-wp-security/trunk/core/modules/strong-passwords/class-itsec-strong-passwords-admin.php

    r1283582 r1330783  
    1717        add_action( 'itsec_admin_init', array( $this, 'initialize_admin' ) ); //initialize admin area 
    1818        add_action( 'admin_enqueue_scripts', array( $this, 'admin_script' ) ); //enqueue scripts for admin page 
    19         add_filter( 'itsec_add_dashboard_status', array( $this, 'dashboard_status' ) ); //add information for plugin status 
    2019        add_filter( 'itsec_tracking_vars', array( $this, 'tracking_vars' ) ); 
    21         add_filter( 'itsec_one_click_settings', array( $this, 'one_click_settings' ) ); 
    2220 
    2321        //manually save options on multisite 
     
    7068 
    7169        } 
    72  
    73     } 
    74  
    75     /** 
    76      * Sets the status in the plugin dashboard 
    77      * 
    78      * @since 4.0 
    79      * 
    80      * @return array array of statuses 
    81      */ 
    82     public function dashboard_status( $statuses ) { 
    83  
    84         if ( $this->settings['enabled'] === true && $this->settings['roll'] == 'subscriber' ) { 
    85  
    86             $status_array = 'safe-high'; 
    87             $status       = array( 
    88                 'text' => __( 'You are enforcing strong passwords for all users.', 'better-wp-security' ), 
    89                 'link' => '#itsec_strong_passwords_enabled', 
    90             ); 
    91  
    92         } elseif ( $this->settings['enabled'] === true ) { 
    93  
    94             $status_array = 'low'; 
    95             $status       = array( 
    96                 'text' => __( 'You are enforcing strong passwords, but not for all users.', 'better-wp-security' ), 
    97                 'link' => '#itsec_strong_passwords_enabled', 
    98             ); 
    99  
    100         } else { 
    101  
    102             $status_array = 'high'; 
    103             $status       = array( 
    104                 'text' => __( 'You are not enforcing strong passwords for any users.', 'better-wp-security' ), 
    105                 'link' => '#itsec_strong_passwords_enabled', 
    106             ); 
    107  
    108         } 
    109  
    110         array_push( $statuses[$status_array], $status ); 
    111  
    112         return $statuses; 
    11370 
    11471    } 
     
    183140 
    184141        echo '</p>' . PHP_EOL; 
    185  
    186     } 
    187  
    188     /** 
    189      * Register one-click settings 
    190      * 
    191      * @since 4.0 
    192      * 
    193      * @param array $one_click_settings array of one-click settings 
    194      * 
    195      * @return array array of one-click settings 
    196      */ 
    197     public function one_click_settings( $one_click_settings ) { 
    198  
    199         $one_click_settings['itsec_strong_passwords'][] = array( 
    200             'option' => 'enabled', 
    201             'value'  => 1, 
    202         ); 
    203  
    204         return $one_click_settings; 
    205142 
    206143    } 
  • better-wp-security/trunk/core/modules/strong-passwords/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1316 
    1417            $this->defaults = array( 
     
    1619                'roll'    => 'administrator', 
    1720            ); 
    18  
    19             if ( isset( $itsec_setup_action ) ) { 
    20  
    21                 switch ( $itsec_setup_action ) { 
    22  
    23                     case 'activate': 
    24                         $this->execute_activate(); 
    25                         break; 
    26                     case 'upgrade': 
    27                         $this->execute_upgrade(); 
    28                         break; 
    29                     case 'deactivate': 
    30                         $this->execute_deactivate(); 
    31                         break; 
    32                     case 'uninstall': 
    33                         $this->execute_uninstall(); 
    34                         break; 
    35  
    36                 } 
    37  
    38             } else { 
    39                 wp_die( 'error' ); 
    40             } 
    4121 
    4222        } 
     
    8767         * @return void 
    8868         */ 
    89         public function execute_upgrade() { 
    90  
    91             global $itsec_old_version; 
     69        public function execute_upgrade( $itsec_old_version ) { 
    9270 
    9371            if ( $itsec_old_version < 4000 ) { 
  • better-wp-security/trunk/core/modules/tweaks/class-itsec-tweaks-admin.php

    r1283582 r1330783  
    1818        add_action( 'itsec_add_admin_meta_boxes', array( $this, 'add_admin_meta_boxes' ) ); //add meta boxes to admin page 
    1919        add_action( 'itsec_admin_init', array( $this, 'initialize_admin' ) ); //initialize admin area 
    20         add_filter( 'itsec_add_dashboard_status', array( $this, 'dashboard_status' ) ); //add information for plugin status 
    21         add_filter( 'itsec_one_click_settings', array( $this, 'one_click_settings' ) ); 
    2220 
    2321        //manually save options on multisite 
     
    411409        echo '<option value="0" ' . selected( $setting, '0' ) . '>' . __( 'Enable XML-RPC', 'better-wp-security' ) . '</option>'; 
    412410        echo '</select></p>'; 
    413          
     411 
    414412        printf( 
    415413            '<ul><li>%s</li><li>%s</li><li>%s</li></ul>', 
     
    640638        return $this->filter_apache_server_config_modification( $modification, 'litespeed' ); 
    641639    } 
    642      
     640 
    643641    public function filter_apache_server_config_modification( $modification, $server = 'apache' ) { 
    644642        $input = get_site_option( 'itsec_tweaks' ); 
    645          
     643 
    646644        if ( true === $input['protect_files'] ) { 
    647645            $files = array( 
     
    652650                'wp-config.php', 
    653651            ); 
    654              
     652 
    655653            $modification .= "\n"; 
    656654            $modification .= "\t# " . __( 'Protect System Files - Security > Settings > System Tweaks > System Files', 'better-wp-security' ) . "\n"; 
    657              
     655 
    658656            foreach ( $files as $file ) { 
    659657                $modification .= "\t<files $file>\n"; 
    660                  
     658 
    661659                if ( 'apache' === $server ) { 
    662660                    $modification .= "\t\t<IfModule mod_authz_core.c>\n"; 
     
    673671                    $modification .= "\t\t</IfModule>\n"; 
    674672                } 
    675                  
     673 
    676674                $modification .= "\t</files>\n"; 
    677675            } 
    678676        } 
    679          
     677 
    680678        if ( 2 == $input['disable_xmlrpc'] ) { 
    681679            $modification .= "\n"; 
    682680            $modification .= "\t# " . __( 'Disable XML-RPC - Security > Settings > WordPress Tweaks > XML-RPC', 'better-wp-security' ) . "\n"; 
    683681            $modification .= "\t<files xmlrpc.php>\n"; 
    684              
     682 
    685683            if ( 'apache' === $server ) { 
    686684                $modification .= "\t\t<IfModule mod_authz_core.c>\n"; 
     
    697695                $modification .= "\t\t</IfModule>\n"; 
    698696            } 
    699              
     697 
    700698            $modification .= "\t</files>\n"; 
    701699        } 
    702          
     700 
    703701        if ( true == $input['directory_browsing'] ) { 
    704702            $modification .= "\n"; 
     
    706704            $modification .= "\tOptions -Indexes\n"; 
    707705        } 
    708          
    709          
     706 
     707 
    710708        $rewrites = ''; 
    711          
     709 
    712710        if ( true == $input['protect_files'] ) { 
    713711            $rewrites .= "\n"; 
     
    720718            $rewrites .= "\t\tRewriteRule ^wp-includes/theme-compat/ - [F]\n"; 
    721719        } 
    722          
     720 
    723721        if ( true === $input['uploads_php'] ) { 
    724722            require_once( trailingslashit( $GLOBALS['itsec_globals']['plugin_dir'] ) . 'core/lib/class-itsec-lib-utility.php' ); 
    725              
     723 
    726724            $dir = ITSEC_Lib_Utility::get_relative_upload_url_path(); 
    727              
     725 
    728726            if ( ! empty( $dir ) ) { 
    729727                $dir = preg_quote( $dir ); 
    730                  
     728 
    731729                $rewrites .= "\n"; 
    732730                $rewrites .= "\t\t# " . __( 'Disable PHP in Uploads - Security > Settings > System Tweaks > Uploads', 'better-wp-security' ) . "\n"; 
     
    734732            } 
    735733        } 
    736          
     734 
    737735        if ( true == $input['request_methods'] ) { 
    738736            $rewrites .= "\n"; 
     
    741739            $rewrites .= "\t\tRewriteRule ^.* - [F]\n"; 
    742740        } 
    743          
     741 
    744742        if ( true == $input['suspicious_query_strings'] ) { 
    745743            $rewrites .= "\n"; 
     
    766764            $rewrites .= "\t\tRewriteRule ^.* - [F]\n"; 
    767765        } 
    768          
     766 
    769767        if ( true == $input['non_english_characters'] ) { 
    770768            $rewrites .= "\n"; 
     
    773771            $rewrites .= "\t\tRewriteRule ^.* - [F]\n"; 
    774772        } 
    775          
     773 
    776774        if ( true == $input['comment_spam'] ) { 
    777775            $valid_referers = $this->get_valid_referers( 'apache' ); 
    778              
     776 
    779777            $rewrites .= "\n"; 
    780778            $rewrites .= "\t\t# " . __( 'Reduce Comment Spam - Security > Settings > System Tweaks > Comment Spam', 'better-wp-security' ) . "\n"; 
    781779            $rewrites .= "\t\tRewriteCond %{REQUEST_METHOD} POST\n"; 
    782780            $rewrites .= "\t\tRewriteCond %{REQUEST_URI} /wp-comments-post\.php\$\n"; 
    783              
     781 
    784782            if ( empty( $valid_referers ) || in_array( '*', $valid_referers ) ) { 
    785783                $rewrites .= "\t\tRewriteCond %{HTTP_USER_AGENT} ^$\n"; 
     
    789787                        $referer = '([^/]+.)?' . substr( $referer, 2 ); 
    790788                    } 
    791                      
     789 
    792790                    $referer = str_replace( '.', '\.', $referer ); 
    793791                    $referer = rtrim( $referer, '/' ); 
    794                      
     792 
    795793                    $valid_referers[$index] = $referer; 
    796794                } 
    797795                $valid_referers = implode( '|', $valid_referers ); 
    798                  
     796 
    799797                $rewrites .= "\t\tRewriteCond %{HTTP_USER_AGENT} ^$ [OR]\n"; 
    800798                $rewrites .= "\t\tRewriteCond %{HTTP_REFERER} !^https?://($valid_referers)(/|$) [NC]\n"; 
    801799            } 
    802              
     800 
    803801            $rewrites .= "\t\tRewriteRule ^.* - [F]\n"; 
    804802        } 
    805          
     803 
    806804        if ( ! empty( $rewrites ) ) { 
    807805            $modification .= "\n"; 
     
    811809            $modification .= "\t</IfModule>\n"; 
    812810        } 
    813          
    814          
     811 
     812 
    815813        return $modification; 
    816814    } 
    817      
     815 
    818816    public function filter_nginx_server_config_modification( $modification ) { 
    819817        $input = get_site_option( 'itsec_tweaks' ); 
    820          
     818 
    821819        if ( true === $input['protect_files'] ) { 
    822820            $modification .= "\n"; 
     
    830828            $modification .= "\tlocation ^/wp-admin/includes(.*)$ { deny all; }\n"; 
    831829        } 
    832          
     830 
    833831        if ( 2 == $input['disable_xmlrpc'] ) { 
    834832            $modification .= "\n"; 
     
    836834            $modification .= "\tlocation ~ xmlrpc.php { deny all; }\n"; 
    837835        } 
    838          
     836 
    839837        // Rewrite Rules for Disable PHP in Uploads 
    840838        if ( true === $input['uploads_php'] ) { 
    841839            require_once( trailingslashit( $GLOBALS['itsec_globals']['plugin_dir'] ) . 'core/lib/class-itsec-lib-utility.php' ); 
    842              
     840 
    843841            $dir = ITSEC_Lib_Utility::get_relative_upload_url_path(); 
    844              
     842 
    845843            if ( ! empty( $dir ) ) { 
    846844                $dir = preg_quote( $dir ); 
    847                  
     845 
    848846                $modification .= "\n"; 
    849847                $modification .= "\t# " . __( 'Disable PHP in Uploads - Security > Settings > System Tweaks > Uploads', 'better-wp-security' ) . "\n"; 
     
    851849            } 
    852850        } 
    853          
     851 
    854852        // Apache rewrite rules for disable http methods 
    855853        if ( true == $input['request_methods'] ) { 
     
    858856            $modification .= "\tif (\$request_method ~* \"^(TRACE|DELETE|TRACK)\") { return 403; }\n"; 
    859857        } 
    860          
     858 
    861859        // Process suspicious query rules 
    862860        if ( true == $input['suspicious_query_strings'] ) { 
     
    885883            $modification .= "\tif (\$susquery = 1) { return 403; } \n"; 
    886884        } 
    887          
     885 
    888886        // Process filtering of foreign characters 
    889887        if ( true == $input['non_english_characters'] ) { 
     
    892890            $modification .= "\tif (\$args ~* \"(%0|%A|%B|%C|%D|%E|%F)\") { return 403; }\n"; 
    893891        } 
    894          
     892 
    895893        // Process Comment spam rules 
    896894        if ( true == $input['comment_spam'] ) { 
    897895            $valid_referers = $this->get_valid_referers( 'nginx' ); 
    898              
     896 
    899897            $modification .= "\n"; 
    900898            $modification .= "\t# " . __( 'Reduce Comment Spam - Security > Settings > System Tweaks > Comment Spam', 'better-wp-security' ) . "\n"; 
     
    903901            $modification .= "\t\tlimit_except POST { deny all; }\n"; 
    904902            $modification .= "\t\tif (\$http_user_agent ~ \"^$\") { return 403; }\n"; 
    905              
     903 
    906904            if ( ! empty( $valid_referers ) && ! in_array( '*', $valid_referers ) ) { 
    907905                $modification .= "\t\tvalid_referers " . implode( ' ', $valid_referers ) . ";\n"; 
    908906                $modification .= "\t\tif (\$invalid_referer) { return 403; }\n"; 
    909907            } 
    910              
     908 
    911909            $modification .= "\t}\n"; 
    912910        } 
    913          
     911 
    914912        return $modification; 
    915913    } 
    916      
     914 
    917915    protected function get_valid_referers( $server_type ) { 
    918916        $valid_referers = array(); 
    919          
     917 
    920918        if ( 'apache' === $server_type ) { 
    921919            $domain = ITSEC_Lib::get_domain( get_site_url() ); 
    922              
     920 
    923921            if ( '*' == $domain ) { 
    924922                $valid_referers[] = $domain; 
     
    931929            return array(); 
    932930        } 
    933          
     931 
    934932        $valid_referers[] = 'jetpack.wordpress.com/jetpack-comment/'; 
    935933        $valid_referers = apply_filters( 'itsec_filter_valid_comment_referers', $valid_referers, $server_type ); 
    936          
     934 
    937935        if ( is_string( $valid_referers ) ) { 
    938936            $valid_referers = array( $valid_referers ); 
     
    940938            $valid_referers = array(); 
    941939        } 
    942          
     940 
    943941        foreach ( $valid_referers as $index => $referer ) { 
    944942            $valid_referers[$index] = preg_replace( '|^https?://|', '', $referer ); 
    945943        } 
    946          
     944 
    947945        return $valid_referers; 
    948946    } 
    949      
     947 
    950948    public function filter_wp_config_modification( $modification ) { 
    951949        $input = get_site_option( 'itsec_tweaks', false ); 
    952          
     950 
    953951        if ( ! is_array( $input ) ) { 
    954952            return $modification; 
    955953        } 
    956          
    957          
     954 
     955 
    958956        if ( isset( $input['file_editor'] ) && $input['file_editor'] ) { 
    959957            $modification .= "define( 'DISALLOW_FILE_EDIT', true ); // " . __( 'Disable File Editor - Security > Settings > WordPress Tweaks > File Editor', 'better-wp-security' ) . "\n"; 
    960958        } 
    961          
     959 
    962960        return $modification; 
    963     } 
    964  
    965     /** 
    966      * Sets the status in the plugin dashboard 
    967      * 
    968      * @since 4.0 
    969      * 
    970      * @return array array of statuses 
    971      */ 
    972     public function dashboard_status( $statuses ) { 
    973  
    974         if ( isset( $this->settings['protect_files'] ) && $this->settings['protect_files'] === true ) { 
    975  
    976             $status_array = 'safe-medium'; 
    977             $status       = array( 
    978                 'text' => __( 'You are protecting common WordPress files from access.', 'better-wp-security' ), 
    979                 'link' => '#itsec_tweaks_server_protect_files', 
    980             ); 
    981  
    982         } else { 
    983  
    984             $status_array = 'medium'; 
    985             $status       = array( 
    986                 'text' => __( 'You are not protecting common WordPress files from access. Click here to protect WordPress files.', 'better-wp-security' ), 
    987                 'link' => '#itsec_tweaks_server_protect_files', 
    988             ); 
    989  
    990         } 
    991  
    992         array_push( $statuses[ $status_array ], $status ); 
    993  
    994         if ( ITSEC_Lib::get_server() != 'nginx' ) { 
    995  
    996             if ( isset( $this->settings['directory_browsing'] ) && $this->settings['directory_browsing'] === true && ITSEC_Lib::get_server() != 'nginx' ) { 
    997  
    998                 $status_array = 'safe-low'; 
    999                 $status       = array( 
    1000                     'text' => __( 'You have successfully disabled directory browsing on your site.', 'better-wp-security' ), 
    1001                     'link' => '#itsec_tweaks_server_directory_browsing', 
    1002                 ); 
    1003  
    1004             } else { 
    1005  
    1006                 $status_array = 'low'; 
    1007                 $status       = array( 
    1008                     'text' => __( 'You have not disabled directory browsing on your site. Click here to prevent a user from seeing every file present in your WordPress site.', 'better-wp-security' ), 
    1009                     'link' => '#itsec_tweaks_server_directory_browsing', 
    1010                 ); 
    1011  
    1012             } 
    1013  
    1014         } 
    1015  
    1016         array_push( $statuses[ $status_array ], $status ); 
    1017  
    1018         if ( isset( $this->settings['request_methods'] ) && $this->settings['request_methods'] === true ) { 
    1019  
    1020             $status_array = 'safe-low'; 
    1021             $status       = array( 
    1022                 'text' => __( 'You are blocking HTTP request methods you do not need.', 'better-wp-security' ), 
    1023                 'link' => '#itsec_tweaks_server_request_methods', 
    1024             ); 
    1025  
    1026         } else { 
    1027  
    1028             $status_array = 'low'; 
    1029             $status       = array( 
    1030                 'text' => __( 'You are not blocking HTTP request methods you do not need. Click here to block extra HTTP request methods that WordPress should not normally need.', 'better-wp-security' ), 
    1031                 'link' => '#itsec_tweaks_server_request_methods', 
    1032             ); 
    1033  
    1034         } 
    1035  
    1036         array_push( $statuses[ $status_array ], $status ); 
    1037  
    1038         if ( isset( $this->settings['suspicious_query_strings'] ) && $this->settings['suspicious_query_strings'] === true ) { 
    1039  
    1040             $status_array = 'safe-medium'; 
    1041             $status       = array( 
    1042                 'text' => __( 'Your WordPress site is blocking suspicious looking information in the URL.', 'better-wp-security' ), 
    1043                 'link' => '#itsec_tweaks_server_suspicious_query_strings', 
    1044             ); 
    1045  
    1046         } else { 
    1047  
    1048             $status_array = 'medium'; 
    1049             $status       = array( 
    1050                 'text' => __( 'Your WordPress site is not blocking suspicious looking information in the URL. Click here to block users from trying to execute code that they should not be able to execute.', 'better-wp-security' ), 
    1051                 'link' => '#itsec_tweaks_server_suspicious_query_strings', 
    1052             ); 
    1053  
    1054         } 
    1055  
    1056         array_push( $statuses[ $status_array ], $status ); 
    1057  
    1058         if ( isset( $this->settings['non_english_characters'] ) && $this->settings['non_english_characters'] === true ) { 
    1059  
    1060             $status_array = 'safe-low'; 
    1061             $status       = array( 
    1062                 'text' => __( 'Your WordPress site is blocking non-english characters in the URL.', 'better-wp-security' ), 
    1063                 'link' => '#itsec_tweaks_server_non_english_characters', 
    1064             ); 
    1065  
    1066         } else { 
    1067  
    1068             $status_array = 'low'; 
    1069             $status       = array( 
    1070                 'text' => __( 'Your WordPress site is not blocking non-english characters in the URL. Click here to fix this.', 'better-wp-security' ), 
    1071                 'link' => '#itsec_tweaks_server_non_english_characters', 
    1072             ); 
    1073  
    1074         } 
    1075  
    1076         array_push( $statuses[ $status_array ], $status ); 
    1077  
    1078         if ( isset( $this->settings['long_url_strings'] ) && $this->settings['long_url_strings'] === true ) { 
    1079  
    1080             $status_array = 'safe-low'; 
    1081             $status       = array( 
    1082                 'text' => __( 'Your installation does not accept long URLs.', 'better-wp-security' ), 
    1083                 'link' => '#itsec_tweaks_server_long_url_strings', 
    1084             ); 
    1085  
    1086         } else { 
    1087  
    1088             $status_array = 'low'; 
    1089             $status       = array( 
    1090                 'text' => __( 'Your installation accepts long (over 255 character) URLS. This can lead to vulnerabilities. Click here to fix this.', 'better-wp-security' ), 
    1091                 'link' => '#itsec_tweaks_server_long_url_strings', 
    1092             ); 
    1093  
    1094         } 
    1095  
    1096         array_push( $statuses[ $status_array ], $status ); 
    1097  
    1098         if ( isset( $this->settings['write_permissions'] ) && $this->settings['write_permissions'] === true ) { 
    1099  
    1100             $status_array = 'safe-low'; 
    1101             $status       = array( 
    1102                 'text' => __( 'Your wp-config.php and .htaccess files are not writeable.', 'better-wp-security' ), 
    1103                 'link' => '#itsec_tweaks_server_write_permissions', 
    1104             ); 
    1105  
    1106         } else { 
    1107  
    1108             $status_array = 'low'; 
    1109             $status       = array( 
    1110                 'text' => __( 'Your wp-config.php and .htaccess files are writeable. This can lead to vulnerabilities. Click here to fix this.', 'better-wp-security' ), 
    1111                 'link' => '#itsec_tweaks_server_write_permissions', 
    1112             ); 
    1113  
    1114         } 
    1115  
    1116         array_push( $statuses[ $status_array ], $status ); 
    1117  
    1118         if ( isset( $this->settings['wlwmanifest_header'] ) && $this->settings['wlwmanifest_header'] === true ) { 
    1119  
    1120             $status_array = 'safe-low'; 
    1121             $status       = array( 
    1122                 'text' => __( 'Your WordPress installation is not publishing the Windows Live Writer header.', 'better-wp-security' ), 
    1123                 'link' => '#itsec_tweaks_server_wlwmanifest_header', 
    1124             ); 
    1125  
    1126         } else { 
    1127  
    1128             $status_array = 'low'; 
    1129             $status       = array( 
    1130                 'text' => __( 'Your WordPress installation is publishing the Windows Live Writer header. Click here to fix this.', 'better-wp-security' ), 
    1131                 'link' => '#itsec_tweaks_server_wlwmanifest_header', 
    1132             ); 
    1133  
    1134         } 
    1135  
    1136         array_push( $statuses[ $status_array ], $status ); 
    1137  
    1138         if ( isset( $this->settings['edituri_header'] ) && $this->settings['edituri_header'] === true ) { 
    1139  
    1140             $status_array = 'safe-low'; 
    1141             $status       = array( 
    1142                 'text' => __( 'Your WordPress installation is not publishing the Really Simple Discovery (RSD) header.', 'better-wp-security' ), 
    1143                 'link' => '#itsec_tweaks_server_edituri_header', 
    1144             ); 
    1145  
    1146         } else { 
    1147  
    1148             $status_array = 'low'; 
    1149             $status       = array( 
    1150                 'text' => __( 'Your WordPress installation is publishing the Really Simple Discovery (RSD) header. Click here to fix this.', 'better-wp-security' ), 
    1151                 'link' => '#itsec_tweaks_server_edituri_header', 
    1152             ); 
    1153  
    1154         } 
    1155  
    1156         array_push( $statuses[ $status_array ], $status ); 
    1157  
    1158         if ( is_multisite() ) { 
    1159  
    1160             if ( isset( $this->settings['theme_updates'] ) && $this->settings['theme_updates'] === true ) { 
    1161  
    1162                 $status_array = 'safe-medium'; 
    1163                 $status       = array( 
    1164                     'text' => __( 'Your WordPress installation is not telling users who cannot update themes about theme updates.', 'better-wp-security' ), 
    1165                     'link' => '#itsec_tweaks_server_theme_updates', 
    1166                 ); 
    1167  
    1168             } else { 
    1169  
    1170                 $status_array = 'medium'; 
    1171                 $status       = array( 
    1172                     'text' => __( 'Your WordPress installation is telling users who cannot update themes about theme updates. Click here to fix this.', 'better-wp-security' ), 
    1173                     'link' => '#itsec_tweaks_server_theme_updates', 
    1174                 ); 
    1175  
    1176             } 
    1177  
    1178             array_push( $statuses[ $status_array ], $status ); 
    1179  
    1180             if ( isset( $this->settings['plugin_updates'] ) && $this->settings['plugin_updates'] === true ) { 
    1181  
    1182                 $status_array = 'safe-medium'; 
    1183                 $status       = array( 
    1184                     'text' => __( 'Your WordPress installation is not telling users who cannot update plugins about plugin updates.', 'better-wp-security' ), 
    1185                     'link' => '#itsec_tweaks_server_plugin_updates', 
    1186                 ); 
    1187  
    1188             } else { 
    1189  
    1190                 $status_array = 'medium'; 
    1191                 $status       = array( 
    1192                     'text' => __( 'Your WordPress installation is telling users who cannot update plugins about plugin updates. Click here to fix this.', 'better-wp-security' ), 
    1193                     'link' => '#itsec_tweaks_server_plugin_updates', 
    1194                 ); 
    1195  
    1196             } 
    1197  
    1198             array_push( $statuses[ $status_array ], $status ); 
    1199  
    1200             if ( isset( $this->settings['core_updates'] ) && $this->settings['core_updates'] === true ) { 
    1201  
    1202                 $status_array = 'safe-medium'; 
    1203                 $status       = array( 
    1204                     'text' => __( 'Your WordPress installation is not telling users who cannot update WordPress core about WordPress core updates.', 'better-wp-security' ), 
    1205                     'link' => '#itsec_tweaks_server_core_updates', 
    1206                 ); 
    1207  
    1208             } else { 
    1209  
    1210                 $status_array = 'medium'; 
    1211                 $status       = array( 
    1212                     'text' => __( 'Your WordPress installation is telling users who cannot update WordPress core about WordPress core updates. Click here to fix this.', 'better-wp-security' ), 
    1213                     'link' => '#itsec_tweaks_server_core_updates', 
    1214                 ); 
    1215  
    1216             } 
    1217  
    1218             array_push( $statuses[ $status_array ], $status ); 
    1219  
    1220         } 
    1221  
    1222         if ( isset( $this->settings['comment_spam'] ) && $this->settings['comment_spam'] === true ) { 
    1223  
    1224             $status_array = 'safe-medium'; 
    1225             $status       = array( 
    1226                 'text' => __( 'Your WordPress installation is not allowing users without a user agent to post comments.', 'better-wp-security' ), 
    1227                 'link' => '#itsec_tweaks_server_comment_spam', 
    1228             ); 
    1229  
    1230         } else { 
    1231  
    1232             $status_array = 'medium'; 
    1233             $status       = array( 
    1234                 'text' => __( 'Your WordPress installation is allowing users without a user agent to post comments. Fix this to reduce comment spam.', 'better-wp-security' ), 
    1235                 'link' => '#itsec_tweaks_server_comment_spam', 
    1236             ); 
    1237  
    1238         } 
    1239  
    1240         array_push( $statuses[ $status_array ], $status ); 
    1241  
    1242         if ( isset( $this->settings['file_editor'] ) && $this->settings['file_editor'] === true ) { 
    1243  
    1244             $status_array = 'safe-low'; 
    1245             $status       = array( 
    1246                 'text' => __( 'Users cannot edit plugin and themes files directly from within the WordPress Dashboard.', 'better-wp-security' ), 
    1247                 'link' => '#itsec_tweaks_server_file_editor', 
    1248             ); 
    1249  
    1250         } else { 
    1251  
    1252             $status_array = 'low'; 
    1253             $status       = array( 
    1254                 'text' => __( 'Users can edit plugin and themes files directly from within the WordPress Dashboard. Click here to fix this.', 'better-wp-security' ), 
    1255                 'link' => '#itsec_tweaks_server_file_editor', 
    1256             ); 
    1257  
    1258         } 
    1259  
    1260         array_push( $statuses[ $status_array ], $status ); 
    1261  
    1262         if ( isset( $this->settings['disable_xmlrpc'] ) && $this->settings['disable_xmlrpc'] === 2 ) { 
    1263  
    1264             $status_array = 'safe-low'; 
    1265             $status       = array( 
    1266                 'text' => __( 'XML-RPC is not available on your WordPress installation.', 'better-wp-security' ), 
    1267                 'link' => '#itsec_tweaks_server_disable_xmlrpc', 
    1268             ); 
    1269  
    1270         } elseif ( isset( $this->settings['disable_xmlrpc'] ) && $this->settings['disable_xmlrpc'] === 1 ) { 
    1271  
    1272             $status_array = 'low'; 
    1273             $status       = array( 
    1274                 'text' => __( 'XML-RPC is protecting you from the trackback and pingback attack but is still available on your site.', 'better-wp-security' ), 
    1275                 'link' => '#itsec_tweaks_server_disable_xmlrpc', 
    1276             ); 
    1277  
    1278         } else { 
    1279  
    1280             $status_array = 'medium'; 
    1281             $status       = array( 
    1282                 'text' => __( 'XML-RPC is available on your WordPress installation. Attackers can use this feature to attack your site. Click here to disable access to XML-RPC.', 'better-wp-security' ), 
    1283                 'link' => '#itsec_tweaks_server_disable_xmlrpc', 
    1284             ); 
    1285  
    1286         } 
    1287  
    1288         array_push( $statuses[ $status_array ], $status ); 
    1289  
    1290         if ( ! isset( $this->settings['allow_xmlrpc_multiauth'] ) || true === $this->settings['allow_xmlrpc_multiauth'] ) { 
    1291             $status_array = 'high'; 
    1292             $status       = array( 
    1293                 'text' => __( 'XML-RPC requests can try multiple authentication attempts per request. Attackers can use this to speed up their brute force attacks.', 'better-wp-security' ), 
    1294                 'link' => '#itsec_tweaks_server_allow_xmlrpc_multiauth', 
    1295             ); 
    1296         } else { 
    1297             $status_array = 'safe-high'; 
    1298             $status       = array( 
    1299                 'text' => __( 'XML-RPC requests with multiple authentication attempts are blocked.', 'better-wp-security' ), 
    1300                 'link' => '#itsec_tweaks_server_allow_xmlrpc_multiauth', 
    1301             ); 
    1302         } 
    1303          
    1304         array_push( $statuses[ $status_array ], $status ); 
    1305  
    1306         if ( isset( $this->settings['uploads_php'] ) && $this->settings['uploads_php'] === true ) { 
    1307  
    1308             $status_array = 'safe-medium'; 
    1309             $status       = array( 
    1310                 'text' => __( 'Users cannot execute PHP from the uploads folder.', 'better-wp-security' ), 
    1311                 'link' => '#itsec_tweaks_server_uploads_php', 
    1312             ); 
    1313  
    1314         } else { 
    1315  
    1316             $status_array = 'medium'; 
    1317             $status       = array( 
    1318                 'text' => __( 'Users can execute PHP from the uploads folder.', 'better-wp-security' ), 
    1319                 'link' => '#itsec_tweaks_server_uploads_php', 
    1320             ); 
    1321  
    1322         } 
    1323  
    1324         array_push( $statuses[ $status_array ], $status ); 
    1325  
    1326         $safe_jquery = ITSEC_Lib::safe_jquery_version(); 
    1327  
    1328         if ( $safe_jquery === true ) { 
    1329  
    1330             $status_array = 'safe-high'; 
    1331             $status       = array( 
    1332                 'text' => __( 'The front page of your site is using a safe version of jQuery.', 'better-wp-security' ), 
    1333                 'link' => '#itsec_tweaks_wordpress_safe_jquery', 
    1334             ); 
    1335  
    1336         } elseif ( $safe_jquery === false ) { 
    1337  
    1338             $status_array = 'high'; 
    1339             $status       = array( 
    1340                 'text' => __( 'The front page of your site is not using a safe version of jQuery or the version of jQuery cannot be determined.', 'better-wp-security' ), 
    1341                 'link' => '#itsec_tweaks_wordpress_safe_jquery', 
    1342             ); 
    1343  
    1344         } else { 
    1345  
    1346             $status_array = 'low'; 
    1347             $status       = array( 
    1348                 'text' => __( 'Your version of jQuery has not been determined. Load your homepage while logged in to determine the version of jQuery you are using', 'better-wp-security' ), 
    1349                 'link' => '#itsec_tweaks_wordpress_safe_jquery', 
    1350             ); 
    1351  
    1352         } 
    1353  
    1354         array_push( $statuses[ $status_array ], $status ); 
    1355  
    1356         if ( isset( $this->settings['force_unique_nicename'] ) && $this->settings['force_unique_nicename'] === true ) { 
    1357  
    1358             $status_array = 'safe-high'; 
    1359             $status       = array( 
    1360                 'text' => __( "User's nicknames are different from their display name.", 'better-wp-security' ), 
    1361                 'link' => '#itsec_tweaks_server_force_unique_nicename', 
    1362             ); 
    1363  
    1364         } else { 
    1365  
    1366             $status_array = 'high'; 
    1367             $status       = array( 
    1368                 'text' => __( "User nicknames may be the same as their login name. This means their login user name may be publicly available throughout the site.", 'better-wp-security' ), 
    1369                 'link' => '#itsec_tweaks_server_force_unique_nicename', 
    1370             ); 
    1371  
    1372         } 
    1373  
    1374         array_push( $statuses[ $status_array ], $status ); 
    1375  
    1376         if ( isset( $this->settings['login_errors'] ) && $this->settings['login_errors'] === true ) { 
    1377  
    1378             $status_array = 'safe-low'; 
    1379             $status       = array( 
    1380                 'text' => __( 'Your login page is not giving out unnecessary information upon failed login.', 'better-wp-security' ), 
    1381                 'link' => '#itsec_tweaks_server_login_errors', 
    1382             ); 
    1383  
    1384         } else { 
    1385  
    1386             $status_array = 'low'; 
    1387             $status       = array( 
    1388                 'text' => __( 'Your login page is giving out unnecessary information upon failed login.', 'better-wp-security' ), 
    1389                 'link' => '#itsec_tweaks_server_login_errors', 
    1390             ); 
    1391  
    1392         } 
    1393  
    1394         array_push( $statuses[ $status_array ], $status ); 
    1395  
    1396         if ( isset( $this->settings['disable_unused_author_pages'] ) && $this->settings['disable_unused_author_pages'] === true ) { 
    1397  
    1398             $status_array = 'safe-medium'; 
    1399             $status       = array( 
    1400                 'text' => __( 'User profiles for users without content are not publicly available.', 'better-wp-security' ), 
    1401                 'link' => '#itsec_tweaks_server_disable_unused_author_pages', 
    1402             ); 
    1403  
    1404         } else { 
    1405  
    1406             $status_array = 'medium'; 
    1407             $status       = array( 
    1408                 'text' => __( 'User profiles for users without content are publicly available. This can make it relatively easy to gain the username of important users.', 'better-wp-security' ), 
    1409                 'link' => '#itsec_tweaks_server_disable_unused_author_pages', 
    1410             ); 
    1411  
    1412         } 
    1413  
    1414         array_push( $statuses[ $status_array ], $status ); 
    1415  
    1416         return $statuses; 
    1417  
    1418961    } 
    1419962 
     
    16981241 
    16991242        echo '</p>' . PHP_EOL; 
    1700  
    1701     } 
    1702  
    1703     /** 
    1704      * Register one-click settings 
    1705      * 
    1706      * @since 4.0 
    1707      * 
    1708      * @param array $one_click_settings array of one-click settings 
    1709      * 
    1710      * @return array array of one-click settings 
    1711      */ 
    1712     public function one_click_settings( $one_click_settings ) { 
    1713  
    1714         $one_click_settings['itsec_tweaks'][] = array( 
    1715             'option' => 'wlwmanifest_header', 
    1716             'value'  => 1, 
    1717         ); 
    1718  
    1719         $one_click_settings['itsec_tweaks'][] = array( 
    1720             'option' => 'theme_updates', 
    1721             'value'  => 1, 
    1722         ); 
    1723  
    1724         $one_click_settings['itsec_tweaks'][] = array( 
    1725             'option' => 'plugin_updates', 
    1726             'value'  => 1, 
    1727         ); 
    1728  
    1729         $one_click_settings['itsec_tweaks'][] = array( 
    1730             'option' => 'core_updates', 
    1731             'value'  => 1, 
    1732         ); 
    1733  
    1734         $one_click_settings['itsec_tweaks'][] = array( 
    1735             'option' => 'login_errors', 
    1736             'value'  => 1, 
    1737         ); 
    1738  
    1739         $one_click_settings['itsec_tweaks'][] = array( 
    1740             'option' => 'force_unique_nicename', 
    1741             'value'  => 1, 
    1742         ); 
    1743  
    1744         $one_click_settings['itsec_tweaks'][] = array( 
    1745             'option' => 'disable_unused_author_pages', 
    1746             'value'  => 1, 
    1747         ); 
    1748  
    1749         return $one_click_settings; 
    17501243 
    17511244    } 
     
    18341327            // Always set permissions to 0444 when saving the settings. 
    18351328            // This ensures that the file permissions are fixed each time the settings are saved. 
    1836              
     1329 
    18371330            $new_permissions = 0444; 
    18381331        } else if ( $input['write_permissions'] !== $this->settings['write_permissions'] ) { 
    18391332            // Only revert the settings to the defaults when disabling the setting. 
    18401333            // This avoids changing the file permissions when the setting has yet to be enabled and disabled. 
    1841              
     1334 
    18421335            $new_permissions = 0664; 
    18431336        } 
    1844          
     1337 
    18451338        if ( isset( $new_permissions ) ) { 
    18461339            // Only change the permissions when needed. 
    1847              
     1340 
    18481341            require_once( trailingslashit( $GLOBALS['itsec_globals']['plugin_dir'] ) . 'core/lib/class-itsec-lib-config-file.php' ); 
    18491342            require_once( trailingslashit( $GLOBALS['itsec_globals']['plugin_dir'] ) . 'core/lib/class-itsec-lib-file.php' ); 
    1850              
     1343 
    18511344            $server_config_file = ITSEC_Lib_Config_File::get_server_config_file_path(); 
    18521345            $wp_config_file = ITSEC_Lib_Config_File::get_wp_config_file_path(); 
    1853              
     1346 
    18541347            ITSEC_Lib_File::chmod( $server_config_file, $new_permissions ); 
    18551348            ITSEC_Lib_File::chmod( $wp_config_file, $new_permissions ); 
  • better-wp-security/trunk/core/modules/tweaks/setup.php

    r1283582 r1330783  
    1010        public function __construct() { 
    1111 
    12             global $itsec_setup_action; 
     12            add_action( 'itsec_modules_do_plugin_activation',   array( $this, 'execute_activate'   )          ); 
     13            add_action( 'itsec_modules_do_plugin_deactivation', array( $this, 'execute_deactivate' )          ); 
     14            add_action( 'itsec_modules_do_plugin_uninstall',    array( $this, 'execute_uninstall'  )          ); 
     15            add_action( 'itsec_modules_do_plugin_upgrade',      array( $this, 'execute_upgrade'    ), null, 2 ); 
    1316 
    1417            $this->defaults = array( 
     
    3538                'safe_jquery'                 => false, 
    3639            ); 
    37  
    38             if ( isset( $itsec_setup_action ) ) { 
    39  
    40                 switch ( $itsec_setup_action ) { 
    41  
    42                     case 'activate': 
    43                         $this->execute_activate(); 
    44                         break; 
    45                     case 'upgrade': 
    46                         $this->execute_upgrade(); 
    47                         break; 
    48                     case 'deactivate': 
    49                         $this->execute_deactivate(); 
    50                         break; 
    51                     case 'uninstall': 
    52                         $this->execute_uninstall(); 
    53                         break; 
    54  
    55                 } 
    56  
    57             } else { 
    58                 wp_die( 'error' ); 
    59             } 
    6040 
    6141        } 
     
    134114         * @return void 
    135115         */ 
    136         public function execute_upgrade() { 
    137  
    138             global $itsec_old_version; 
     116        public function execute_upgrade( $itsec_old_version ) { 
    139117 
    140118            if ( $itsec_old_version < 4000 ) { 
  • better-wp-security/trunk/history.txt

    r1283582 r1330783  
    435435    Enhancement: Added detailed information about Sucuri malware scan errors to Malware Scan log details. 
    436436    Bug Fix: No longer enables display of database errors when an event is logged. 
     4375.2.0 - 2016-01-18 - Chris Jean & Aaron D. Campbell 
     438    Security Fix: Fixed PHP code that could allow AJAX requests to list directories and files outside the directory structure of the WordPress installation. Note that these AJAX requests required a logged in user with admin-level privileges. This vulnerability was unable to be exploited by non-privileged or anonymous requests. 
     439    Bug Fix: Updated the SSL feature to use 301 redirects rather than 302 redirects. 
     440    Bug Fix: Fixed situations where security nonces would incorrectly trigger "security check" errors when enabling specific combinations of features on the settings page. 
     441    Bug Fix: Enabling scheduled database backups and setting a backup interval of 0 days no longer results in a backup being created on every page load. 
     442    Bug Fix: Module-specific data is properly initialized/removed on plugin activation, deactivation, and uninstallation. 
     443    Feature Removal: Removed the "Security Status" portion of the Security > Dashboard page. This is in preparation for a new tool that provides suggestions tailored to the site and server that Security is running on. 
     444    Enhancement: Updated the way the feature modules function in order to allow them to be redesigned in a more efficient and flexible way for future releases. 
     445    Enhancement: Updated the File Change Detection feature to attempt a max memory limit of 256M rather than 128M as some users experience out of memory issues which could be fixed with the higher memory limit. 
     446    Enhancement: Updated the Database Backup feature to attempt a max memory limit of 256M rather than 128M as some users experience out of memory issues which could be fixed with the higher memory limit. 
     447    Enhancement: Added localization support for some non-localized strings. 
     448    Enhancement: Improved detection of multiple active versions of iThemes Security. 
  • better-wp-security/trunk/readme.txt

    r1283582 r1330783  
    33Tags: security, malware, secure, multi-site, network, mu, login, lockdown, htaccess, hack, header, cleanup, ban, restrict, access, protect, protection, disable, images, image, hotlink, admin, username, database, prefix, wp-content, rename, directory, directories, secure, SSL, iThemes, BackupBuddy, Exchange, iThemes Exchange 
    44Requires at least: 4.1 
    5 Tested up to: 4.3.1 
    6 Stable tag: 5.1.1 
     5Tested up to: 4.4.1 
     6Stable tag: 5.2.0 
    77License: GPLv2 or later 
    88License URI: http://www.gnu.org/licenses/gpl-2.0.html 
     
    189189 
    190190== Changelog == 
     191 
     192= 5.2.0 = 
     193* Security Fix: Fixed PHP code that could allow AJAX requests to list directories and files outside the directory structure of the WordPress installation. Note that these AJAX requests required a logged in user with admin-level privileges. This vulnerability was unable to be exploited by non-privileged or anonymous requests. 
     194* Bug Fix: Updated the SSL feature to use 301 redirects rather than 302 redirects. 
     195* Bug Fix: Fixed situations where security nonces would incorrectly trigger "security check" errors when enabling specific combinations of features on the settings page. 
     196* Bug Fix: Enabling scheduled database backups and setting a backup interval of 0 days no longer results in a backup being created on every page load. 
     197* Bug Fix: Module-specific data is properly initialized/removed on plugin activation, deactivation, and uninstallation. 
     198* Feature Removal: Removed the "Security Status" portion of the Security > Dashboard page. This is in preparation for a new tool that provides suggestions tailored to the site and server that Security is running on. 
     199* Enhancement: Updated the way the feature modules function in order to allow them to be redesigned in a more efficient and flexible way for future releases. 
     200* Enhancement: Updated the File Change Detection feature to attempt a max memory limit of 256M rather than 128M as some users experience out of memory issues which could be fixed with the higher memory limit. 
     201* Enhancement: Updated the Database Backup feature to attempt a max memory limit of 256M rather than 128M as some users experience out of memory issues which could be fixed with the higher memory limit. 
     202* Enhancement: Added localization support for some non-localized strings. 
     203* Enhancement: Improved detection of multiple active versions of iThemes Security. 
    191204 
    192205= 5.1.1 = 
Note: See TracChangeset for help on using the changeset viewer.