6

ユーザーが任意のPHPを実行して結果を取得できるJavaIRCアプリケーションがあります。これが使用される目的の一例を次に示します。

btc: <php>$btc = json_decode(file_get_contents('https://btc-e.com/api/2/1/ticker'), true); $ticker = $btc['ticker']; echo "Current BTC Ticker: High: $".$ticker['high']." Low: $".$ticker['low']." Average: $" . $ticker['avg'];

Pythonのセットアップもありますが、PHPはコード内のどこにも改行を必要としないため、PHPが好きです。(これはIRCであるため、Webでロードされた.pyファイルを実行しない限り改行を与えることはできません)

問題は、次のように、人々がシステムを悪用しようとするのを防ぐ方法です。

<php>echo readfile("/etc/passwd");

これは、明らかに、すべての人が見ることができるようにpasswdファイルを読み取ります。
readfile()をブロックしようとした後も、この問題が発生しています。

<php>$rf = readfile; echo $rf("/etc/passwd");

このシステムをどのように保護すればよいでしょうか。(完全なコードはgithubにあり、興味のある人はhttps://github.com/clone1018/Shocky

余談ですが、すべてがVMにあるため、実際の機密情報は公開されていません。したがって、これは「時限爆弾」などではありません。ただし、それでもロックダウンしたいと思います。

4

2 に答える 2

4

それはザルに1つの穴を塞ぐように聞こえます。ファイルシステムのセキュリティは、アプリケーションではなく、OSによって処理される必要があります。そして、これまでのところ/etc/passwd、OSはすでにそれを保護しています。

これが私の最初の行です/etc/passwd-はい、私はそれを公に投稿するつもりです:

root:x:0:0:root:/root:/bin/bash

通常、パスワードは実際にはに保存されません/etc/passwd。ユーザー情報はですが、パスワードはに置き換えられx、実際のパスワードはrootユーザーのみが使用できます。

ただし、PHPをある程度ロックダウンする必要があります。ini_setを使用して、実行時に多くのPHPオプションを変更できますopen_basedirhttp://www.php.net/manual/en/ini.core.php#ini.open-basedir

于 2012-05-14T18:21:37.633 に答える
-4

ファイルの読み取りのみを制限したい場合は、 http: //www.php.net/manual/en/ini.core.php#ini.open-basedirが役立ちます。

古いバージョンのphp<5.4を使用している場合は、phpセーフモードの使用を検討できます。

http://php.net/manual/en/ini.sect.safe-mode.php

phpを制限するには、セーフモードに次の変数を設定します

safe_mode_exec_dir
disable_functions = readfile,system

および他の多くの

また、ユーザーはuidが異なるファイル(/ etc / passwordなど)を読み取ることができなくなります。セーフモードは、最新バージョンのphpから減価償却/削除されることに注意してください

于 2012-05-14T18:32:27.917 に答える