Plugin Directory

Changeset 715022


Ignore:
Timestamp:
05/18/2013 05:53:15 PM (13 years ago)
Author:
Bit51
Message:

Version 3.5

Location:
better-wp-security
Files:
69 added
7 edited

Legend:

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

    r700270 r715022  
    44    Plugin URI: http://bit51.com/software/better-wp-security/
    55    Description: Helps protect your Wordpress installation from attackers. Hardens standard Wordpress security by hiding vital areas of your site, protecting access to important files via htaccess, preventing brute-force login attempts, detecting attack attempts, and more.
    6     Version: 3.4.10
     6    Version: 3.5
    77    Text Domain: better-wp-security
    88    Domain Path: /languages
     
    2020    class bit51_bwps extends bit51 {
    2121   
    22         public $pluginversion   = '3060'; //current plugin version
     22        public $pluginversion   = '3061'; //current plugin version
    2323   
    2424        //important plugin information
     
    162162            require_once( BWPS_PP . 'inc/secure.php' );
    163163            $bwps = new bwps_secure();
    164            
    165             if ( $bwpsdata['version'] != $this->pluginversion  || get_option( 'BWPS_options' ) != false ) {
    166                 new bwps_setup( 'activate' );
     164       
     165            if ( $bwpsdata['version'] != $this->pluginversion || get_option( 'BWPS_options' ) != false ) {
     166                new bwps_setup( 'activate', true );
    167167            }
    168            
    169         }   
     168
     169            parent::init();
     170        }
    170171       
    171172    }
  • better-wp-security/trunk/inc/admin/content.php

    r690782 r715022  
    953953                <li>
    954954                    <h4><?php _e( 'Server Information', $this->hook ); ?></h4>
     955                    <?php $server_addr = array_key_exists('SERVER_ADDR',$_SERVER) ? $_SERVER['SERVER_ADDR'] : $_SERVER['LOCAL_ADDR']; ?>
    955956                    <ul>
    956                         <li><?php _e( 'Server / Website IP Address', $this->hook ); ?>: <strong><a target="_blank" title="<?php _e( 'Get more information on this address', $this->hook ); ?>" href="http://whois.domaintools.com/<?php echo $_SERVER['SERVER_ADDR']; ?>"><?php echo $_SERVER['SERVER_ADDR']; ?></a></strong></li>
     957                        <li><?php _e( 'Server / Website IP Address', $this->hook ); ?>: <strong><a target="_blank" title="<?php _e( 'Get more information on this address', $this->hook ); ?>" href="http://whois.domaintools.com/<?php echo $server_addr; ?>"><?php echo $server_addr; ?></a></strong></li>
    957958                            <li><?php _e( 'Server Type', $this->hook ); ?>: <strong><?php echo filter_var( filter_var( $_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING ), FILTER_SANITIZE_STRING ); ?></strong></li>
    958959                            <li><?php _e( 'Operating System', $this->hook ); ?>: <strong><?php echo PHP_OS; ?></strong></li>
     
    27472748                            <td class="settingfield">
    27482749                                <select name="st_passrole" id="st_passrole">
    2749                                     <option value="administrator" <?php if ( $bwpsoptions['st_passrole'] == "administrator" ) echo "selected"; ?>><? echo translate_user_role("Administrator"); ?></option>
    2750                                     <option value="editor" <?php if ( $bwpsoptions['st_passrole'] == "editor" ) echo "selected"; ?>><? echo translate_user_role("Editor"); ?></option>
    2751                                     <option value="author" <?php if ( $bwpsoptions['st_passrole'] == "author" ) echo "selected"; ?>><? echo translate_user_role("Author"); ?></option>
    2752                                     <option value="contributor" <?php if ( $bwpsoptions['st_passrole'] == "contributor" ) echo "selected"; ?>><? echo translate_user_role("Contributor"); ?></option>
    2753                                     <option value="subscriber" <?php if ( $bwpsoptions['st_passrole'] == "subscriber" ) echo "selected"; ?>><? echo translate_user_role("Subscriber"); ?></option>
     2750                                    <option value="administrator" <?php if ( $bwpsoptions['st_passrole'] == "administrator" ) echo "selected"; ?>><?php echo translate_user_role( 'Administrator' ); ?></option>
     2751                                    <option value="editor" <?php if ( $bwpsoptions['st_passrole'] == "editor" ) echo "selected"; ?>><?php echo translate_user_role( 'Editor' ); ?></option>
     2752                                    <option value="author" <?php if ( $bwpsoptions['st_passrole'] == "author" ) echo "selected"; ?>><?php echo translate_user_role( 'Author' ); ?></option>
     2753                                    <option value="contributor" <?php if ( $bwpsoptions['st_passrole'] == "contributor" ) echo "selected"; ?>><?php echo translate_user_role( 'Contributor' ); ?></option>
     2754                                    <option value="subscriber" <?php if ( $bwpsoptions['st_passrole'] == "subscriber" ) echo "selected"; ?>><?php echo translate_user_role( 'Subscriber' ); ?></option>
    27542755                                </select>
    27552756                                <p><?php _e( 'Minimum role at which a user must choose a strong password. For more information on WordPress roles and capabilities please see', $this->hook ); ?> <a href="http://codex.wordpress.org/Roles_and_Capabilities" target="_blank">http://codex.wordpress.org/Roles_and_Capabilities</a>.</p>
     
    28492850
    28502851}
    2851 
  • better-wp-security/trunk/inc/backup.php

    r621519 r715022  
    9090                           
    9191                        $row[$j] = addslashes( $row[$j] );
    92                         $row[$j] = ereg_replace( PHP_EOL, "\n", $row[$j] );
     92                        $row[$j] = preg_replace( PHP_EOL, "\n", $row[$j] );
    9393                               
    9494                        if ( isset( $row[$j] ) ) {
  • better-wp-security/trunk/inc/secure.php

    r690782 r715022  
    1818
    1919            if ( $data ) {
    20                 $unserialized_data = unserialize( $data );
     20                $unserialized_data = @unserialize( $data );
    2121                if ( isset( $unserialized_data['iwp_action'] ) ) {
    2222                    $iwp_action = $unserialized_data['iwp_action'];
     
    894894         **/
    895895        function remove_script_version( $src ){
    896        
    897             $parts = explode( '?', $src );
    898             return $parts[0];
     896
     897            if ( strpos( $src, 'ver=' ) ) {
     898                return substr( $src, 0, strpos( $src, 'ver=' ) - 1 );
     899            } else {
     900                return $src;
     901            }
    899902           
    900903        }
  • better-wp-security/trunk/inc/setup.php

    r640277 r715022  
    77    class bwps_setup extends bwps_admin_common {
    88
     9        private $update;
     10
    911        /**
    1012         * Establish setup object
     
    1517         *
    1618         **/
    17         function __construct( $case = false ) {
     19        function __construct( $case = false, $updating = false ) {
    1820   
    1921            if ( ! $case ) {
     
    2325            switch($case) {
    2426                case 'activate': //active plugin
    25                     $this->activate_execute();
     27                    $this->activate_execute( $updating );
    2628                    break;
    2729
    2830                case 'deactivate': //deactivate plugin
    29                     $this->deactivate_execute();
     31                    $this->deactivate_execute( $updating );
    3032                    break;
    3133
     
    3436                    break;
    3537            }
     38
    3639        }
    3740       
     
    7578       
    7679        /**
    77          * Activate execution
    78          *
    79          **/
    80         function activate_execute() {
     80         * Execute activation
     81         *
     82         * @param  boolean $updating true if the plugin is updating
     83         * @return void
     84         */
     85        function activate_execute( $updating = false ) {
    8186            global $wpdb;
    8287           
     
    9095           
    9196            }   
    92                    
    93             $oldversion = $bwpsdata['version']; //set new version number
     97               
     98            $oldversion = $bwpsdata['version']; //get old version number
    9499            $bwpsdata['version'] = $this->pluginversion; //set new version number
    95100           
     
    109114           
    110115            //update if version numbers don't match
    111             if ( ( $oldversion != '' && $oldversion != $this->pluginversion ) || get_option( 'BWPS_options' ) != false ) {
     116            if ( $updating === true ) {
    112117                $this->update_execute( $oldversion );
    113118            }
     
    185190               
    186191            }
    187            
    188             if ( ( strstr( strtolower( filter_var( $_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING ) ), 'apache' ) || strstr( strtolower( filter_var( $_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING ) ), 'litespeed' ) ) && $bwpsoptions['st_writefiles'] == 1 ) { //if they're using apache write to .htaccess
    189                
    190                 $this->writehtaccess();
    191                    
    192             }
    193            
    194             if ( $bwpsoptions['st_writefiles'] == 1 ) {
    195            
    196                 $this->writewpconfig(); //write appropriate options to wp-config.php
    197                
    198             }
    199            
    200         }
    201 
    202         /**
    203          * Update execution
    204          *
    205          **/
    206         function update_execute($oldversion = '') {
     192
     193            if ( $updating  === false ) {
     194
     195                if ( ( strstr( strtolower( filter_var( $_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING ) ), 'apache' ) || strstr( strtolower( filter_var( $_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING ) ), 'litespeed' ) ) && $bwpsoptions['st_writefiles'] == 1 ) { //if they're using apache write to .htaccess
     196                   
     197                    $this->writehtaccess();
     198                       
     199                }
     200           
     201                if ( $bwpsoptions['st_writefiles'] == 1 ) {
     202               
     203                    $this->writewpconfig(); //write appropriate options to wp-config.php
     204                   
     205                }
     206
     207            }
     208           
     209        }
     210
     211        /**
     212         * Update Execution
     213         *
     214         * @param  string $oldversion Old version number
     215         * @return void
     216         */
     217        function update_execute( $oldversion = '' ) {
    207218            global $wpdb, $bwpsoptions;
    208219           
     
    372383                    if ( wp_next_scheduled( 'bwps_backup' ) ) {
    373384                        wp_clear_scheduled_hook( 'bwps_backup' );
    374                     }   
     385                    }
    375386                   
    376387                }
     
    452463               
    453464                }
    454            
    455             }
    456 
    457             if ( ( strstr( strtolower( filter_var( $_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING ) ), 'apache' ) || strstr( strtolower( filter_var( $_SERVER['SERVER_SOFTWARE'], FILTER_SANITIZE_STRING ) ), 'litespeed' ) ) && $bwpsoptions['st_writefiles'] == 1 ) { //if they're using apache write to .htaccess
    458                
    459                 $this->writehtaccess();
    460                    
    461             }
    462            
    463             if ( $bwpsoptions['st_writefiles'] == 1 ) {
    464            
    465                 $this->writewpconfig(); //write appropriate options to wp-config.php
    466                
     465
     466                if ( str_replace( '.', '', $oldversion ) < 3059 ) {
     467
     468
     469                    $this->writehtaccess();
     470           
     471                    if ( $bwpsoptions['st_writefiles'] == 1 ) {
     472           
     473                        $this->writewpconfig(); //write appropriate options to wp-config.php
     474               
     475                    }
     476
     477                }
     478           
    467479            }
    468480       
     
    473485         *
    474486         **/
    475         function deactivate_execute() {
     487        function deactivate_execute( $updating = false ) {
    476488       
    477489            if ( wp_next_scheduled( 'bwps_backup' ) ) {
  • better-wp-security/trunk/lib/bit51/bit51.php

    r700270 r715022  
    77 */
    88
     9require_once( plugin_dir_path( __FILE__ ) . 'foolic_validation_v1_1.php' );
     10
    911if ( ! class_exists( 'Bit51' ) ) {
    1012
    1113    abstract class Bit51 {
    12    
     14
    1315        var $feed = 'http://bit51.com/feed'; //current address of Bit51.com feed
     16        var $support_email = '[email protected]'; //current email address of Bit51.com support
     17
     18        /**
     19         * Runs any init code needed
     20         *
     21         **/
     22        function init() {
     23            add_filter( 'foolic_validation_include_css-' . $this->hook, array( &$this, 'include_foolic_css' ) );
     24            add_filter( 'foolic_validation_input_type-' . $this->hook, array( &$this, 'change_foolic_input_type' ) );
     25            add_filter( 'foolic_validation_input_size-' . $this->hook, array( &$this, 'change_foolic_input_size' ) );
     26            new foolic_validation_v1_1( 'http://fooplugins.com/api/better-wp-security/check', $this->hook );
     27            add_action('wp_ajax_' . $this->hook . '_support', array($this, 'ajax_submit_ticket'));
     28        }
    1429   
    1530        /**
     
    313328                            <div class="meta-box-sortables">
    314329                                <?php
     330                                    do_action( 'bit51_metaboxes', $this->hook );
     331                                    $this->support();
    315332                                    $this->donate();
    316                                     $this->support();
    317333                                    $this->news();
    318334                                    $this->social();
     
    332348         **/
    333349        function support() {
    334        
    335             $content = __('If you need help getting this plugin or have found a bug please visit the <a href="' . $this->supportpage . '" target="_blank">support forums</a>.', $this->hook);
    336            
    337             $this->postbox( 'bit51support', __( 'Need Help?', $this->hook ), $content ); //execute as postbox
     350            $purchase_url = 'http://fooplugins.com/plugins/better-wp-security/';
     351
     352            $data = apply_filters( 'foolic_get_validation_data-' . $this->hook, false );
     353
     354            if ( $data === false ) {
     355                return;
     356            }
     357
     358            if ( $data['valid'] === 'valid' ) {
     359                $content = '<form id="support_form">';
     360                $content .= '<input type="hidden" name="action" value="' . $this->hook . '_support" />';
     361                $content .= '<input type="hidden" name="nonce" value="' . wp_create_nonce($this->hook . '_ajax-nonce') . '" />';
     362                $content .= '<input type="hidden" name="ticket_key" value="' . $data['license'] . '" />';
     363                $content .= '<label for="support_issue">' . __( 'Describe the Issue', $this->hook ). ':</label><textarea name="issue" style="height:100px; display:block; width:100%; border:solid 1px #aaa;" class="regular-text" id="support_issue"></textarea>';
     364                $content .= '<label for="support_reproduce">' . __( 'Steps to Reproduce', $this->hook ). ':</label><textarea name="reproduce" style="height:200px; display:block; width:100%; border:solid 1px #aaa;" class="regular-text" id="support_reproduce"></textarea>';
     365                $content .= '<label for="support_other">' . __( 'Other Information', $this->hook ). ':</label><textarea name="other" style="height:100px; display:block; width:100%; border:solid 1px #aaa;" class="regular-text" id="support_other"></textarea><br />';
     366                $content .= '<input id="submit_support" type="button" class="button-primary" value="' . __( 'Submit Support Ticket', $this->hook ) . '" /><br />';
     367                $content .= '<br /></form>';
     368                $content .= '<div style="display:none" class="support_message foolic-loading"><p>' . __( 'sending...', $this->hook ). '</p></div>';
     369                $content .= '<a target="_blank" href="' . $purchase_url . '">' . __( 'Purchase priority support', $this->hook ) . '</a>';
     370                $content .= ' | <a href="#newkey" class="foolic-clear-' . $this->hook . '">' . __( 'Enter License Key', $this->hook ) . '</a>';
     371                $content .= $data['nonce'];
     372
     373
     374            } else {
     375
     376                $content = '<strong>' . __( 'Need premium support or configuration?', $this->hook ). '<br /><br /><a target="_blank" href="' . $purchase_url .'">' . __( 'Purchase one-time premium support or installation', $this->hook ) . '</a>.</strong><br /><br />';
     377                $content .= $data['html'];
     378
     379            }
     380
     381            $content .= '<script type="text/javascript">
     382                            jQuery( function( $ ) {
     383                                $( document ).bind( "foolic-cleared-' . $this->hook . '", function() {
     384                                    window.location.reload();
     385                                } );
     386
     387                                $("#submit_support").click(function(e) {
     388                                    e.preventDefault();
     389
     390                                    if ($("#support_issue").val().length == 0) {
     391                                        alert("' . __( 'Please describe the issue you are having', $this->hook ). '");
     392                                        return;
     393                                    }
     394                                    $("#support_form").slideUp();
     395                                    var data = $("#support_form").serialize();
     396
     397                                    $(".support_message").addClass("updated").show();
     398
     399                                    $.ajax({ url: ajaxurl, cache: false, type: "POST", data: data,
     400                                        success: function (data) {
     401                                            $(".support_message").removeClass("foolic-loading").html("<p>' . __( 'Thank you for submitting your support ticket. We will contact you shortly.', $this->hook ) . '</p>");
     402                                        },
     403                                        error: function(a,b,c) {
     404                                            alert(a);
     405                                        }
     406                                    });
     407                                } );
     408                            } );
     409                        </script>';
     410
     411            $this->postbox( 'prioritysupport', __( 'Premium Support' , $this->hook ), $content ); //setup the postbox
    338412           
    339413        }
     
    508582           
    509583        }
    510        
     584
     585        function include_foolic_css( $screen ) {
     586            return $screen->id === 'toplevel_page_better-wp-security';
     587        }
     588
     589        function change_foolic_input_type() {
     590            return 'text';
     591        }
     592
     593        function change_foolic_input_size() {
     594            return '29';
     595        }
     596
     597        function ajax_submit_ticket() {
     598            global $wp_version;
     599            global $current_user;
     600
     601            if (wp_verify_nonce($_REQUEST['nonce'], $this->hook . '_ajax-nonce')) {
     602                $issue = $_REQUEST['issue'];
     603                $reproduce = $_REQUEST['reproduce'];
     604                $other = $_REQUEST['other'];
     605                $ticket_key = $_REQUEST['ticket_key'];
     606                get_currentuserinfo();
     607
     608                $message = '<table>
     609                <tr><td>' . __('Issue', $this->hook) . '</td><td>' . $issue . '</td></tr>
     610                <tr><td>' . __('Steps to Reproduce', $this->hook) . '</td><td>' . $reproduce . '</td></tr>
     611                <tr><td>' . __('Other Information', $this->hook) . '</td><td>' . $other . '</td></tr>
     612                <tr><td>' . __('Support Ticket Key', $this->hook) . '</td><td>' . $ticket_key . '</td></tr>
     613                <tr><td>' . __('Plugin Version', $this->hook) . '</td><td>' . $this->pluginversion . '</td></tr>
     614                <tr><td>' . __('WP Version', $this->hook) . '</td><td>' . $wp_version . '</td></tr>
     615                <tr><td>' . __('Website', $this->hook) . '</td><td>' . home_url() . '</td></tr>
     616                <tr><td>' . __('Email', $this->hook) . '</td><td>' . $current_user->user_email . '</td></tr>
     617                <tr><td>' . __('Name', $this->hook) . '</td><td>' . $current_user->display_name . '</td></tr>
     618                </table>';
     619
     620                add_filter( 'wp_mail_content_type', array($this, 'set_html_content_type' ) );
     621                wp_mail(
     622                    $this->support_email,
     623                    __('Better WP Security Support Ticket', $this->hook),
     624                    $message
     625                );
     626                remove_filter( 'wp_mail_content_type', array($this, 'set_html_content_type' ) ); // reset content-type to to avoid conflicts
     627            }
     628        }
     629
     630        function set_html_content_type() {
     631            return 'text/html';
     632        }
    511633    }
    512634   
  • better-wp-security/trunk/readme.txt

    r700270 r715022  
    33Contributors: Bit51
    44Donate link: http://bit51.com/software/better-wp-security/
    5 Tags: security, 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
    6 Requires at least: 3.4
    7 Tested up to: 3.5.1
    8 Stable tag: 3.4.10
     5Tags: security, 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, FooPlugins
     6Requires at least: 3.5
     7Tested up to: 3.6
     8Stable tag: 3.5
    99
    1010The easiest, most effective way to secure WordPress. Improve the security of any WordPress site in seconds.
     
    8585* Spanish by <a href="http://pabloromero.org">Pablo Romero</a>
    8686* Tagalog by <a href="http://pointen.dk/">Hanne</a>
    87 
    88 Note I have removed all translations that were not compatible with version 3+. Please let me know if you would like to add a translation.
     87* Turkish by <a href="http://hakanertr.wordpress.com">Hakan Er</a>
     88
     89Please <A href="http://bit51.com/contact" target="_blank">let us know</a> if you would like to contribute a translation.
    8990
    9091= Warning =
     
    9394
    9495== Installation ==
     96
     97Don't want to configure Better WP Security yourself but still want to make sure your site is secure as possible? <a href="http://fooplugins.com/plugins/better-wp-security/" target="_blank">Purchase premium installation and configuration for Better WP Security</a>
    9598
    96991. Backup your Wordpress database, config file, and .htaccess file
     
    142145
    143146= Where can I get help if something goes wrong? =
    144 * As I do not have a support staff and this plugin is one of many projects I am involved with I do not guarantee support at all. There is no warranty and if something goes wrong I make no promise of assistance. That said, I do my best to check the WordPress.org support forums every 2 -3 days and  respond to all queries. I will not answer any support requests sent to me through any other method.
     147* Free support is available by reading the <a href="http://bit51.com/software/better-wp-security/" target="_blank">plugin documentation</a> or may be available with the help of the community in the <a href="http://wordpress.org/support/plugin/better-wp-security" target="_blank">WordPress.org support forums</a> (this is community provided support as Bit51 does not monitor the WordPress.org support forums). If you need more formal support you can <a href="http://fooplugins.com/plugins/better-wp-security/" target="_blank">purchase a premium support ticket</a> on a per-incident basis.
    145148
    146149== Screenshots ==
     
    152155
    153156== Changelog ==
     157
     158= 3.5 =
     159* Integrate with Foo Plugins support system
     160* Fixed role translation call for Strong password enforcement
     161* Turkish by <a href="http://hakanertr.wordpress.com">Hakan Er</a>
     162* Random version number no longer strips unrelated GET variables for better compatibility
     163* Upgrading no longer automatically rewrites .htaccess and wp-config resulting in much improved reliability
     164* Fixed possible error when login fails and PHP is set to report errors to screen
    154165
    155166= 3.4.10 =
Note: See TracChangeset for help on using the changeset viewer.