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_] これらのみです。十分残酷だ! ! !
概要: ホワイトリスト制限方法は実際には非常に簡単であることがわかりましたか? その場所で何が必要かがわかっている場合は、入力が必要なものを確認するだけです。さらに、未知の文字を置き換えるよりも、すでに知っている文字を検出する方がはるかに簡単です。 問題を解決する正しい方法により、ファイルがよりシンプルかつ安全になります。 !

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

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

ホットトピック









技術革新の分野において、人工知能 (AI) は現代の最も革新的で有望な発展の 1 つです。人工知能は、大量のデータを分析し、パターンから学習し、インテリジェントな意思決定を行う能力により、医療、金融から運輸、エンターテイメントに至るまで、多くの業界に革命をもたらしました。しかし、AI は目覚ましい進歩にもかかわらず、その可能性を最大限に発揮することを妨げる重大な制限や課題にも直面しています。この記事では、人工知能のトップ 10 の制限を詳しく掘り下げ、この分野の開発者、研究者、実務者が直面している制限を明らかにします。これらの課題を理解することで、AI 開発の複雑さを乗り越え、リスクを軽減し、AI テクノロジーの責任ある倫理的な進歩への道を開くことができます。利用可能なデータが限られている: 人工知能の開発はデータに依存します

この AI 支援プログラミング ツールは、急速な AI 開発のこの段階において、多数の有用な AI 支援プログラミング ツールを発掘しました。 AI 支援プログラミング ツールは、開発効率を向上させ、コードの品質を向上させ、バグ率を減らすことができます。これらは、現代のソフトウェア開発プロセスにおける重要なアシスタントです。今日は Dayao が 4 つの AI 支援プログラミング ツールを紹介します (すべて C# 言語をサポートしています)。皆さんのお役に立てれば幸いです。 https://github.com/YSGStudyHards/DotNetGuide1.GitHubCopilotGitHubCopilot は、より少ない労力でより迅速にコードを作成できるようにする AI コーディング アシスタントであり、問題解決とコラボレーションにより集中できるようになります。ギット

世界初の AI プログラマー Devin の誕生から 1 か月も経たない 2022 年 3 月 3 日、プリンストン大学の NLP チームはオープンソース AI プログラマー SWE-agent を開発しました。 GPT-4 モデルを利用して、GitHub リポジトリの問題を自動的に解決します。 SWE ベンチ テスト セットにおける SWE エージェントのパフォーマンスは Devin と同様で、平均 93 秒かかり、問題の 12.29% を解決しました。専用端末と対話することで、SWE エージェントはファイルの内容を開いて検索したり、自動構文チェックを使用したり、特定の行を編集したり、テストを作成して実行したりできます。 (注: 上記の内容は元の内容を若干調整したものですが、原文の重要な情報は保持されており、指定された文字数制限を超えていません。) SWE-A

今日は、MIT が先週公開した記事を紹介します。GPT-3.5-turbo を使用して時系列異常検出の問題を解決し、時系列異常検出における LLM の有効性を最初に検証しました。プロセス全体に微調整はなく、GPT-3.5-turbo は異常検出に直接使用されます。この記事の核心は、時系列を GPT-3.5-turbo が認識できる入力に変換する方法とその設計方法です。 LLM が異常検出タスクを解決できるようにするためのプロンプトまたはパイプライン。この作品について詳しく紹介していきます。画像用紙タイトル:Large languagemodelscanbeゼロショタノマリデテ

Go 言語開発モバイル アプリケーション チュートリアル モバイル アプリケーション市場が活況を続ける中、ますます多くの開発者が Go 言語を使用してモバイル アプリケーションを開発する方法を検討し始めています。シンプルで効率的なプログラミング言語として、Go 言語はモバイル アプリケーション開発でも大きな可能性を示しています。この記事では、Go 言語を使用してモバイル アプリケーションを開発する方法を詳しく紹介し、読者がすぐに始めて独自のモバイル アプリケーションの開発を開始できるように、具体的なコード例を添付します。 1. 準備 始める前に、開発環境とツールを準備する必要があります。頭

01 今後の概要 現時点では、検出効率と検出結果の適切なバランスを実現することが困難です。我々は、光学リモートセンシング画像におけるターゲット検出ネットワークの効果を向上させるために、多層特徴ピラミッド、マルチ検出ヘッド戦略、およびハイブリッドアテンションモジュールを使用して、高解像度光学リモートセンシング画像におけるターゲット検出のための強化されたYOLOv5アルゴリズムを開発しました。 SIMD データセットによると、新しいアルゴリズムの mAP は YOLOv5 より 2.2%、YOLOX より 8.48% 優れており、検出結果と速度のバランスがより優れています。 02 背景と動機 リモート センシング技術の急速な発展に伴い、航空機、自動車、建物など、地表上の多くの物体を記述するために高解像度の光学式リモート センシング画像が使用されています。リモートセンシング画像の判読における物体検出

【PHPにおけるミッドポイントの意味と使い方の分析】 PHPでは、ミッドポイント(.)は2つの文字列やオブジェクトのプロパティやメソッドを接続するためによく使われる演算子です。この記事では、PHP における中間点の意味と使用法を詳しく掘り下げ、具体的なコード例を示して説明します。 1. 文字列中間点演算子の接続 PHP での最も一般的な使用法は、2 つの文字列を接続することです。 2 つの文字列の間に . を置くと、それらをつなぎ合わせて新しい文字列を形成できます。 $string1=&qu

Java は、強力なファイル処理機能を備えた人気のあるプログラミング言語です。 Java では、フォルダーを走査してすべてのファイル名を取得するのが一般的な操作であり、これは特定のディレクトリー内のファイルを迅速に見つけて処理するのに役立ちます。この記事では、Java でフォルダーを走査してすべてのファイル名を取得するメソッドを実装する方法と、具体的なコード例を紹介します。 1. 再帰的メソッドを使用してフォルダーを走査する 再帰的メソッドを使用してフォルダーを走査することができます。再帰的メソッドはそれ自体を呼び出す方法であり、フォルダーを効果的に走査できます。
