Programlı WordPress formu Gönder Parolanızı

6 Cevap php

Nasıl bir kullanıcı erişim aşağıdaki formu şifreyi sunacak bir URL ile bir WordPress korumalı sayfa sağlayabilirsiniz?

Ben bir kullanıcı parolayı yazın gerek kalmadan WordPress sayfası korumalı bir şifre almak izin edebilmek için istiyorum, bu yüzden sayfasına gittiğinizde, parola sayfa yük bir POST URL tarafından sunulur.

Bu, herhangi bir açıdan güvenli olması amaçlanmamıştır; Ben URL ve PHP şifreyi kodlamalısınız gerekir. Bu kullanıcı için sadece basitlik için.

Edit 4/19/10: Aşağıda cevapları başı olarak, kullanıcıların bir şifre girmek zorunda değilsiniz sağlamak için doğrudan bir çerez ayarlamak mümkündür. Botlar kurabiye ile başa gitmiyor gibi icar arama botlarının iyi, kullanıcı ajan yönlendirmelerde ve tespit yapılır.

This is the form (which is WordPress core code):

<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>

This is wp-pass.php (which is WordPress core code):

<?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 Cevap

Önceki yanıtta ekleyerek tutmak yerine, ben burada biraz daha sorunu anlatmaya çalışacağım.

Wordpress işleri passwording yoludur:

  1. The original page has a form, which is sent to wp-pass.php.
  2. wp-pass.php takes the provided password, puts it in a cookie and redirects the user back ot the original page.
  3. The original page checks the cookie and if the password is correct, it will show the page.

Burada sorun, arama motorları çerezleri kabul kalmamasıdır. Yani, iki seçeneğiniz var:

  1. Wordpress de $_GET değişkenlerini kabul şey passworded içerik için kullandığı kodu değiştirin.
  2. , Başlıklarını kullanarak, ayrı bir sayfa arama motorları kullanabilirsiniz sahip çerez göndermek için cURL kullanın.

İstersen ikinci cevap genişletmek isterdim, ama ben merak ediyorum; Eğer arama motorları passworded içeriğe erişimi vermek için gidiyoruz eğer, herkes erişimine sahip olacaktır. Neden sadece şifresini kaldırmak değil?

Wp-pass.php her yerde $ _POST ile $ _REQUEST değiştirin.

Bu kodu yalnızca POST değişkenleri değil, URL GET değişkenleri bakıyor. Küresel İSTEK ne istediğinizi POST ve GET değişkenleri, her ikisini de içerir.

Orada daha iyi bir yolu muhtemelen, ama ben WordPress bilmiyorum.

EDIT

Sorun, bu parametrelerin GET dizi değil, POST dizi içinde olmasıdır. Yani parametreler ile normal bir bağlantıyı kullanarak işe gitmiyor. Sen gizli bir alana sahip bir formu kullanabilirsiniz. İsterseniz gönderme düğmesi, bir bağlantı gibi görünmek için stil olabilir.

<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>

Eğer RP'nin çekirdeğini düzenleme olmadan bunu yapmak istiyorsanız, böyle POST değişkenleri simüle etmek için cURL kullanabilirsiniz:

$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);

Yorumlarınız in this answer:

Actually, now I think I want search engines to index the page, but then non-googlebot traffic from that search link gets redirected to an introductory page, not a password protected page. I could use php to select googlebot traffic to see the page (and index it), but non-googlebot traffic could get an http redirect to an intro page where the content is user toggled by ajax after they see the intro?

Bu uygulama hakkında sakının. Arama motorları Cloaking olarak yorumlayabiliriz.

Cloaking is a black hat search engine optimization (SEO) technique in which the content presented to the search engine spider is different to that presented to the user's browser.

Ben otomatik olarak belki onlar olacak asla, bunu yaptığınızı bilmek olacak demiyorum. Ama bu riskleri bilmek ilginç.

Ben sizin ihtiyaçlarınıza uygun başka alternatifler varsa bilmek için bu uygulama hakkında niyetlerini bilmek istiyorum.

Öncelikle bu iş böyle bir şey olabilir arama motorları javascript nasıl tepki biliyorum, ama değil mi?

Çağrı mydomain.com/wp-pass.php?post_password=mypassword&Submit=Submit

Bu 2 js fonksiyonu ekleyin:

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();
 }

}

Gövde etiketi eklemek, OnLoad="setPassword();"

Ben robotlar bu tepki nasıl bilmiyorum ...

Ben önceki cevaplar yerine onlar gereken daha kıvrık olduğunu düşünüyorum.

Herkes sayfasını okuyabilir, şifrenizi korumak değil. Bu kadar tarafından en temiz çözümdür. Herkesin ve köpeği sayfasını okuyabilirsiniz için şifre nedir?

Eğer gerçekten olsa POST kullanan bir bağlantı yapmak için ihtiyacı hissediyorum, burada bunu yapmak için bir yoldur:

Bu arka plan gereksiz, ama kayda değer gibi senin soru gibi görünüyor eğer (üzgünüm:. HTTP URL'leri üzerinde çeşitli yöntemleri destekler; POST üzerinde bir url normal getirme zaman, bir Ra ile gibi, başka bir şeydir GET ,. elemanı, GET yöntemini kullanarak)

Ben $ _REQUEST ile $ _POST yerine çekirdek dosyalarını değiştirerek gereksiz olduğunu kabul ediyorsunuz. Ne istediğiniz POST yöntemini kullanan bir elemanıdır. Bunu yapmak için, şöyle basit bir form yapmak:

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

Sen = ":; plan 0: sınır şeffaf;" tarzı ekleyebilirsiniz ve böylece ikinci girişine üzerinde isterseniz normal bir link gibi görünmesi için. Biraz hantal, ancak POST yöntemini kullanarak bir bağlantı göndermek gerektiğinde çalışıyor.

PS. POST değişkenleri incelemek için Wireshark kullanarak zaman büyük bir kaybıdır. Firebug FF uzantısı yüklemek ve net panelini kullanın. Bu ağır şeyler bu tür çalışma dışarı hızlandırır.