PHPについてです。

外部から受け取った整数が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);

リストは私が手動で書き加えてサーバにアップロードするものとします。
このリストに外部から不正に書き加えられる可能性を心配しています。
リストに存在するかどうかは誰に知られても良いことにします。
サーバにアクセスするパスワードなどは漏えいしないものとして、
弱点があれば教えてください。パーミッションがちょっと不安です。

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

回答2件)

id:tukihatu No.1

回答回数180ベストアンサー獲得回数32

ポイント35pt

>このリストに外部から不正に書き加えられる可能性を心配しています。

”このリスト”というのは$data_arrayのことですか?

PHPの中に書いてあるこの$data_array部分を、http://から書き換えることはできないでしょう。属性が全開でも、別サーバからのアクセスは不可能です。(グループからは微妙なので、やるなら707が望ましいかも)

$_GET['number']に関しても、これだけにしか使っていないなら書き換える、という処理は行えません。


>パーミッションがちょっと不安です。

PHP自体をどこかの管理画面から上書きしたいということなのかな?それならまったく問題ないはずです。

それともこの$data_arrayを別ファイルに保存して、読み込んで使いたい、ということ?

別ファイルのファイル名がばれるとhttpからでものぞかれる場合があります。

.htaccessなどでアクセス制限をかけておくのをお勧めします。

<Files ~ "\.dat$">
  deny from all
</Files>
id:plugbot

>”このリスト”というのは$data_arrayのことですか?

その通りです。

PHP自体はローカルで修正してその都度サーバにアップするという感じです。

この処理だけなら特に心配する必要はなさそうですね^^

ありがとうございます。

2008/11/20 11:29:05
id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント35pt

tukihatu さんが回答しているとおり、ご質問のスクリプトだけではリストの書き換えは難しいと思います。

パーミッションが心配であれば、リストを設置しているパス/ファイルに対しては、PHPのユーザー権限でのみReadできるように設定し、PHPスクリプト側でリストファイルを読み込むように変更してください。つまり、PHPスクリプトとしてarrayで書くのではなく、fgetcsv, file_get_contents で読み込むようにするのです。


しかし、範囲を広げて検討すればするほど、セキュリティ・リスクをゼロにすることはできなくなります。

下記のようなリスクが考えられます。

  1. 他のスクリプトが乗っ取られ、リストが書き換えられてしまう可能性。
  2. OS、HTTPサーバ、PHP、FPT/SSHサーバ の脆弱性を突いた攻撃により、リストが書き換えられてしまう可能性。

こうしたリスクを低減するには、アプリケーションのセキュリティ対策を重たくするだけでは限界があり、むしろ、リストファイルが正しいことを監視する方が合理的です。

たとえば、リスト・ファイルを更新する都度、md5_file関数によってリスト・ファイルのMD5ハッシュ値を計算し、控えておきます。これを手動でチェックするか、定期的にMD5ハッシュ値を照合するスクリプトを cron で走らせ、確認をさせる方法が考えられます。

id:plugbot

かなり上級者向けという印象ですね^^;

でもおっしゃっていることは何となくわかります。

このように深く考えられるからプログラムはおもしろくもあり難しいのですね。

参考になりました。ありがとうございます。

2008/11/20 13:00:00

コメントはまだありません

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

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

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

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