代码之家  ›  专栏  ›  技术社区  ›  markratledge

以编程方式提交WordPress表单密码

  •  3
  • markratledge  · 技术社区  · 15 年前

    我希望能够让用户不需要输入密码就可以进入受密码保护的WordPress页面,因此当他们进入该页面时,密码是通过页面加载时的POST URL提交的。

    这并不意味着在任何方面都是安全的;我需要在URL和PHP中硬编码密码。它只是为了用户的简单性。

    编辑4/19/10: 根据下面的答案,可以直接设置cookie,以允许用户不必输入密码。让搜索机器人进入的最好方法是检测用户代理并重定向,因为机器人不会处理cookies。

    这是表单(WordPress核心代码):

    <form action="http://mydomain.com/wp-pass.php" method="post">
    
    Password: <input name="post_password" type="password" size="20" />
    
    <input type="submit" name="Submit" value="Submit" /></form>
    

    <?php
    require( dirname(__FILE__) . '/wp-load.php');
    
    if ( get_magic_quotes_gpc() )
        $_POST['post_password'] = stripslashes($_POST['post_password']);
    
    setcookie('wp-postpass_' . COOKIEHASH, $_POST['post_password'], time() + 864000, COOKIEPATH);
    
    wp_safe_redirect(wp_get_referer());
    ?>
    
    6 回复  |  直到 15 年前
        1
  •  4
  •   Arda Xi    15 年前

    我将在这里进一步解释这个问题,而不是继续在前面的答案中附加内容。

    Wordpress密码的工作方式是:

    1. 原始页面有一个表单 wp-pass.php
    2. wp-pass.php文件 接受提供的 将用户重定向回
    3. 原始页面检查cookie 将显示页面。

    这里的问题是搜索引擎不接受cookies。所以,你有两个选择:

    1. $_GET 变量。
    2. 使用cURL发送cookie时使用头,有单独的页面搜索引擎可以使用。

        2
  •  1
  •   Matt    15 年前

    在wp-pass.php中将$\u POST更改为$\u REQUEST everywhere。

    也许有更好的办法,但我不懂WordPress。

    问题是这些参数在GET数组中,而不是POST数组中。所以使用带参数的常规链接是行不通的。可以使用带有隐藏字段的窗体。如果需要,可以将“提交”按钮设置为链接样式。

    <form action="http://mydomain.com/wp-pass.php" method="post">
    <input name="post_password" type="hidden" value="totally insecure password here" />
    <input type="submit" name="Submit" value="Click here to enter your account" />
    </form>
    
        3
  •  1
  •   Arda Xi    15 年前

    如果不想编辑WP的核心,可以使用cURL来模拟POST变量,如下所示:

    $ch = curl_init("http://mydomain.com/wp-pass.php");
    curl_setopt($ch, CURLOPT_POSTFIELDS,  "post_password=mypassword&Submit=Submit");  
    curl_setopt($ch, CURLOPT_HEADER, 0);  
    curl_setopt($ch, CURLOPT_POST, 1);  
    curl_exec($ch);  
    curl_close($ch);
    
        4
  •  1
  •   Community CDub    8 年前

    this answer :

    实际上,现在我想我想要 搜索 索引页面,但是 非谷歌机器人 搜索的流量 链接被重定向到 介绍页,不是密码 受保护页。我可以用php来 页面(和索引),但不是googlebot 流量可以得到一个http重定向到 一个介绍页面,其中的内容是 用户在看到

    当心这种做法。搜索引擎可以将此解释为 Cloaking .

    斗篷是一个黑帽子搜索引擎 优化(SEO)技术 发动机卡盘和那个不一样 呈现给用户的浏览器。

    我想知道你对这种做法的意图,以及是否有其他适合你需要的选择。

        5
  •  0
  •   Enriquev    15 年前

    首先,我不知道搜索引擎对javascript有何反应,但类似的东西能起作用吗?

    呼叫 mydomain.com/wp-pass.php?post_password=mypassword&Submit=Submit

    添加以下2个js函数:

    function gup( name ){  
     name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");  
     var regexS = "[\\?&]"+name+"=([^&#]*)";  var regex = new RegExp( regexS );  
     var results = regex.exec( window.location.href );  
     if( results == null )    
      return "";  
     else    
      return results[1];
    }
    
    function setPassword()
    {
    
     var password = gup('post_password');
     var passField = document.getElementByName('post_password');
     var buttonSubmit = document.getElementByName('Submit');
    
     if(password != "")
     {
      passField.value = password;
      buttonSubmit.Click();
     }
    
    }
    

    OnLoad="setPassword();"

    我不知道机器人对此有何反应。。。

        6
  •  -1
  •   Nicholas Wilson    15 年前

    我认为前面的答案比他们需要的要复杂得多。

    (很抱歉,如果这个背景是多余的,但从你的问题似乎值得一提:HTTP支持URL上的各种方法;邮递是开着的,GET是另一个。正常获取url时,如使用<a>元素,您正在使用GET方法。)

    我同意没有必要修改核心文件,用$请求替换$POST。您需要的是使用POST方法的link元素。为此,请制作一个简单的表单,如下所示:

    <form action="your url" method="POST">
        <input type="hidden" value="my_password" name="password"/>
        <input type="submit" value="Submit" name="submit">
    </form>
    

    您可以添加style=“border:0;背景:透明依此类推到第二个输入,使它看起来像一个正常的链接,如果你想。这有点麻烦,但只要您需要使用POST方法发送链接,就可以正常工作。

    另外,使用Wireshark检查POST变量是浪费时间。安装Firebug FF扩展并使用网络面板。它将大大加快解决这类问题的速度。