PHP Upload

    • VB.NET

    Es gibt 60 Antworten in diesem Thema. Der letzte Beitrag () ist von jonas16423.

      Bei welcher Flatrate kriegt man Webspace als Dreingabe? Ich frage aus Neugier. :D
      Und vllt. hab ich das falsch ausgedrückt, aber wenn man solche Sachen aufziehen will wie z.B. nen Upload über PHP, und man dabei ist, nen ellenlangen Code für den Verzeichnisschutz zu schreiben, sollte man das lieber sein lassen und die chmod-Funktion nutzen.
      Geht der Upload eigendlich auch irgendwie via asp.net??
      Also ich komme damit nicht klar,

      ich hab die upload.php hoch geladen (tauschstube/upload.php), und das ist der Source:

      VB.NET-Quellcode

      1. Imports System.Net
      2. Public Class Form1
      3. Dim wc As New WebClient
      4. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      5. If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
      6. TextBox1.Text = OpenFileDialog1.FileName
      7. End If
      8. End Sub
      9. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      10. If Not TextBox1.Text = Nothing Then
      11. Try
      12. wc.Encoding = System.Text.Encoding.Default
      13. wc.Headers.Add("Content-Type", "binary/octet-stream")
      14. Dim result As Byte() = wc.UploadFile("http://0815.de/tauschstube/upload.php?d=" & TextBox2.Text, "POST", TextBox1.Text)
      15. 'Serverlink natürlich anpassen, und auch ggf. das Verzeichnis ändern in dem die upload.php liegt
      16. Dim s As String = System.Text.Encoding.UTF8.GetString(result, 0, result.Length)
      17. ' Die echo's die im PHP ausgegeben werden, werden hier in einer MsgBox angezeigt.
      18. MessageBox.Show(s)
      19. Catch ex As Exception
      20. MessageBox.Show(ex.Message)
      21. End Try
      22. Else
      23. MessageBox.Show("Bitte eine Datei auswählen")
      24. End If
      25. End Sub
      26. End Class


      aber sobald ich auf Upload klicke kommt das (siehe Bild), und die Datei ist nicht hoch geladen.
      Vorlesungsverzeichnis habe ich so angegeben (tauschstube/)
      Bilder
      • 1.jpg

        30,21 kB, 417×319, 233 mal angesehen
      Ja, ich weiß schon warum das kommt, ich guck mir nochmal das PHP Skript an und verbesser das.
      Edit: Skript ist nun überarbeitet und der Fehler ist behoben.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Rinecamo“ ()

      Soweit geht alles, nur jetzt bekomme ich beim Uploaden ein Fehler: siehe Bild
      Der Fehler kommt immer am ende des Uploades.

      VB.NET-Quellcode

      1. System.Reflection.TargetInvocationException wurde nicht behandelt.
      2. Message="Ein Aufrufziel hat einen Ausnahmefehler verursacht."
      3. Source="mscorlib"
      4. StackTrace:
      5. bei System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
      6. bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
      7. bei System.Delegate.DynamicInvokeImpl(Object[] args)
      8. bei System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
      9. bei System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
      10. bei System.Threading.ExecutionContext.runTryCode(Object userData)
      11. bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
      12. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      13. bei System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
      14. bei System.Windows.Forms.Control.InvokeMarshaledCallbacks()
      15. bei System.Windows.Forms.Control.WndProc(Message& m)
      16. bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
      17. bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
      18. bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
      19. bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
      20. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
      21. bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
      22. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
      23. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
      24. bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
      25. bei FTP_Upload.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
      26. bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
      27. bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
      28. bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
      29. bei System.Threading.ThreadHelper.ThreadStart()
      30. InnerException: System.ArgumentOutOfRangeException
      31. Message="Der Wert 200 ist für Value ungültig. Value sollte zwischen 'minimum' und 'maximum' liegen.\r\nParametername: Value"
      32. Source="System.Windows.Forms"
      33. ParamName="Value"
      Bilder
      • Fehler.png

        40,19 kB, 1.070×311, 164 mal angesehen
      So wie deiner:

      VB.NET-Quellcode

      1. Private Sub wc_UploadProgressChanged(ByVal sender As Object, ByVal e As System.Net.UploadProgressChangedEventArgs) Handles wc.UploadProgressChanged
      2. stopuhr.Stop()
      3. Label6.Text = Math.Round((e.BytesSent - temp) / 1024 / (stopuhr.ElapsedMilliseconds / 1000)) & " KB/s"
      4. Label9.Text = Math.Round(e.TotalBytesToSend \ 1024) & " KB / " & Math.Round(e.BytesSent \ 1024) & " KB"
      5. If Not stopuhr.IsRunning Then
      6. If e.ProgressPercentage > 0 Then
      7. If Not ProgressBar1.Value = 100 Then
      8. ProgressBar2.Value = e.ProgressPercentage * 2
      9. Label8.Text = e.ProgressPercentage * 2 & "%"
      10. Else
      11. MessageBox.Show("Datei wurde erfolgreich hochgeladen")
      12. ProgressBar1.Value = 0
      13. Label6.Text = Nothing
      14. Label9.Text = Nothing
      15. Label8.Text = Nothing
      16. cmdFile.Enabled = True
      17. End If
      18. Else
      19. End If
      20. End If
      21. temp = e.BytesSent
      22. stopuhr.Reset()
      23. End Sub
      Es einfach schon extrem fahrlässig, so einen ungeprüften, unsicheren und schwachen Code public zu machen.
      Ich will dich ja nicht zu sehr beleidigen, aber dein Code hat einfach sehr wichtige Lücken die unbedingt geschlossen werden müssen.

      - Da fehlt eine Überprüfung welche Endung die Datei hat (*.php,*.html,*.css,*.js) etc würde ich nicht zulassen.
      - Da fehlt eine Überprüfung der Grösse der Datei. Ansonsten kann man gezielt deinen Webserver extrem belasten bzw überlasten mit wenigen Rechnern

      Es empfiehlt sich eine Whitelist zu machen (Keine Blacklist). Damit meine ich, dass du z.B nur angegebene Formate zulässt. (*.jpg,*.exe) usw.

      Dannach gibt es da noch ein paar Kleinigkeiten auf die du achten solltest beim überprüfen der Dateinamen.
      Wenn du z.B "nur" überprüfst ob ".exe" vorkommt im String, kann man es wieder leicht ausnutzen indem man "filename.exe.php" hochlädt.

      Also da gehört schon ein bisschen Wissen dazu um sowas public zu stellen. Ich würde das so schnell wie möglich überarbeiten. Ansonsten werden Tools mit diesem Code gecodet und dannach wundern sich die User wenn ihr Server ne c99 Shell drauf hat.

      Bei Fragen kannst du dich gerne melden.
      Viele Grüsse

      fixi93 schrieb:

      - Da fehlt eine Überprüfung welche Endung die Datei hat (*.php,*.html,*.css,*.js) etc würde ich nicht zulassen.
      - Da fehlt eine Überprüfung der Grösse der Datei. Ansonsten kann man gezielt deinen Webserver extrem belasten bzw überlasten mit wenigen Rechnern
      Das habe ich vor kurzem erst hinzugefügt.

      Es empfiehlt sich eine Whitelist zu machen (Keine Blacklist). Damit meine ich, dass du z.B nur angegebene Formate zulässt. (*.jpg,*.exe) usw.
      Lässt sich einrichten.


      Dannach gibt es da noch ein paar Kleinigkeiten auf die du achten solltest beim überprüfen der Dateinamen.
      Wenn du z.B "nur" überprüfst ob ".exe" vorkommt im String, kann man es wieder leicht ausnutzen indem man "filename.exe.php" hochlädt.
      Siehe oben.
      - Da fehlt eine Überprüfung welche Endung die Datei hat (*.php,*.html,*.css,*.js) etc würde ich nicht zulassen.

      was soll man in HTML, CSS und JS böses machen können? Nichts Serverseitiges...

      Außerdem gibt es die Möglichkeit den Dateien rechte zu geben, damit die PHP Datei nicht mehr ausführbar ist und nur noch als PlainText behandelt wird...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      Wie baut man des die PHP um dass wenn ein´Ordnername übertragen wird überprüft ob der Ordner existiert und wenn er nicht existiert ihn vorher erstellt und wenn er existiert normal uploadet? hab schon etwas mit mkdir herum experimentiert aber ich komm nicht drauf im gegen teil er erstellt mir die Ordner zwar aber ohne Inhalt und noch obendrein lassen sich de Ordner nicht mehr löschen :)^^

      Meine dieses Script:


      PHP-Quellcode

      1. <?php
      2. $uploaddir = $_GET['d']; // d wird später beim Upload angegeben (Kann aber auch individuell verändert werden)
      3. if (is_uploaded_file($_FILES['file']['tmp_name'])) {
      4. if (strlen($uploaddir) > 0) {
      5. $uploadfile = $uploaddir."/". basename($_FILES['file']['name']);
      6. } else {
      7. $uploadfile = basename($_FILES['file']['name']);
      8. }
      9. // $uploaddir."/". muss beim entfernen von uploaddir oben entfernt werden
      10. echo "File ". $_FILES['file']['name'] ." uploaded successfully. ";
      11. if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
      12. echo "File is valid, and was successfully moved. ";
      13. }
      14. else
      15. print_r($_FILES);
      16. }
      17. else {
      18. echo "Upload Failed!!!";
      19. print_r($_FILES);
      20. }
      21. ?>



      Vielen Dank

      Mfg
      GOOGLE ist mein Meister :)