Ocolirea protecției prin parolă a unei postări sau pagini WordPress prin URL

23 ian. 2017, 16:37:17
Vizualizări: 15K
Voturi: 0

Am o pagină protejată prin parolă pe care aș dori să o fac accesibilă printr-un link personalizat cu parola ca variabilă GET în URL:

www.domeniu.tld/pagina-mea?code=parolamea

Am găsit acest articol despre ocolirea protecției prin parolă prin variabilă GET dar soluția nu funcționează.

Poți să mă ajuți să ocolesc formularul de parolă?

Mulțumesc,

0
Toate răspunsurile la întrebare 3
0
    add_filter( 'post_password_required', function( $returned, $post )
{
   
    if( $returned && ( $_GET['pwd'] ==  $post->post_password ) )
        $returned = false;
    return $returned;

}, 10, 2 );

**Legătură de bypass pentru pagina protejată cu parolă. Trebuie adăugat în fișierul de funcții al temei. Legătura ar trebui să arate astfel: https://www.example.com/post/?pwd=PAROLA

10 mai 2023 21:53:09
5

Puteți folosi același principiu ca în exemplul dat, dar înlocuiți $_GET cu $_POST. Astfel, veți avea ceva similar spre final:

// Verificarea personalizată pentru conținutul din '$_POST'
// ...de asemenea, verifică dacă există o parolă
// ...și dacă utilizatorul este un vizitator repetat, nu setați din nou Cookie-ul
if (
        isset( $_POST['circumvent'] ) 
        and 'disable-pass' === $_POST['circumvent'] 
        and isset( $post->post_password )
        and ! isset( 'wp-postpass_'.COOKIEHASH )
    ) {
    // În final folosim parola în text simplu pentru a seta Cookie-ul
    // ca și cum utilizatorul ar fi introdus-o în formularul de parolă
    setcookie(
        'wp-postpass_'.COOKIEHASH,
        $hasher->HashPassword( wp_unslash( esc_attr( $post->post_password ) ) ),
        $expire,
        COOKIEPATH
    );
}
// Acum afișați conținutul:
the_content();
23 ian. 2017 16:45:20
Comentarii

Bună, mulțumesc pentru răspuns. Am primit această eroare: PHP Fatal error: Call to a member function HashPassword() on a non-object in /home/test-user/public_html/wp-content/themes/default/template-landing-private.php on line 81

JCF JCF
23 ian. 2017 16:51:29

Poate fi necesar să adaugi global $hasher; la început. Altfel, poți să postezi întregul fișier?

fergbrain fergbrain
23 ian. 2017 16:56:52

/ Template Name: TEST /

if ( isset( $GET['code'] ) and 'mycustompassword' === $_GET['code'] and isset( $post->post_password ) and null !== 'wp-postpass'.COOKIEHASH //!isset( 'wp-postpass_'.COOKIEHASH ) ) { setcookie( 'wp-postpass_'.COOKIEHASH, $hasher->HashPassword( wp_unslash( esc_attr( $post->post_password ) ) ), $expire, COOKIEPATH ); }

get_header(); while ( have_posts() ) : the_post(); the_content(); endwhile; get_footer();

JCF JCF
23 ian. 2017 17:10:29

Te rog să postezi codul tău între ghilimelele inverse (`) pentru a fi formatat corect

fergbrain fergbrain
23 ian. 2017 17:17:12

Salut, îmi pare rău, am postat un răspuns mai jos cu codul complet. Mulțumesc!

JCF JCF
23 ian. 2017 17:23:12
0

în loc să folosești the_content(), utilizează echo apply_filters( 'the_content', $post->post_content ); mă pot înșela, dar cred că asta va ocoli complet formularul de parolă, apoi poți implementa propria logică simplă pentru a decide dacă să afișezi sau nu conținutul. În orice caz, recomand cu tărie să eviți această abordare dacă conținutul reprezintă date foarte sensibile. adică, sper că nu sunt informații personale ale cuiva. va trebui, de asemenea, să te asiguri că articolul are o parolă, astfel încât să nu apară în rezultatele de căutare, hărțile site-ului, fluxurile sau punctele finale ale API-ului WP JSON.

11 feb. 2018 06:26:07