最近、WordPress テーマをどのように認証するかについて考えてみました。最初は、JS でドメインを判定する方法によって認証を実現しようと思いましたが、JS 認証 は簡単に突破されてしまい、要素を検証するだけで簡単に確認できるため、この考えはすぐに否定しました。次に、PHP 認証 を検討しました。この方法は比較的安全です。PHP には複数の暗号化方法があり、突破するにはより多くの時間と労力が必要となるため、多くの人がテーマの解析を試みるのを効果的に防ぐことができます。

以下は PHP によるドメイン認証 の考え方です。

1つ目:クラウド側でドメイン認証を検証する

クライアント側のコード:

<?php
$shouname = trim($_SERVER['SERVER_NAME']);  // 获取域名
$shouurl = file_get_contents('https://www.ikxin.com/shouquan.php?domain='.$shouname);  // 获取服务端授权文件
if(!empty($shouurl)){
    echo "已授权!";    // 授权成功
}else{
    die("未授权!");    // 授权失败
}
?>

サーバー側のコード:

<?php
$domain = $_GET['domain'];                                // 获取域名
$Array = array('127.0.0.1','localhost','www.ikxin.com');  // 授权域名列表
echo in_array($domain, $Array) ? 'yes' : '';              // 校验结果
?>

説明:

  • ドメイン認証コードは関数にカプセル化したり、暗号化処理を行ったりすることができます。
  • 一般的な PHP の暗号化 方法には、Zend、mzphp2、ionCube などがありますが、いずれにも一定の解析方法があります。認証するドメインが多い場合は、プロジェクトにドメインフィールドを追加し、ドメインをデータベースに保存して読み取りと検証を行うことができます。

2つ目:独立してドメイン認証を検証する

<?php
function allow_domain(){
    $is_allow = false;
    // 获取不带端口号的域名前缀
    $servername = trim($_SERVER['SERVER_NAME']);
    // 授权域名列表
    $Array = array("localhost", "127.0.0.1");
    // 遍历数组
    foreach($Array as $value){
        $value = trim($value);
        $domain = explode($value, $servername);
        if(count($domain) > 1){
            $is_allow = true;
            break;
        }
    }
    if(!$is_allow){
        die("域名未授权!");    // 授权失败
    }else{
        echo "域名已授权!";    // 授权成功
    }
}
allow_domain();
?>

使用方法

上記の方法では、1つ目 の使用を推奨します。1つ目の方法は管理しやすいためです。クライアント側のコードを WordPress テーマのグローバル PHP 関数ファイル に記述し、自分のサーバー側でドメイン認証を設定することができます。クライアント側の PHP ファイル も暗号化処理できます。もちろん、PHP コード の暗号化には一定の難しさがありますが、世界には絶対に復号できないコードは存在しません。