Inhaltsverzeichnis
Datei-Upload-Angriff" >Datei-Upload-Angriff
Heim Backend-Entwicklung PHP-Tutorial PHP-Sicherheitsdatei-Upload-Angriff

PHP-Sicherheitsdatei-Upload-Angriff

Feb 22, 2017 am 09:26 AM



Datei-Upload-Angriff

Manchmal müssen Sie Benutzern zusätzlich zu den Standardformulardaten auch das Hochladen von Dateien ermöglichen. Da Dateien anders als andere Formulardaten in einem Formular übertragen werden, müssen Sie eine spezielle Codierung multipart/form-data angeben:

CODE:

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

Ein Formular mit sowohl gewöhnlichen Formulardaten als auch Dateien ist ein spezielles Format, und die Angabe der Kodierungsmethode ermöglicht es dem Browser, die zu verarbeitenden Formatanforderungen zu befolgen.

Das Formularelement, mit dem Benutzer Dateien auswählen und hochladen können, ist sehr einfach:

CODE:

<input type="file" name="attachment" />
Nach dem Login kopieren

Dieses Element sieht in verschiedenen Browsern unterschiedlich aus. Traditionell umfasst die Benutzeroberfläche ein Standardtextfeld und eine Schaltfläche zum Durchsuchen, sodass der Benutzer den Pfad der Datei direkt manuell eingeben oder durch Durchsuchen auswählen kann. Im Safari-Browser gibt es nur die Schaltfläche „Durchsuchen“. Glücklicherweise sind ihre Funktionen und Verhaltensweisen gleich.

Um den Mechanismus zum Hochladen von Dateien besser zu veranschaulichen, finden Sie hier ein Beispiel, das Benutzern das Hochladen von Anhängen ermöglicht:

CODE:

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

Please choose a file to upload:

Nach dem Login kopieren


Die versteckte Formularvariable MAX_FILE_SIZE teilt dem Browser das Maximum mit Zulässige Dateigrößen zum Hochladen. Wie viele clientseitige Einschränkungen kann auch diese von einem Angreifer leicht umgangen werden, bietet jedoch eine Orientierungshilfe für legitime Benutzer. Diese Einschränkung ist nur dann zuverlässig, wenn sie auf dem Server erfolgt.

Unter den PHP-Konfigurationsvariablen steuert upload_max_filesize die maximal zulässige Dateigröße, die hochgeladen werden darf. Gleichzeitig kann post_max_size (die maximale Größe der übermittelten Daten des POST-Formulars) möglicherweise auch gesteuert werden, da die Datei über die Formulardaten hochgeladen wird.

Das empfangende Programm upload.php zeigt den Inhalt des superglobalen Arrays $_FILES an:

CODE:

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


Um den Upload-Prozess zu verstehen, verwenden wir eine Datei mit dem Namen Autor. txt-Test, das Folgende ist sein Inhalt:

CODE:

  Chris Shiflett
  http://www.php.cn/
Nach dem Login kopieren


Wenn Sie diese Datei in das Programm upload.php hochladen, sehen Sie im Browser eine Ausgabe ähnlich der folgenden:

CODE:

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


Obwohl es zu sehen ist Sehen Sie sich oben an, was PHP tatsächlich im superglobalen Array $_FILES bereitstellt, aber es liefert keine Rohinformationen der Formulardaten. Als sicherheitsorientierter Entwickler, der Eingaben identifizieren muss, um zu wissen, was der Browser tatsächlich sendet, lohnt es sich, einen Blick auf die folgenden HTTP-Anfrageinformationen zu werfen:

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://www.php.cn/
 
  ----------12345
  Content-Disposition: form-data;
name="MAX_FILE_SIZE"
 
  1024
  ----------12345--
Nach dem Login kopieren


Obwohl Sie das Format der Anfrage nicht verstehen müssen , können Sie Dateien und zugehörige Metadaten identifizieren. Der Benutzer gibt nur den Namen und den Typ an, daher werden tmp_name, Fehler und Größe alle von PHP bereitgestellt.

Da PHP die hochgeladene Datei im temporären Dateibereich des Dateisystems (in diesem Beispiel /tmp/phpShfltt) speichert, besteht der übliche Vorgang darin, sie zum Speichern und Einlesen in den Speicher an andere Orte zu verschieben. Es besteht ein theoretisches Risiko, wenn Sie tmp_name nicht überprüfen, um sicherzustellen, dass es sich um eine hochgeladene Datei handelt (und nicht um etwas wie /etc/passwd). Dies wird als theoretisches Risiko bezeichnet, da keine bekannte Angriffsmethode bekannt ist, die es einem Angreifer ermöglicht, den Wert von tmp_name zu ändern. Nur weil es keine Angriffsmöglichkeiten gibt, bedeutet das jedoch nicht, dass Sie keine einfachen Sicherheitsmaßnahmen ergreifen müssen. Jeden Tag treten neue Angriffe auf und ein einfacher Schritt kann Ihr System schützen.

PHP bietet zwei praktische Funktionen, um diese theoretischen Risiken zu mindern: is_uploaded_file( ) und move_uploaded_file( ). Wenn Sie sicherstellen müssen, dass die Datei in tmp_name eine hochgeladene Datei ist, können Sie is_uploaded_file() verwenden:

CODE:

 <?php
 
  $filename = $_FILES[&#39;attachment&#39;][&#39;tmp_name&#39;];
 
  if (is_uploaded_file($filename))
  {
    /* $_FILES[&#39;attachment&#39;][&#39;tmp_name&#39;] is an
uploaded file. */
  }
 
  ?>
Nach dem Login kopieren


如果你希望只把上传的文件移到一个固定位置,你可以使用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. */
  }
 
  ?>
Nach dem Login kopieren


最后你可以用 filesize( ) 来校验文件的大小:

CODE:

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


这些安全措施的目的是加上一层额外的安全保护层。最佳的方法是永远尽可能少地去信任。 

以上就是PHP安全-文件上传攻击的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein So richten Sie Visual Studio-Code (VS-Code) für die PHP-Entwicklung ein Dec 20, 2024 am 11:31 AM

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

See all articles