外部から受け取った整数がPHP内の配列変数に予め保存したリストと
一致するかどうかを判定するコードを書きました。あれば1、なければ0を出力します。
$data_array = array(1234,5678);
$get_number = $_GET['number'];
if(in_array($get_number,$data_array) == 1){
$check = 1;
}else{
$check = 0;
}
print($check);
リストは私が手動で書き加えてサーバにアップロードするものとします。
このリストに外部から不正に書き加えられる可能性を心配しています。
リストに存在するかどうかは誰に知られても良いことにします。
サーバにアクセスするパスワードなどは漏えいしないものとして、
弱点があれば教えてください。パーミッションがちょっと不安です。
>このリストに外部から不正に書き加えられる可能性を心配しています。
”このリスト”というのは$data_arrayのことですか?
PHPの中に書いてあるこの$data_array部分を、http://から書き換えることはできないでしょう。属性が全開でも、別サーバからのアクセスは不可能です。(グループからは微妙なので、やるなら707が望ましいかも)
$_GET['number']に関しても、これだけにしか使っていないなら書き換える、という処理は行えません。
>パーミッションがちょっと不安です。
PHP自体をどこかの管理画面から上書きしたいということなのかな?それならまったく問題ないはずです。
それともこの$data_arrayを別ファイルに保存して、読み込んで使いたい、ということ?
別ファイルのファイル名がばれるとhttpからでものぞかれる場合があります。
.htaccessなどでアクセス制限をかけておくのをお勧めします。
<Files ~ "\.dat$"> deny from all </Files>
tukihatu さんが回答しているとおり、ご質問のスクリプトだけではリストの書き換えは難しいと思います。
パーミッションが心配であれば、リストを設置しているパス/ファイルに対しては、PHPのユーザー権限でのみReadできるように設定し、PHPスクリプト側でリストファイルを読み込むように変更してください。つまり、PHPスクリプトとしてarrayで書くのではなく、fgetcsv, file_get_contents で読み込むようにするのです。
しかし、範囲を広げて検討すればするほど、セキュリティ・リスクをゼロにすることはできなくなります。
下記のようなリスクが考えられます。
こうしたリスクを低減するには、アプリケーションのセキュリティ対策を重たくするだけでは限界があり、むしろ、リストファイルが正しいことを監視する方が合理的です。
たとえば、リスト・ファイルを更新する都度、md5_file関数によってリスト・ファイルのMD5ハッシュ値を計算し、控えておきます。これを手動でチェックするか、定期的にMD5ハッシュ値を照合するスクリプトを cron で走らせ、確認をさせる方法が考えられます。
かなり上級者向けという印象ですね^^;
でもおっしゃっていることは何となくわかります。
このように深く考えられるからプログラムはおもしろくもあり難しいのですね。
参考になりました。ありがとうございます。
>”このリスト”というのは$data_arrayのことですか?
その通りです。
PHP自体はローカルで修正してその都度サーバにアップするという感じです。
この処理だけなら特に心配する必要はなさそうですね^^
ありがとうございます。