Web上の脆弱性とその原理分析と防止方法(ファイル名検出の脆弱性)_PHPチュートリアル
前回の記事:
1. ファイルの種類を検出し、ユーザーのファイル名で保存します
if(isset($_FILES['img']))
{
$file = save_file($_FILES['img']);
if($file===false) exit('保存に失敗しました!');
echo "正常に保存されました!",$file;
}
関数 check_file($img)
{
///ファイルを読み込みます
if($img['error']>0) return false;
$tmpfile = $img['tmp_name'];
$filename = $img['name'];
///ファイル拡張子を読み取る
$len=strrpos($filename,".");
if($len===false) false を返します;
// 拡張機能を取得
$ext = strto lower(substr($filename,$len+1));
if(!in_array($ext,array('jpg','jpeg','png'))) return false;
true を返します;
}
関数 save_file($img)
{
if(!check_file($img)) false を返します;
//フォーマット検出OK、データ移動の準備
$filename = $img['name'];
$newfile = "アップロード/" .$ファイル名;
if(!move_uploaded_file($img["tmp_name"],$newfile)) return false;
$newfile を返します;
}
?>
上記のコードでは入力の種類も判定されており問題ありません。しかし、問題はまさに、取得したユーザー名変数の検出に現れます。受信したユーザー名を直接取得し、ファイルとして保存します。 友人の中には、「これらのファイル名はすべて私のコンピュータに存在しており、ファイル名の形式はオペレーティング システムのファイル名定義によって制限されている」と言う人もいます。 ただし、$_FILES で取得される変数は http リクエストから直接取得されることに注意してください。他の get 変数や post 変数を取得する場合と同じです。 したがって、下心のある人がブラウザを自分でシミュレートし、特別なファイル名をサーバーに送信することがよくあります。その後、ファイルを保存するときに、通常どおり独自の形式で保存できます。
数年前までは、文字列に「」を含めてファイルとして保存すると、以下の内容が自動的に切り詰められてしまいました。 例: $filename は「a.php.jpg」という構造になっています。考えてみましょう。どうなるでしょうか?
$newfile = “upload/a.php.jpg” 拡張子検証のため、右端の「.」に続く文字は許容される画像形式である jpg であるためです。 ただし、そのファイル名で保存するとすぐに。 ディスクはアップロード ディレクトリの下に .php を生成し、後続の文字はすべて自動的に切り詰められることがわかります。
この脆弱性は大流行しました。当時、ほとんどのホスティング Web サイトには抜け穴がありました。しばらくの間、多くのプラットフォームが預金を閉鎖しました。実はこれが根本的な理由なのです。ファイル名を取得し、それを最終的に生成されたファイル名として保存しました。 良い方法は、ファイル名をランダムに生成し、拡張子を自分で読み取ることです。これにより、ファイルの保存時に破棄または切り捨てられる特殊文字の入力を防ぐことができます。
この脆弱性は php4 時代に悪用される可能性があり、php5 時代では、生成される変数ファイル名の値から「」が自動的に除外されるため、ユーザーがどのような特別なユーザー名を作成しても切り詰められます。 ただし、現在、この種の脆弱性は asp、jsp、およびその他のサイトに存在します。今でも頻繁に登場します。古いバージョンの PHP サイトも頻繁に表示されます。
さて、今日はここで終わりにしましょう。他にも 2 つの一般的な方法がありますが、それについては後ほど説明します。コミュニケーションへようこそ!

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ドリームウィーバー CS6
ビジュアル Web 開発ツール
