• ベストアンサー

PHPによるシステム(有償)を無断でコピーおよび実行されたくないのですがどうすればいいでしょうか?

PHP4を使いまして、 ある簡単なウェブ上のシステムを作りました。 で、それを不特定多数の多数に有償で設置したいと思っています。 設置作業も私が行うため、設定ファイルなどで書き換えが生じる可能性があります。 動作環境はLinux上限定です。 で、そのシステムを配置するURLは、 (1)「http://www.example.com/」 (2)「http://www.example.com/foo/」 (3)「http://www.example.net/bar/」 (4)「http://www.example.org/bar/hoge/」 のように多数ある訳ですが、ユニークです。 そこで、問題なのですが、 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 前例の(1)、(2)のサイトにのみ設置した状態で、 これらのソースをそのまま(3)や(4)にコピーされて、動くと困ってしまいます。 どうにかうまい策はないでしょうか? ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 「そのシステムを配置するURL」がユニークなので、 「その文字列」と、「マスターパスワード(当然配布しません)」、および、md5を使えば、 いけるようなきがしたのですが、 いまいちロジックが思いつきません。 以下のようなものでは、意味がないですよね? ================================================================================== <?php $str = $_REQUEST['url'] . 'master_password_hogehoge'; print md5($str): exit; ?> というようなスクリプトで、 文字列(仮に、「1f3870be274f6c49b3e31a0c6728957f」とします)を生成しておいて、 各サイトに配布する設定ファイルに、 <?php require_once('1f3870be274f6c49b3e31a0c6728957f' . '.php'); ?> と書く。 ================================================================================== これでは、「1f3870be274f6c49b3e31a0c6728957f.php」をリネームされ、 require_once('1f3870be274f6c49b3e31a0c6728957f' . '.php');の部分も文字列を変更されれば、意味ないですよね? 前述のような、 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ 前例の(1)、(2)のサイトにのみ設置した状態で、 これらのソースをそのまま(3)や(4)にコピーされて、動くと困ってしまいます。 どうにかうまい策はないでしょうか? ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ を実現させるロジックはないものでしょうか? (md5を使わなくてもかまいません。) お助け願えれば幸いです。

  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

参考URLにPHPスクリプトを暗号化しライセンス管理できる製品があります。 高額ですが、業務で使われるのなら考えてみてはいかがでしょうか。

参考URL:
http://www.zend.co.jp/products/guard/index.php
daisuke_ja
質問者

お礼

ありがとうございます。さすがzendさんですね。 ちょっと直近のプロジェクトには、高額なため(^ ^;、使えませんが、 後々、必要になる場面があるかと思います。 貴重な情報ありがとうございました。

その他の回答 (1)

回答No.2

完璧は難しいかもしれませんが、とりあえずホスト情報、スクリプトファイルの位置等の情報を書いておけばある程度いける気がします。 $h = crypt($_SERVER["HTTP_HOST"],$str); $f = crypt($_SERVER["SCRIPT_FILENAME"],$str); としたとき、例えば $h = "abP9I.Amiwiq."; $f = "abm2Wav/Iw9FU"; というキーをスクリプトに書いておいて、それと一致した場合だけ動くようなスクリプトにすれば良いと思います。 まぁ、書き換えられたらどうしようもないですが(笑。 DB接続する場合、暗号化されたキーをDBにに保管しておけば比較的わかりにくくなると思います。いずれにせよ、そのままコピーでは使えないようにはなると思います。 また、キーやキーワードを外部ファイルとして管理者サーバに保管して、アクセス制限をかけておけば(PCブラウザからはアクセスできない等)、かなり分かりにくいかもしれません。 いずれにせよ、ソースを読みこなせば最後は分かってしまうので、これに加えて#1さんの方法のようにzendでコンパイルすればほぼ完璧じゃないかと思います。 コンパイルと言えば、キー部分だけを外部スクリプトとしてC等で作成してコンパイルしてしまえばソースを見ることが出来ないので良いかもしれませんね。 参考まで。

daisuke_ja
質問者

お礼

ありがとうございます。 なお今回はどのphpファイルでも必ずinit.phpというファイルを「require_once」していので >$h = crypt($_SERVER["HTTP_HOST"],$str); >$f = crypt($_SERVER["SCRIPT_FILENAME"],$str); でなく、$h = crypt($_SERVER["HTTP_HOST"],$str);だけでいいと思います。同じホストに複数のシステムを設置することは想定してません。 で >$h = crypt($_SERVER["HTTP_HOST"],$str); >としたとき、例えば、 >$h = "abP9I.Amiwiq."; >というキーをスクリプトに書いておいて、それと一致した場合だけ動くようなスクリプトにすれば良いと思います。 とのことですが「それと一致した場合だけ動くようなスクリプト」という部分の書き方がわかりません。 例を、公式サイトの「crypt関数のページ」から抜粋しますと(http://au2.php.net/manual/ja/function.crypt.php) <?php $password = crypt("My1sTpassword"); // saltを自動的に生成 /* 異なったハッシュアルゴリズムが使用された際の問題を避けるために crypt()の結果全体をパスワード比較用のsaltとして渡す必要があります。 (上記のように標準DESに基づくパスワードハッシュは2文字のsaltを使用します が、MD5に基づくハッシュは12文字のsaltを使用します) */ if (crypt($user_input, $password) == $password) { echo "Password verified!"; } ?> とあるのですがこのロジックが分かりません。 「"My1sTpassword"」の文字列が、私の言う「マスターパスワード(当然配布しません)」ですよね?でもそれをcryptしてさらにそれをsaltとしてcryptたものが、「マスターパスワード(当然配布しません)」と一致した場合、OKとみなす?というのがさっぱり… どうか、お助けくださいませ。 なお、もっとお礼をかきたいのですが、文字数制限に引っかかるので、補足欄に書かせていただきます。

daisuke_ja
質問者

補足

恐縮ですが、この補足欄を使って、お礼(というか質問だらけですが・・・すみません)のつづきを書かさせていただきます。 >また、キーやキーワードを外部ファイルとして管理者サーバに保管して、アクセス制限をかけておけば(PCブラウザからはアクセスできない等)、かなり分かりにくいかもしれません。 言葉足らずですみません。質問中の「マスターパスワード(当然配布しません)」は、管理者サーバに保管するという意味合いでした。すみません。 >コンパイルと言えば、キー部分だけを外部スクリプトとしてC等で作成してコンパイルしてしまえばソースを見ることが出来ないので良いかもしれませんね。 このの「キー部分」というのは、 「キーが合致するかを判断するロジックの数行の部分」で、それを別ファイルにして、「reqire_once("コンパイルされたファイル");」というようにするということでしょうか? 質問ばかりで恐縮ですがお答えいただけましたら、とても幸いです。 どうか、よろしくお願い申し上げます。

関連するQ&A

  • PHP 5.2.5 で教えてください

    TurbolinuxnにPHP 5.2.5をインストールしたいのです。 http://php.net/downloads.php#v5 プログラムを上記アドレスからダウンロードをしたいのですが 下記のように2つあります。 PHP 5.2.5 (tar.bz2) [7,591Kb] - 08 November 2007 md5: 1fe14ca892460b09f06729941a1bb605 PHP 5.2.5 (tar.gz) [9,739Kb] - 08 November 2007 md5: 61a0e1661b70760acc77bc4841900b7a 違いは何ですか?どちらをインストールすればよろしいのでしょうか? 教えてください。

  • 森山直太朗の「レスター」のレスターって誰?

    森山直太朗の「レスター」という曲があります。 途中で唐突にレスターという人物がでてきます。 これは何者なんでしょうか? さっぱり分りません。 http://www.utamap.com/showkasi.php?surl=B03948&title=%A5%EC%A5%B9%A5%BF%A1%BC&artist=%BF%B9%BB%B3%C4%BE%C2%C0%CF%AF&ss=%BF%B9%BB%B3%C4%BE%C2%C0%CF%AF%2F%B8%E6%C5%CC%C4%AE%C2%FC&sk=%BF%B9%BB%B3%C4%BE%C2%C0%CF%AF どなたか教えてください。

  • excel 2つの条件(続き)

    ​http://okwave.jp/qa5054165.html​ の続きですが、    A   B  C  D  E  F   G 1  あ   3  22    4  15  ? 2  い   4  15    4  10  ? 3  う   2  10 4  え   4  10 E1に=LARGE(B1:B4,1) E2に=LARGE(B1:B4,2) F1とF2に{=MOD(LARGE(B1:B4*(MAX(C1:C4)+1)+C1:C4,ROW(B1:B4)),MAX(C1:C4)+1)} をいれました、画像のようにG1とG2に対応したA列を表示させるにはどうすれば良いでしょうか? よろしくお願いします。 

  • VBA 他シートを参照しているセルのコピー

    お世話になります。 以下のシートがあります。 [sheet a]    A     B        C      D     E 1 2004 2005 2006 2007 2008 2 =b!A2 =b!C2 =b!E2 =b!G2 =b!I2 3 10 15 16 4 11 4 12 30 20 9 2 5 =SUM(A3:A4) =SUM(B3:B4) =SUM(C3:C4) =SUM(D3:D4) =SUM(E3:E4) [sheet b] A B C D E  F G H I J 2004 2005 2006 2007 2008 1 あ1 い1 う1 え1 お1 か1 き1 く1 け1 こ1 2 あ2 い2 う2 え2 お2 か2 き2 く2 け2 こ2 ・・・・・・・・・ [sheet a]F列以降に入れるデータは、VBA(マクロ)を使って、別のブックから取り出しています。 (例) F1…=E1+1(E1の数式をコピー) F3,F4…任意の値(別のブックからコピー) F5…=SUM(F3:F4)(E5の数式をコピー) 1行目,5行目の場合は左のセルをコピーして数式を貼り付けると、列が自動的に列が変わりますが、2行目の場合は元のシートを1行おきに参照しているので、単純にコピーしただけでは正しい数式が入りません。 2行目の参照をVBAで作るには、どのようにしたらいいでしょうか。 よろしくお願いします。

  • エクセルで斜めに参照コピー

    1| A1 | B1 | C1 | D1 | E1・・・ 2| A2 | B2 | C2 | D2 | E2・・・ 3| A3 | B3 | C3 | D3 | E3・・・ 4| A4 | B4 | C4 | D4 | E4・・・ ・・・ と普通に並んでいるデータを 1| A1 | B2 | C3 | D4 | E5 |・・・ 2| = | A2 | B3 | C4 | D5 | E6 |・・・ 3| = | = | A3 | B4 | C5 | D6 | E7 |・・・ ・・・ (=は空白セル) とななめに参照コピーさせたいのですが、普通にドラッグコピーさせたのではうまくいきません。データ数が結構多いもので一つ一つコピーするのも大変です。何か簡便な方法はあるでしょうか?列毎もしくは行毎の作業でもいいので、何か良い方法がありましたらご教示いただけませんでしょうか?

  • PHP5でクラス定数が使えますが

    PHP5でクラス定数が使えますが 以下のようにFで A + Eや A | Eなどとすると、 Parse errorとなります。 クラス定数は数値、文字列、配列のみで、組み合わせは不可という仕様で良いのでしょうか? PHP5の仕様書というものはネット上で存在しているのでしょうか? 英語でも構いませんので、ご存知の方教えてください。 class Test { const A=1; const B="2"; const C=array(3); const E=4; const F=A+E; // ここでエラー } この場合の対策ですが、素直にPHP4のように defineを使えば良いでしょうか?

    • ベストアンサー
    • PHP
  • テキストファイルのデータをエクセルへコピーのやり方

    よろしくお願いします。 エクセル2000を使っています。 テキストのデータで A1/B1/C1    /はスペースです。 D1/E1/F1    データの長さは全部違います。 A2/B2/C2     D2/E2/F2 A3/B3/C3     D3/E3/F3      ・    ・(続く) といったものがあります。これをエクセルで    A列 B列 C列 D列 E列 1行 A1 B1 C1 D1 E1 2行 A2 B2 C2 D2 E2  ・・・ 3行 A3 B3 C3 D3 E3  (続く)          ・          ・(続く) という感じで別々のセルにいれて貼り付けしたいのです。 テキストデータを別々のセルに貼り付けする方法は 過去ログで「区切り位置」というのをつかえばいいというのはわかりましたが、この場合の複数行にわたるテキストデータをエクセルの1行に貼り付けする方法がわかりません。また、データの長さが違うために「区切り位置」もうまくいきません。 良い解決法をお願いします。

  • Excelのマクロの組み方を教えてください

    3行と2列のデーターの塊があり、これを 1行のデータに並べ替えるにはどうしたらいいでしょうか? ただし 行方向(縦に) 30件、列方向(横に) 20件ほど入っていて、複雑です。 空白の行や列はないものと考えていただいて結構です。 詳細説明 A1からCB1はタイトルなどが入っていて、無視して、 データーの配列が以下の場合 A2 B2 C2 D2 E2 F2 →CB2まで A3 B3 C3 D3 E3 F3 →CB3まで A4 B4 C4 D4 E4 F4 →CB4まで A5 B5 C5 D5 E5 F5→CB5まで A6 B6 C6 D6 E6 F6→CB6まで A7 B7 C7 D7 E7 F7→CB7まで ↓ ↓ ↓ ↓↓ ↓ A120まで CB120まで を A2 A3 A4 B2 B3 B4 C2 C3 C4 D2 D3 D4 ↓ CA2 CA3 CA4 CB2 CB3 CB4 次に A5 A6 A7 B5 B6 B7 C5 C6 C7 D5 D6 D7 ↓ A118 A119 A120 B118 A119 A120 などと並べかえはどのようにマクロを組めばよいですか?

  • Excelのセルにおける変則的なコピー

    VBAを使わずにこんなことができますか? いい方法があれば教えて下さい。 言葉でしか伝えられませんが、これでやりたいことがわかっていただけますでしょうか? 1.[Sheet1]のA列~E列に数値が入力されているとします。 2.これを[Sheet2]に1行を2行に分割しながら貼り付けたいんです。 ・[Sheet1]A1~C1を[Sheet2]A1~C1へ、[Sheet1]D1~E1を[Sheet2]B2~C2へ。 ・[Sheet1]A2~C2を[Sheet2]A3~C3へ、[Sheet1]D2~E2を[Sheet2]D4~C4へ。 ・[Sheet1]A3~C3を[Sheet2]A5~C5へ、[Sheet1]D3~E3を[Sheet2]B6~C6へ。 ・ ・ ・ イメージはこんな感じです。 実際にはA列からDC列まで100行程あるものを、4行ずつに分割したいんです。 2列に分ける方法の応用でできると思っているのですが、いかがでしょうか? どうかよろしくお願いします。

  • include_onceで呼び出したPHPファイル

    PHPでサイトを組んでいるのですが、include_onceで以下のようにPHPの各ファイルを呼び出して実行しているのですがうまくいきません。 <?php //レンタルサーバーのcronを利用して、定期的に走らせるコードです。 include_once "example_a.php"; include_once "example_b.php"; include_once "example_c.php"; ?> 各ファイルは、RSSで読み込んだデータをMySQLに格納するプログラムです。 個別で各ファイルを実行すると正しい結果となりますが上記のようなプログラムでまとめて実行するとexample_a.phpは正しい結果となりますが、example_b.php、example_c.phpは正しく処理されません。 原因として考えられるものがあれば、教えていただきたいと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP