この記事では、PHPでユーザー投稿コンテンツを操作する際に注意すべき危険な機能を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
私たちのプログラム開発では、ユーザー入力がセキュリティ問題を解決するための最初のエントリ ポイントです。なぜそんなことを言うのですか? SQL インジェクション、XSS、ファイル アップロードの脆弱性のいずれであっても、それらはすべてユーザーが送信した入力パラメータに関連しています。今日はこれらの問題については説明しません. 以下のユーザー入力について主に説明します.
include($g);
のような、検証なしで直接操作に使用できない危険な関数がいくつかあります 仮定 この $g が内容ですユーザーによって送信されました。検証せずにファイルをインクルードするためにこのパラメーターを直接使用します。渡すパラメーターは ?g=/etc/passwd であるため、サーバー上のすべてのユーザー アカウント情報が直接漏洩した可能性があります。
さらに、シェルコマンドを実行する一部の関数は非常に危険です。
echo system($g);
渡すパラメータが ?g=ls -la / の場合、同じサーバー ディレクトリも表示されます。これはディレクトリ構造のみを示しています。他のより恐ろしいコマンドが使用された場合、結果は悲惨なものになります。
同様に、特にファイルを削除する場合、IDやファイル名を指定してファイルを操作することが多く、判断を誤ると非常に重要なファイルを直接削除してしまう可能性があります。
unlink('./' . $g);
$g を ?g=../../../xxxx として構築し続けます。権限が許可されていれば、さまざまなシステム ファイルを削除できます。
これらの内容については、実は PHP の公式マニュアルにいくつか良い提案がされているので、PHP マニュアルの内容を直接見てみるのも良いでしょう。
多くの PHP プログラムの主な弱点は、PHP 言語自体の問題ではなく、プログラマーのセキュリティ意識の低さが原因です。したがって、誤ったデータ送信による影響を発見するには、コードの各部分で起こり得る問題に常に注意を払う必要があります。
常にコードに注意を払って、クライアントから送信されたすべての変数が適切にチェックされていることを確認してから、いくつかの質問を自問してください。
このスクリプトは、次のことにのみ影響します。目的のファイル?
実際、これらの提案に従う限り、ほとんどの安全上の問題は解決できます。繰り返しますが、ユーザー出力は信頼できません。テスト中に、境界値、特殊シンボル、特殊コマンド、範囲外の値、ディレクトリのアクセス許可などを含むさまざまな検証を行ってください。必要な場合を除き、ユーザー入力をファイル、スクリプト実行、およびファイル操作の直接パラメータとして使用しないでください。使用する必要がある場合は、さまざまな形式のフィルタリングと検証を実行する必要があります。
テスト コード:
[https://github.com/zhangyue05...
推奨学習:
php ビデオ チュートリアル以上がユーザー投稿コンテンツを PHP で操作する際に注意すべき危険な機能について 3 分で学びます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。