2

出于安全原因,我试图通过重写链接来限制非管理员用户访问我的 wordpress 站点管理员和登录面板,例如,如果用户键入http://www.mysite.com/wp-login.phphttp: //www.mysite.com/wp-admin他被重定向到错误 404 页面,但如果他键入http://www.mysite.com/blah-loginhttp://www.mysite.com/blah-admin是重定向到我的 WP 管理员或登录面板。我有以下选项可以做到这一点。

  1. 重写我不擅长的 .htaccess 文件,也不想弄乱我网站的 .htaccess 文件。
  2. 使用我通过编写一个小插件完成的 $wp_rewrite 类,其代码如下所示。

    register_activation_hook( __FILE__, 'activate' );
    function activate() {
        rewrite();
        flush_rewrite_rules();
    }
    register_deactivation_hook( __FILE__, 'deactivate' );
    function deactivate() {
        flush_rewrite_rules();
    }
    add_action( 'init', 'rewrite' );
    function rewrite() {
        add_rewrite_rule( 'blah-admin/?$', 'wp-admin', 'top' );
        add_rewrite_rule( 'blah-login/?$', 'wp-login.php', 'top' );
        add_rewrite_rule( 'blah-register/?$', 'wp-register.php', 'top' );
    }
    

    它完美地工作,唯一的问题是它不限制对 wp-admin、wp-login.php 或 wp-registe.php 的访问(这是必须的)。

  3. 我可以将以下规则写入新的 .htaccess 文件。

    AuthUserFile /dev/null
    AuthGroupFile /dev/null
    AuthName "Wordpress Admin Access Control"
    AuthType Basic
    
    <LIMIT GET>
      order deny,allow
      deny from all
      allow from xxx.xxx.xxx.xxx
    </LIMIT>
    

    并将其放在 wp-admin 文件夹下,它有两个缺点,一是它只会限制对我的 wp-admin 文件夹的访问,而不是 wp-register.php 或 wp-login.php,二是我是 DHCP 客户端,因此allow from xxx.xxx.xxx.xxx无法正常工作为了我。

  4. 我可以使用第二条和第三条规则的组合,但它肯定行不通,因为我无法为整个被阻止的文件夹提供替代永久链接。

  5. 至于最后的手段,我可​​以使用 wp-modal 插件的永久链接重写功能,它就像一个魅力,但这个插件与我的主题不兼容。

那么我的问题真的有解决方案吗?

4

2 回答 2

3

如果他们尚未登录,我会使用此代码段将人们从后端重定向。您可以将其修改为指向您的 404:

// BLOCK BACKEND ACCESS FOR NON-ADMINS
add_action( 'init', 'blockusers_init' );
function blockusers_init() {
    // If accessing the admin panel and not an admin
    if ( is_admin() && !current_user_can('level_10') ) {
        // Redirect to the homepage
        wp_redirect( home_url() );
        exit;
    }
}

只需将 URL 从home_url()函数更改为您的 404 页面wp_redirect

于 2013-08-20T13:04:11.440 回答
0

我假设您正在尝试保护自己免受暴力攻击?为什么不限制允许登录尝试的频率?有一个名为“限制登录尝试”的非常可靠的插件,它将跟踪每个 IP 和 cookie 的使用。

在这里查看:http ://wordpress.org/plugins/limit-login-attempts/

不过,尝试屏蔽登录页面是一个有趣的想法。您可以在某处创建自己的登录页面,并让它与您编写的自定义登录脚本交互。这将允许您 301 将登录页面重定向到 404 页面,而不会弄乱任何核心功能。

您可以有一个类似的表单,https://yourwpsite.com/supersecretlogin然后将其POST提供给使用该wp_signon方法的自定义处理程序。这是一个如何在不使用 wp-admin 的情况下登录某人的示例:

$creds = array();
$creds['user_login'] = $_POST['user'];
$creds['user_password'] = $_POST['password'];
$creds['remember'] = true;
$user = wp_signon( $creds, false );
if ( is_wp_error($user) )
   exit($user->get_error_message());
header('Location: https://yourwpsite.com/wp-admin');

http://codex.wordpress.org/Function_Reference/wp_signon

希望有帮助!

于 2013-08-20T00:45:30.443 回答