Web ファイル操作の解析における一般的なセキュリティの脆弱性 (ディレクトリおよびファイル名の検出の脆弱性)_PHP チュートリアル
Web 開発を行うとき、抜け穴が頻繁に現れるいくつかのコア機能やロジックをランダムにチェックすることがよくあります。技術チームが成長するにつれて、チームメンバーのスキルはますます成熟していきます。 一般的な愚者型 SQL インジェクションの脆弱性と XSS の脆弱性。今後もその数はどんどん減っていきますが、時折現れる新たな隠れた脆弱性も見つかるでしょう。これらの脆弱性のほとんどは、開発者の機能または共通モジュール機能の設計が不十分なために発生し、問題が残されたままになります。以前は、いくつかの機能モジュールを完了することができましたが、現在では、安全かつ正しい方法でモジュールを完了することが要件となります。 次に、設計上の理由により脆弱性を引き起こす一般的な機能モジュールをいくつか紹介します。次に、まずファイル読み取り機能の脆弱性を見てみましょう。
まず次のコードを見てみましょう。これには、ユーザーが入力したさまざまなディレクトリにさまざまなファイルが含まれています
/// module name
$mod = isset( $_GET['m'])?trim($_GET['m']):'index';
///上位ディレクトリにジャンプしないようにディレクトリ名をフィルタリングします
$mod = str_replace(".."," .",$mod);
///ファイルを取得します
$file = "/home/www/blog/".$mod.".php";
// /Include the file
@include($file);
このコードは、多くの友人が作成したプログラムで遭遇した可能性があります。また、初心者にとっては、ウォークスルー中にこのコードに遭遇したときのことを思い出してください。私は、このコードの安全性を確保してもらえますか、と尋ねました。
回答: 1. 「..」ディレクトリが置き換えられるため、ユーザーによって渡されたモジュール名内のすべての .. ディレクトリが置き換えられます。
2. 結合されたファイル名を作成します。前部のディレクトリには制限があり、後部には拡張子が制限されます。
このコードは本当にディレクトリのセキュリティ検出を実現しますか?
$mod がこの値を渡した場合の結果がどのようになるかをテストしてみましょう。

$mod 入力 ?mod=…%2F…%2F…%2F…%2Fetc%2Fpasswd%00 を構築すると、結果は次のようになります:
実際には include("/etc/passwd") ファイルです。
どうやって私のパラメータ制限を回避しましたか?
まず第一に: ユーザー入力を制限するためにパラメーター フィルター タイプを使用するのは良い方法ではありません。テストできる場合は、テストに失敗する限り、置き換えないでください。それ!これは私たちの原則の 1 つです。フィルタリングの失敗は無数にあります。実際のプロセスを見てみましょう。
1.「..」を「.」に置き換えて「…/…/…/」と入力します
2.結果は「../../../」になります
はい、友達が尋ねます、直接スペースに置き換えた方が良いでしょうか?確かにこれで代用可能です。ただし、将来的にすべてをスペースに置き換えることができるという意味ではありません。別の例を見てみましょう。例: 誰かが文字列内の JavaScript を置き換えました。コードは次のとおりです:
...
$msg = str_replace("javascript","",$msg);
のようです。 javascriptは表示されませんが、 jjavascriptavascript と入力して置き換えると、真ん中が空になった後に置き換えます。先頭の「j」と次の「j」は新しい JavaScript を形成します。
2 番目: その背後にある .php 制限を回避する方法を見てみましょう。ユーザーが入力したパラメータは次のとおりです: "etc/passwd
1. ホワイトリスト制限とは
コードをコピーします
コードは次のとおりです:
例:
$mod = isset($_GET['m'])?trim($_GET['m']):'index'; ///モジュール名を読み取った後、
mod 変数の値の範囲 ifこれは列挙型の場合:
if(!in_array($mod,array('user','index','add','edit'))) exit('err!!!');
完全修飾$ mod はこの配列にしか入れられないので、とても残酷です。 ! ! !
2. ホワイトリスト制限を実装する方法
先ほどの例を通して、列挙型の場合は値をリストに直接入力するだけであることがわかりました。ホワイトリストによる別の制限方法もあります。文字範囲を制限するためです
例:
$mod = isset($_GET['m'])?trim($_GET['m ']):'index '; ///モジュール名を読むと、一般的なサイトの場合、$mod は文字と数字とアンダースコアであることがわかります。
if(!preg_match(“/^w+$/”,$mod)) exit(‘err!!!’);
文字は [A-Za-z0-9_] これらのみです。十分残酷だ! ! !
概要: ホワイトリスト制限方法は実際には非常に簡単であることがわかりましたか? その場所で何が必要かがわかっている場合は、入力が必要なものを確認するだけです。さらに、未知の文字を置き換えるよりも、すでに知っている文字を検出する方がはるかに簡単です。 問題を解決する正しい方法により、ファイルがよりシンプルかつ安全になります。 !

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
