ioncubeというphpファイルを難読化するソフトを買いました。Webサイトで使うphpファイルなどもエンコ-ドしているのですが、入力フォ-ムなどでhtml部分が出てきた場合、ブラウザからソ-ス表示するとhtml部分は表示されてしまいます。ioncubeの設定でphpファイルの中から出てくるhtml部分もブラウザから読み取れないようにできないものでしょうか。ご存知の方がおられましたら教えてください。ちなみに海外版を買っておりまして、日本の代理店に質問できないのです。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2016/01/12 08:13:46
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:ykhpno1

またはioncubeについて詳し~く解説してあるサイトの紹介をしていただくのも有難く、ポイントを差し上げます(日本語での解説)。

公式の日本語マニュアルはすでに持っているのですが、大変不親切でわかりづらいのです。

ベストアンサー

id:braahmaNa No.2

回答回数23ベストアンサー獲得回数9

ポイント300pt

フォームから送信されたデータを$_POSTや$_GETで受け取ってデータ作成等の処理を行いますよね?
その受け取った時点でデータが正常かどうか検査するのがバリデーションです。
ver1のプログラムにはnameがaというプルダウンが有り、
そのaからはa1,a2...a5の値しか来る筈が無い場合は下記の様なコードになります。

$is_valid = FALSE;
$valid_array = array( "a1","a2","a3","a4","a5" );
foreach ( $valid_array as $val ) {
if ( $_POST[ "a" ] === $val ) {
$is_valid = TRUE;
break;
}
}
if ( $is_valid ) {
// 正しい値の場合の処理
}
else {
// 不正な値の場合の処理
}

これをykhpno1さん作成のプログラム毎のプルダウンのパターンに当てはめて書けば良いと思います。

パターンというのは、

プログラムver1は、aというプルダウンからa1~a5、bというプルダウンからはb1~b5の値以外は受け取らない
プログラムver2は、bというプルダウンからb1~b5、cというプルダウンからはc1~c5の値以外は受け取らない

というルールになっていると仮定して、
ver1に、ver2では受け取れるc1~c5の値が来た場合は、不正な値として弾くという事です。
上記例で言うと、プルダウンaかbにc1~c5の値が入っている時ですね。

バリデーションについては下記が参考になると思います。
http://qiita.com/mpyw/items/346f1789ad0e1b969ebc

id:ykhpno1

ありがとうございます、この考え方で問題は解決できると思います!
助かりました、ありがとうございます。

2016/01/12 08:12:20

その他の回答1件)

id:braahmaNa No.1

回答回数23ベストアンサー獲得回数9スマートフォンから投稿

プルダウンメニューの項目が違うだけで、あとは全部同じPHPプログラムが有るって事ですか?
んでそのプルダウンメニューの違いに応じて「ソフトのバリエーション」としてる、という事でしょうか?
PHPの暗号化が出来てて、フォームのコピペに依る不正データ使用(ver1でver2)のデータを防ぐだけで良いのでしょうか?

上記前提が全てyesなのであれば、
PHPでリクエストのバリデーションすれば良いのでは無いでしょうか。
ver1にはver1のデータしか受け付けない、
ver2にはver2のデータしか受け付けない、
という様なコードをそれぞれのバリエーション毎に埋め込んでやれば良いと思います。

id:ykhpno1

回答いただきありがとうございます。
前提は全てYESです。
受け付けるデ-タを絞るコードをそれぞれのバリエーション毎に埋め込んでやれば良い、ということですが、参考URLなどを教えていただけませんでしょうか。

2016/01/11 06:55:34
id:braahmaNa No.2

回答回数23ベストアンサー獲得回数9ここでベストアンサー

ポイント300pt

フォームから送信されたデータを$_POSTや$_GETで受け取ってデータ作成等の処理を行いますよね?
その受け取った時点でデータが正常かどうか検査するのがバリデーションです。
ver1のプログラムにはnameがaというプルダウンが有り、
そのaからはa1,a2...a5の値しか来る筈が無い場合は下記の様なコードになります。

$is_valid = FALSE;
$valid_array = array( "a1","a2","a3","a4","a5" );
foreach ( $valid_array as $val ) {
if ( $_POST[ "a" ] === $val ) {
$is_valid = TRUE;
break;
}
}
if ( $is_valid ) {
// 正しい値の場合の処理
}
else {
// 不正な値の場合の処理
}

これをykhpno1さん作成のプログラム毎のプルダウンのパターンに当てはめて書けば良いと思います。

パターンというのは、

プログラムver1は、aというプルダウンからa1~a5、bというプルダウンからはb1~b5の値以外は受け取らない
プログラムver2は、bというプルダウンからb1~b5、cというプルダウンからはc1~c5の値以外は受け取らない

というルールになっていると仮定して、
ver1に、ver2では受け取れるc1~c5の値が来た場合は、不正な値として弾くという事です。
上記例で言うと、プルダウンaかbにc1~c5の値が入っている時ですね。

バリデーションについては下記が参考になると思います。
http://qiita.com/mpyw/items/346f1789ad0e1b969ebc

id:ykhpno1

ありがとうございます、この考え方で問題は解決できると思います!
助かりました、ありがとうございます。

2016/01/12 08:12:20
  • id:outofjis
    何のためのソフトなんだこれ(笑)
    PHPソースは閲覧側からは見えないのに。

    ハッキングとかによる改変対応とか、
    FTP通信時に機密を読み取られるのを防ぐためかな?
  • id:ykhpno1
    htmlファイルにも見せたくない内容がありまして困っています。
    で、無理やりphpの形式にして暗号化いるのです。
    サ-バ-にあげるまでは暗号化されてるhtml部分もサ-バ-に上げたとたん、ブラウザのソ-ス表示機能で丸見えになってしまいます。
    まぁでもhtml部分が暗号化されなくても、他の機能でカバ-できればいいのですが方法がわかりません。
    例えば、件の暗号化されたファイルの代わりにユ-ザ-がカスタマイズされたファイルを上げられる場合を恐れているのですが(ソ-スが丸見えである以上、簡単にカスタマイズファイルが作れます)、そういったユ-ザ-がつくったファイルが上がった場合、ブロックしてくれればいいのですが。
    元々のファイルのphp部分にキ-を含ませておいて(php部分は暗号化されるからキ-は見えない)、それ以外のキ-を含まないファイルはサ-バ-上で働かない、みたいな。

    そういった機能がこのソフトにありそうな気がするんですが、マニュアルを覗くだけではぜんぜんわからなくて。
    ですので、このソフトを詳しく解説してあるサイトなども同時に教えていただきたいと考えています。

    というか、htmlファイルが暗号化されればいいのですが、このソフトでhtmlファイルを変換するとサ-バ-に上げても暗号化されたままなのです(ロ-ダ-は入れてあって、phpファイルは暗号化してても正常に動くのに)。
    htmlファイルの暗号化の詳しい方法などがわかれば問題は解決するのですが・・。
  • id:tukihatu
    ううーん…よくわからないのでコメントで。
    質問者さんが考えているようなHTMLの暗号化はできないと思います。
    できても「サ-バ-に上げても暗号化されたまま」表示できないものになると思います。
    やるとしたらjavascriptとの連携での難読化ですが
    ↓例えばこんなの
    http://www.nurs.or.jp/~sug/homep/spam/spam7.htm
    暗号化してもソース表示機能で丸見えになるのは防げますが、
    DOMソース表示機能でブラウザによって結局丸見えになりそうです。
    そもそもPHPやサーバをクラッキングできる人間ならHTML解読しなくてもいいですし。

    >件の暗号化されたファイルの代わりにユ-ザ-がカスタマイズされたファイルを上げられる場合
    これはファイルアップロード機能がある何かを作ろうとしていて、
    ユーザーが悪意あるファイルをアップしたときの対策で困っているということでしょうか?
    それともFTPからアップされてしまったときの対応…?
    どちらの対応でもPHP暗号化だけではなくて他のブロック方法を使ったほうがいいような気がします。(もちろん暗号化も効果ありますけど)
    例えばアップロード時にファイル内容を検証するとか(ソースに<?が入っているかどうかなど)
    apacheで特定のディレクトリの中はphpを実行できないようにするとか
    https://www.softel.co.jp/blogs/tech/archives/2841
    サーバがわで防止したほうが確実な気がします。

    FTPでアップされたときの対応(上書き禁止など)は私専門じゃないのでわかんないです。たぶん調べればなにかあるんじゃないかな。
  • id:tukihatu
    あ、一つ使えそうなPDFフォームというのが…あ、やってみたらだめっぽかった。むむむ
  • id:ykhpno1
    牛乳先生さん、コメントをいただきましてありがとうございます。
    まず、「html部分を暗号化したい」という動機について書かせてください。

    phpを使い、あるWebアプリケ-ションを作りました。
    それはFTPを使ってユ-ザ-のレンタルサ-バ-に上げるタイプのもので、Webアプリケ-ションのURL(上げたディレクトリ)をブラウザで覗くと、htmlで作られたフォ-ムが表示されます。
    そのhtmlフォ-ムにユ-ザ-が欲しい情報を入力し、ボタンを押すと、アプリケ-ションに内蔵されたフォルダにデ-タが生成されます。
    ユ-ザ-は生成されたデ-タを自分のサ-バ-からダウンロ-ドして使う、という感じなのです。
    このhtmlフォ-ムは欲しいデ-タを(プルダウン形式で)選択するだけのものなのですが、プルダウンだけに、どういうデ-タを送っているかがブラウザのソ-ス表示機能でわかってしまいます。
    どうしてわかってしまうのが駄目かというと、このWebアプリケ-ションにはバリエ-ションがあり、その違いはこの入力フォ-ムで送信するデ-タの違いだけなのです(phpプログラム本体は同じ)。
    つまり本体の能力を入力フォ-ムで小出しにする形です。
    この小出しにするスタイルは守りたく、ユ-ザ-が上げるであろう「ソ-スをコピペ→プルダウン部分をカスタムした入力フォ-ム」を防ぎたいのです。

    outofjisさんのコメントに返信させていただきましたが、この入力フォ-ムを内蔵したファイルのphp部分にキ-を仕込み、再度phpを暗号化するということができたらな、とか思っています。
    「そういう動機ならこんなのがあるよ」みたいなアイデアがあれば嬉しく、お知らせいただければ幸いです。

    教えていただいたペ-ジは今から見させていただきます。
    ありがとうございました。
  • id:TransFreeBSD
    ほかのコメントにありますが、ソースを隠してもページの構造(DOM)を調べる機能で設定されている値は分かりますし、送受信している内容を調べる機能もあります。ブラウザが正常に動作するには、ブラウザがフォームの値や送受信する値を正しく知っている必要があり、ブラウザが正しい値を知っているならユーザにそれを隠すことはできません。

    やはりphpでユーザ毎に許可されたことかどうか認証するのが一番良いと思います。
    プロダクトキーとかライセンスキーのようなものはないのでしょうか。
    そういう仕組みを作ってそれに許可された機能の情報を埋め込むようにしてはどうでしょう。

    ただ、一つわからないことが。
    プルダウンメニューにはユーザに許可した項目以外もあるのでしょうか?
    もしあるなら何ら改変しなくともユーザがそれを選択出来てしまいます。
    もしなければ、改変して項目を増やそうとしても送るべきデータがわからないはずだと思うのですが。
  • id:tukihatu
    解決したようで。よかったねー
  • id:ykhpno1
    牛乳先生もありがとうございました。
    助かりました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません