国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
ファイルアップロード攻撃" >ファイルアップロード攻撃
ホームページ バックエンド開発 PHPチュートリアル PHP セキュリティ - ファイル アップロード攻撃

PHP セキュリティ - ファイル アップロード攻撃

Feb 22, 2017 am 09:26 AM



ファイルアップロード攻撃

場合によっては、標準のフォーム データに加えて、ユーザーがファイルをアップロードできるようにする必要もあります。ファイルはフォーム內(nèi)の他のフォーム データとは異なる方法で送信されるため、特別なエンコード方法 multipart/form-data を指定する必要があります:

CODE:

<form action="upload.php" method="POST"
enctype="multipart/form-data">

通常のフォーム データとファイルの形式は特殊な形式であり、エンコード方法を指定することでブラウザが形式の要件に従って処理できるようになります。

ユーザーがファイルを選択してアップロードできるフォーム要素は非常にシンプルです:

<input type="file" name="attachment" />

さまざまなブラウザーでのこの要素の外観は異なります。従來、インターフェイスには標準のテキスト ボックスと參照ボタンが含まれており、ユーザーはファイルのパスを手動で直接入力したり、參照してファイルを選択したりできます。 Safariブラウザには參照ボタンしかありません。幸いなことに、それらの機能と動作は同じです。

ファイルアップロードメカニズムをよりわかりやすく説明するために、ユーザーが添付ファイルをアップロードできるようにする例を次に示します。 _FI LE_SIZE が伝えるブラウザでアップロードできる最大ファイル サイズを指定します。多くのクライアント側(cè)の制限と同様、この制限も攻撃者によって簡単に回避されてしまいますが、正規(guī)のユーザーには指針を提供します。この制限は、サーバー上で行われた場合にのみ信頼できます。

PHP 構(gòu)成変數(shù)のうち、upload_max_filesize は、アップロードできる最大ファイル サイズを制御します。同時に、ファイルはフォーム データを通じてアップロードされるため、post_max_size (POST フォームの最大送信データ サイズ) も制御できる可能性があります。 P 受信プログラム UPLOAD.PHP は、スーパーグローバル配列 $ _Files:

Code:

<form action="upload.php" method="POST"
enctype="multipart/form-data">
  

Please choose a file to upload:


の內(nèi)容を表示します。アップロードプロセスを理解するために、author という名前を使用します。テスト用の txt ファイルの內(nèi)容は次のとおりです:

CODE:

<?php
 
  header(&#39;Content-Type: text/plain&#39;);
  print_r($_FILES);
 
  ?>

ファイルを Upload.php プログラムにアップロードすると、參照できます。同様の出力が表示されます。ブラウザで次のようになります:

CODE:

  Chris Shiflett
  http://miracleart.cn/

上記から、PHP がスーパーグローバル配列 $_FILES で実際に何を提供しているかがわかりますが、それはオリジナルですフォームデータの情報を與えることはできません。ブラウザが実際に何を送信しているかを知るために入力を識別する必要があるセキュリティを重視する開発者としては、次の HTTP リクエスト情報を確認する価値があります:

CODE:

 Array
  (
      [attachment] => Array
          (
              [name] => author.txt
              [type] => text/plain
              [tmp_name] => /tmp/phpShfltt
              [error] => 0
              [size] => 36
          )
 
  )

リクエストの形式を理解する必要はありませんが、ファイルと関連するメタデータを識別できる必要があります。ユーザーは名前と型のみを指定するため、tmp_name、error、size はすべて PHP によって提供されます。

PHPはアップロードされたファイルをファイルシステムの一時ファイル領域(この例では/tmp/phpShfltt)に保存するため、メモリへの保存や読み込みのために別の場所に移動するのが通常の操作です。 tmp_name をチェックして、それがアップロードされたファイル (/etc/passwd などではない) であることを確認しないと、理論的にリスクが生じます。攻撃者が tmp_name の値を変更できる既知の攻撃方法がないため、これは理論的リスクと呼ばれます。ただし、攻撃手段がないからといって、簡単なセキュリティ対策を講じる必要がないわけではありません。新しい攻撃は毎日出現(xiàn)しますが、簡単な手順 1 つでシステムを保護できます。

PHP は、これらの理論上のリスクを軽減するために、is_uploaded_file() と 2 つの便利な関數(shù)を提供します。 move_uploaded_file( )。 tmp_name のファイルがアップロードされたファイルであることを確認する必要がある場合は、 is_uploaded_file():

CODE:

POST /upload.php HTTP/1.1
  Host: example.org
  Content-Type: multipart/form-data;
boundary=----------12345
  Content-Length: 245
 
  ----------12345
  Content-Disposition: form-data; name="attachment";
filename="author.txt"
  Content-Type: text/plain
 
  Chris Shiflett
  http://miracleart.cn/
 
  ----------12345
  Content-Disposition: form-data;
name="MAX_FILE_SIZE"
 
  1024
  ----------12345--

を使用できます。

如果你希望只把上傳的文件移到一個固定位置,你可以使用move_uploaded_file( ):

CODE:

 <?php
 
  $old_filename =
$_FILES[&#39;attachment&#39;][&#39;tmp_name&#39;];
  $new_filename = &#39;/path/to/attachment.txt&#39;;
 
  if (move_uploaded_file($old_filename,
$new_filename))
  {
    /* $old_filename is an uploaded file, and the
move was successful. */
  }
 
  ?>


最后你可以用 filesize( ) 來校驗文件的大?。?/span>

CODE:

 <?php
 
  $filename = $_FILES[&#39;attachment&#39;][&#39;tmp_name&#39;];
 
  if (is_uploaded_file($filename))
  {
    $size = filesize($filename);
  }
 
  ?>


這些安全措施的目的是加上一層額外的安全保護層。最佳的方法是永遠盡可能少地去信任。?

以上就是PHP安全-文件上傳攻擊的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(miracleart.cn)!


このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? 最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? Jun 23, 2025 am 12:56 AM

postaycurrentwithpdevellyments andbest practices、follow keynewsourceslikephp.netandphpweekly、egagewithcommunitiessonforums andconferences、keeptooling and gradivallyadoptnewfeatures、andreadorcontributeTopensourceprijeprijeprijeptrijeprijeprests.

PHPとは何ですか、そしてなぜそれがWeb開発に使用されるのですか? PHPとは何ですか、そしてなぜそれがWeb開発に使用されるのですか? Jun 23, 2025 am 12:55 AM

PhpBecamepopularforwebdevelopmentduetoitseaseaseaseaseasease、SeamlessintegrationWithhtml、widespreadhostingsupport、andalargeecosystemincludingframeworkelavelandcmsplatformslikewordspresspressinsinsionsisionsisionsisionsisionsionsionsisionsionsionsisionsisions

PHPタイムゾーンを設定する方法は? PHPタイムゾーンを設定する方法は? Jun 25, 2025 am 01:00 AM

tosettherighttimezoneInphp、usedate_default_timezone_set()functionthestthestofyourscriptwithavalididentifiersiersuchas'america/new_york'.1.usedate_default_timezone_set()beforeanydate/timefunctions.2.2.Altertentally、confuturethephp.inifilebyset.

PHPでのユーザー入力を検証して、特定の基準を満たすことを確認するにはどうすればよいですか? PHPでのユーザー入力を検証して、特定の基準を満たすことを確認するにはどうすればよいですか? Jun 22, 2025 am 01:00 AM

tovalidateuserinputinphp、usebuilt-validationfunctionslikefilter_var()andfilter_input()、applyRegularexpressionsforcustomformatsusususussusorphoneNumbers、checkdatatypesfornumerueSlikeageorpricepriceprice

PHP(serialize()、unserialize())のデータシリアル化とは何ですか? PHP(serialize()、unserialize())のデータシリアル化とは何ですか? Jun 22, 2025 am 01:03 AM

thephpfunctionSerialize()andunserialize()areusedtoconvertcomplexdatastructostorestorestorustorasandabackagain.1.serialize()c onvertsdatalikecarraysorobjectsraystringcontainingtainingtainingepeandStructureinformation.2。

HTMLファイルにPHPコードを埋め込むにはどうすればよいですか? HTMLファイルにPHPコードを埋め込むにはどうすればよいですか? Jun 22, 2025 am 01:00 AM

PHPコードをHTMLファイルに埋め込むことができますが、ファイルに.phpの拡張機能があることを確認して、サーバーが正しく解析できるようにします。標準タグを使用してPHPコードをラップし、HTMLのどこにでも動的コンテンツを挿入します。さらに、同じファイルでPHPとHTMLを複數(shù)回切り替えて、條件付きレンダリングなどの動的関數(shù)を?qū)g現(xiàn)できます。短いラベル、引用マークエラー、または省略されたエンドラベルによって引き起こされる問題を回避するために、サーバーの構(gòu)成と構(gòu)文の正確性に注意してください。

クリーンで保守可能なPHPコードを書くためのベストプラクティスは何ですか? クリーンで保守可能なPHPコードを書くためのベストプラクティスは何ですか? Jun 24, 2025 am 12:53 AM

清潔で維持しやすいPHPコードを書くための鍵は、標準、合理的な構(gòu)造に従って、コメント、テスト能力を適切に利用する明確な命名にあります。 1。$ userDataやcalculatetotalprice()などの明確な変數(shù)、関數(shù)、クラス名を使用します。 2。PSR-12標準統(tǒng)一コードスタイルに従ってください。 3.責任に従ってコード構(gòu)造を分割し、MVCまたはLaravelスタイルのカタログを使用して整理します。 4.麺スタイルのコードを避け、単一の責任でロジックを小さな関數(shù)に分割します。 5.キーポイントにコメントを追加し、インターフェイスドキュメントを書き込み、パラメーター、返品値、例外を明確にします。 6.テスト可能性を改善し、依存関係を採用し、グローバルな狀態(tài)と靜的な方法を減らします。これらのプラクティスは、コードの品質(zhì)、コラボレーション効率、メンテナンス後の容易さを改善します。

See all articles