如何绕过wordpress登录界面

时间:2014-02-06 06:45:32

标签: php wordpress session cookies autologin

基本上我想在wordpress中自动登录用户,当他点击他的电子邮件中的链接时,该链接带有用户ID,用户名或电子邮件的参数。

我去研究了Wordpress在登录后存储会话信息的位置。

在我的主题 header.php 中,当我把:

<?php print_r($_COOKIE); print_r($_SESSION); ?>

admin 身份登录,我只获得了一个 $ _ COOKIE 数组,因为wordpress不会在内部使用会话。

Array
(
    [wordpress_test_cookie] => WP Cookie check
    [wordpress_logged_in_80d2ab9fd1f16a2a89ddb8a5553b4463] => admin|1391841132|58e4ae330b4ca7aef9d6a8ffa3c3a1fb
)

我还比较了登录前后的数据库转储,没有任何变化。 由此,我得出结论,Wordpress以cookie的形式存储会话数据。

现在,当用户点击其电子邮件中的链接时,我想绕过Wordpress的登录屏幕。

我想知道上面的cookie数组中存储了哪些数据。 所以我可以动态创建自己的数据并将其推送到 $ _ COOKIE 数组中,以自动登录用户。

有人可以对此有所了解吗?我对尝试任何插件都不感兴趣。我现在想手动完成。

编辑:我遇到了this question,如果我们只知道他的用户名,就会谈到用户的程序化登录。

3 个答案:

答案 0 :(得分:4)

好吧,我可以在我的网站的根目录中设置一个脚本,用于处理用户的自动登录,当他点击他的电子邮件中的链接时。该链接有2个参数:他的用户名和他的电子邮件的md5字符串。

例如,如果用户名为“ sam ”且他的电子邮件为“ samuel@example.com ”,则其电子邮件中的示例链接将如下:< / p>

  

http://www.example.com/user-login.php?username=sam&rand=ddb4b1cd8f56f9946b76399abb9d3106

然后最后 user-login.php 脚本如下:

<?php
require_once ('wp-config.php');

if(isset($_GET['username']) && $_GET['username'] != '' && 
isset($_GET['rand']) && $_GET['rand'] != '')
{
    $username = trim($_GET['username']);
    $rand = trim($_GET['rand']);

    global $wpdb;
    $user_details = $wpdb->get_row("SELECT id, user_email FROM wp_users 
    WHERE user_login='".$username."'");

    if(! $user_details->id)
    {
        die("Error: Not a valid user");
    }
    else
    {
        $rand_email = md5($user_details->user_email);
        if($rand_email != $rand)
        {
            die("Error: Invalid URL");
        }
        else {
            $user = get_user_by('login', $username );

            if ( !is_wp_error( $user ) )
            {
                wp_clear_auth_cookie();
                wp_set_current_user ( $user->ID );
                wp_set_auth_cookie  ( $user->ID );
                $redirect_to = get_option('siteurl');
                wp_safe_redirect( $redirect_to );
                exit();
            }
        }
    }
}
else {
    die("Error: Missing params");
}
?>

这样,当用户点击其电子邮件中的链接时,他将自动登录并导航到主页。

感谢Sjoerd Linders让我了解他的答案。

答案 1 :(得分:2)

除了这将是一个巨大的安全风险之外,您可以使用java脚本执行此操作并使用用户名和密码将URL发送到网址:www.site.com/wp-admin/admin.php(确保将变量命名为与wordpress中userlogin表上的name标记相同。然后我想你需要刷新只需对dir / wp-admin /。

进行javascript刷新

答案 2 :(得分:1)

听起来像非常糟糕的主意(tm)。一方面,你打开你的网站进行脚本攻击(猜测cookie和用户名,你进去),另一方面你鼓励人们只需点击链接登录某些东西(听起来就是这样) ... phish-y,以及任何一半体面的现代邮件客户端都会标记为恶意软件的东西。)

这不是很好的安全措施。

在进一步走这条道路之前,先问问自己:如果badguy使用自动登录链接搜索电子邮件副本会出现什么问题?

你真的想解决什么问题?