2

開発中のページを保護したい。問題は、人々がそのリンクを共有していることです。カスタム リンクをユーザーに手動で提供し、ユーザーが使用する IP を保存してから、リンクが別の IP で再利用されるのを防ぎたいと思います。wordpressを使っていて、守りたいサイト全体です。また、誰が URL を共有したかを追跡する方法はありますか?

例:

このhttp://exemple.com/abcを友人に提供します。このリンクは、ユーザーが最初に使用された IP を使用している限り機能します。そのユーザーがそのリンクを他の誰かと共有した場合、または別の IP がその URL を使用してサイトにアクセスしようとした場合、何らかの方法でログに記録したいと思います。

4

1 に答える 1

1

これは比較的複雑で、すべてのコードを書く時間がないので、いくつかの基本的なアドバイスをします :) .

最初にプレーンな管理ページを追加する必要があります。このページでは、最初に<form>テキスト フィールドと送信フィールドを追加します。テキスト フィールドは、共有するページの URL を入力する場所になります。

オプションもデータベースに保存されます (後で作成します)。後で URL を追加する配列にする必要があります。

URL を送信すると、この URL の nonce が作成されます。これは一意である必要があります (たとえば、使用できuniqid()ます)。次に、次のように URL を配列に格納します。

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
    $urls = get_option( 'my_custom_links', array() );

    $id = uniqid();

    $urls[ $id ] = array(
        'url' => $_POST['my_url'],
        'ip' => '',
    );

    // Update the links.
    update_option( 'my_custom_links', $urls );
}

$urls = get_option( 'my_custom_links', array() );

// Display the form here...

// Display the URL's data
foreach ($urls as $id => $data) {
    echo '<p>URL: <strong>' . $data['url'] . '</strong><br />Share URL: <strong>' . add_query_arg( 'n', $id, home_url( '/' ) ) . '</strong>' . ( $data['ip'] ? '<br />Accessed from IP: <strong>' . $data['ip'] . '</strong>' : '' ) . '</p>';
}

次に、次のように、ユーザーが特定の URL の表示を許可されているかどうかを確認する関数を追加する必要があります (コードを に追加しますfunctions.php)。

function my_site_protection() {
    global $pagenow;
    // If we're not on admin or login page and the user is not logged-in
    if ( ! is_admin() && 'wp-login.php' != $pagenow ) {
        $login_redirect = true;
        if ( isset( $_GET['n'] ) && $_GET['n'] ) {
            $n = $_GET['n'];
            $urls = get_option( 'my_custom_links', array() );
            $data = isset( $urls[ $n ] ) ? $urls[ $n ] : false;
            if ( $data ) {
                if ( ! $data['ip'] || $data['ip'] == $_SERVER['REMOTE_ADDR'] ) {
                    // If no IP is set, set it and update the option
                    if ( ! $data['ip'] ) {
                        $urls[ $id ]['ip'] = $_SERVER['REMOTE_ADDR'];
                        update_option( 'my_custom_links', $urls );
                    }
                    if ( add_query_arg( 'n', $id, $data['url'] ) == curPageURL() ) {
                        // Don't redirect if we're on the correct page
                        $login_redirect = false;
                    } else {
                        // Redirect the user to the proper URL
                        wp_redirect( add_query_arg( 'n', $id, $data['url'] ) );
                        exit;
                    }
                }
            }
        }
        // Redirect user to log-in screen
        $login_redirect && auth_redirect();
    }
}
add_action('init', 'my_site_protection', 1);

function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {
        $pageURL .= "s";
    }
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}

あとは自分で考えないといけないけど、ほとんどのものは渡したので、ちょっと見回せばなんとかなる。

PP: コードをテストしていませんが、理論上は動作するはずです。動作しない部分があれば教えてください。

于 2012-11-26T10:55:00.850 に答える