次の要件を満たすGET変数を使用して、保護された投稿のパスワード形式を回避します。
コアに変更はありません
機能はプラグインに組み込まれており、そのまま使用できるので、これは簡単なことではありません。コアファイルを変更するI found some methods 。
パスワードがはっきり見えない
http://example.com/post?pwd=mypassword
の代わりに、URLはhttp://example.com/post?pwd=%25P%25BaxfPUloy8YdOFi2F9F2xAcCg8OLGP
のようなものにしてください。
セキュリティ上の問題はありません
もちろん、これはどういうわけか「ハッキング」されるべきではありません。それらは保護された投稿にすぎませんが、それにもかかわらずこれは絶対にありません。
必要なもの:
URLに追加されたハッシュを取得する方法:
$url = add_query_arg(array(
'pwd' => get_my_hash();
), get_permalink($post_id));
そして、ページテンプレート上でコード:
if(post_password_required()){
if(isset($_GET['pwd'])){
if(check_pwd_with_hash($_GET['pwd'])){
//unlock content
}
}
}
the_content();
post_password_required()
メソッドにフックする方法や、グローバル$post->post_password
を空の文字列に設定する方法はありません。
投稿パスワードのチェックは(何らかの理由で)get_the_content()
内で行われます。これはseems合法ですが、実際には2つの別個の懸念事項が混在しています。パスワードフォームを表示するget_the_content()
を回避する方法はないという声明は正しかった。パスワードのチェックがコアで詳細に行うことは次のとおりです。
if ( empty( $post->post_password ) )
return false;
if ( ! isset( $_COOKIE['wp-postpass_' . COOKIEHASH] ) )
return true;
require_once ABSPATH . WPINC . '/class-phpass.php';
$hasher = new PasswordHash( 8, true );
$hash = wp_unslash( $_COOKIE[ 'wp-postpass_' . COOKIEHASH ] );
if ( 0 !== strpos( $hash, '$P$B' ) )
return true;
return ! $hasher->CheckPassword( $post->post_password, $hash );
ご覧のとおり、パスワードはユーザーのマシンに保存されているCookieに対してチェックされます。
投稿パスワードを回避するには、実際にこのCookieを設定してユーザーに明示的な許可を与える必要があります。コアは次の方法でそれを行います。
setcookie(
'wp-postpass_' . COOKIEHASH,
$hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ),
$expire,
COOKIEPATH
);
(プレーンテキストパスワード)を取得するために使用される the_post_password()
を見ると、ユーザーの安全のために引数をエスケープする以外に何も実行されていないことがわかります。
esc_attr( $post->post_password )
これで、これを組み合わせてCookieを設定できますbeforeテンプレートにコンテンツを表示します。
// Your custom check for the `$_GET` content
// …also check if there in fact is a password
// …and if the user is a repeated visitor, do not set the Cookie again
if (
isset( $_GET['circumvent'] )
and 'disable-pass' === $_GET['circumvent']
and isset( $post->post_password )
and ! isset( 'wp-postpass_'.COOKIEHASH )
) {
// Finally we use the plain text password to set the Cookie
// as if the user would have entered it into the password form
setcookie(
'wp-postpass_'.COOKIEHASH,
$hasher->HashPassword( wp_unslash( esc_attr( $post->post_password ) ) ),
$expire,
COOKIEPATH
);
}
// Now display the content:
the_content();
追加 information この記事の投稿パスワードについてこの概念の多くはほとんど知られていないので、これらの詳細の一部を説明することをお勧めします。