web-dev-qa-db-ja.com

パスワード保護されたプロファイルビュー

私はバックエンドのユーザープロファイルページを拡張し、各ユーザープロファイルにお気に入りの映画、誕生日などのデータ用のいくつかの追加のカスタムフィールドを格納できるようにしました。出会い系サイトを作成する、それがより多くの分野が必要とされる理由です。適切なコードを持っている人は、フロントエンドでこれらのプロファイルを見ることができます。エントリコードは基本的にはランダムコードと最後の番号としてのユーザーIDです。 PHP部分文字列を使用すると、ユーザーIDが取得され、アクセスが許可されます。コードを参照してください。

if(empty($_REQUEST['enterCodeId'])){
            echo "<script>
                location.replace('".$_SERVER['HTTP_REFERER']."'); 
                </script>";
    }else{
            $getId=substr($_REQUEST['enterCodeId'], 4, 10);
            $querystr ="SELECT ID FROM wp_prefixcode_users WHERE ID='".$getId."'";
            $querystrChecking = mysql_query($querystr);
            if(mysql_num_rows($querystrChecking)<=0){
                echo "<script>
                location.replace('".$_SERVER['HTTP_REFERER']."'); 
                </script>";
            }
            $uploads = wp_upload_dir(); 
        //
    }

この設定は理想的ではありません。プロファイルページからコードを追加することはできません。追加のget_the_author_meta()で修正できますが、パスワードを生成するより良い方法が必要です。同じユーザーID番号.

ユーザーが新しいアクセスキーを再生成できるように、ダッシュボード>ユーザー>ユーザープロファイルから自動的にアクセスパスワードを生成するオプションをユーザーに与えるにはどうすればよいですか。これが必要なので、他のユーザーに与えられたアクセス権を取り消すことができます。新しいキーを生成し、それをデータベースのauthor_metaフィールドとして保存するには、PHP関数が必要です。

解決策

Toschoと他の開発者のおかげで、私はこのコードをすべてロードすることができました。 functions.phpに私が追加しました:

add_action( 'init', 'accesskeygen_func' );

function accesskeygen_func() {
    $phpfile = explode('/', $_SERVER['PHP_SELF']);
    $phpfile = $phpfile[count($phpfile)-1];

    if (($phpfile=='profile.php') && isset($_GET['accesskeygen'])) {
        echo wp_generate_password();
        exit;
    }}

そして

<!-- begin access key -->
<tr>
<th><label for="myaccesskey"><?php _e("Access Key"); ?></label></th>
<td>
<input type="text" name="myaccesskey" id="myaccesskey" value="<?php echo esc_attr( get_the_author_meta( 'myaccesskey', $user->ID ) ); ?>" class="regular-text" /><br />
<span class="description">
    <input type="button" class="button-secondary" id="myaccesskeygen" value="Generate Access Key"/>&nbsp;
    <?php _e("Please click the button generate access key."); ?>
</span>
</td>
</tr>
<!-- end access key -->
1
rhand

パスワードを生成するにはwp_generate_password()を使います。たとえば、AJAXごとに新しいパスワードを取得するためのボタンをユーザープロファイルに追加できます。

現在のコードにセキュリティ上の脆弱性があります。$getId、訪問者のリクエストからのサブストリングに悪意のあるコードが含まれている可能性があります。常に要求データをエスケープします。詳細については、 データ検証 を参照してください。特に $wpdb->prepare() が役に立ちます。

1
fuxia