プロが教える店舗&オフィスのセキュリティ対策術

PHPでWeb Serverアプリケーションを作っています。

PHPでUNIXシステムコマンドを実行することはできますでしょうか?
具体的に何をしたいかというと、動的に作られるページだとgoogle等に登録されるまで時間かかるので、
あるページに情報が登録されるたびに、wgetで動的ページをファイルに吐き出して、検索はgrepで引っ掛けて、内部的に処理したいと考えております。

(1)PHPで、wgetを呼び出して、ファイルに吐き出すこと
(2)Webページで、検索フィールドに文字を入力すると
入力文字がgrepの引数に渡されて、その結果をPHPで
受けること

を実現する方法はございますでしょうか。

A 回答 (2件)

がると申します。


とりあえず、バッククォートまたは shell_exec という関数を用いることで、任意のコマンドが発行できます。
http://php.s3.to/man/function.shell-exec.html
あたりをご覧下さい。

なお、設計次第では「OSインジェクション」などのセキュリティホールを生みますので、どうぞご注意くださいませ。
    • good
    • 1
この回答へのお礼

ありがとうございます。
SQLインジェクションだけでなく、OSインジェクションというのもあるんですね。

勉強させていただきます

お礼日時:2006/06/24 01:31

あなたがサーバ管理者であるなら、全てのコマンドを利用する事が出来ます。


#1さんの指摘通り、セキュリティには万全の注意をする必要があります。

関数としては
exec、shell_exec
等のプログラム実行関数があります。
http://php.s3.to/man/ref.exec.html

ここで注意しなくてはいけないのは、この関数はPHPが動いている環境、おそらくapacheやnobodyの実行権限でされるという事です。今回の質問者さんのやりたいことですと、一般ユーザ権限で出来るwgetやgrepなので特に問題はありませんが、実行権限のないコマンド、例えばuseraddとか、passwdとかは、sodoを使って実行権限を委譲すれば、WEBからも実行可能です。sodoの使い方は長くなるので説明は省きます。

繰り返しますが、プログラム実行関数は非常に大きなセキュリティホールになる可能性がありますので、くれぐれも気をつけて下さい。
別にシェルスクリプトを作ってWEBディレクトリ以外に作成しておいて、実行権限をPHP(WEB、通常nobodyかapache)にしておいて、それを呼び出す、というのが比較的安全かもしれません。

なお、質問者さんのやりたい事ですと、curl関数でファイルに保存し、namazuモジュールで検索、という方法も考えられると思います。
curl関数
http://www.php.net/manual/ja/ref.curl.php
PHPでnamazu
http://suwako.plala.jp/pukiwiki/index.php?%5B%5B …

参考URL:http://taketan.mydns.jp/xoops/modules/bwiki/?PHP
    • good
    • 0
この回答へのお礼

ありがとうございます。

やはりセキュリティには気をつけないといけませんね。

namazuをPHPで呼び出すのを調べたのですが、
UNIX用のnamazu呼び出しモジュールが現在公開されていないようです。

お礼日時:2006/06/24 01:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!