Fernsteuern des <input type="File"/> Tags

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Fernsteuern des <input type="File"/> Tags

    Hallo,

    ich habe folgendes Problem:
    Eine Website besitzt ein <input type="File"/> Tag, das mit javascript und value="meinePfadundFileangabe" oder Files[0]="meinePfadUndFileangabe" leider aus (von Netzseiten nicht näher erläuterten) sicherheitsgründen nicht fernzusteuern sei.
    Das möchte ich aber trotzdem gerne tun :-). (Übrigens value und Files[0] werden gesetz, nur vom Tag der Seite ignoriert, also nicht auf der Seite angezeigt)
    Nun, es gibt in VB .net die schöne Möglichkeit, API-Funktionene einzubinden.

    Quellcode

    1. Public class Beispiel
    2. 'Entweder so:
    3. Private Declare Function GetActiveWindow Lib "user32" () As IntPtr
    4. Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As IntPtr,
    5. ByVal lpString As StringBuilder, ByVal nMaxCount As Integer) As Integer
    6. Private Declare Function GetForegroundWindow Lib "user32" () As IntPtr
    7. 'oder so:
    8. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    9. Private Shared Function SetWindowText(ByVal hwnd As IntPtr, ByVal lpString As String) As Boolean
    10. End Function
    11. <DllImport("user32", SetLastError:=True, CharSet:=CharSet.Auto)>
    12. Public Shared Function FindWindowEx(ByVal hWndParent As IntPtr, ByVal hWndChildAfter As IntPtr, ByVal lpszClass As String, ByVal lpszWindow As String) As IntPtr
    13. End Function
    14. Private Sub Beispiel_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    15. 'Vorausgesetzt, Beispiel hat einen Webbrowserplugin, dass eine Seite mit dem Tag aufruft und schon mal draufklickt, um den Dialog zu öffnen.
    16. '...
    17. End Sub
    18. Private Sub Beispiel_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles Beispiel.DocumentCompleted
    19. 'Klick input type='File' Tag
    20. 'Mach_mal_was evntl. in einem jetzt gestarteten Timer aufrufen, falls auf das Dialogfenster gewartet werden muss.
    21. Mach_mal_was()
    22. End Sub
    23. Private Sub Mach_mal_was()
    24. Dim WHnd As IntPtr = GetForegroundWindow() 'Passt bei mir grad, geht aber auch FIndWindow oder GetActiveWindow
    25. Dim myTest AS Boolean = False
    26. myTest = SetWindowText(WHnd, "Ich wusste ich schaffs ...")
    27. If myTest Then MsgBox("Wie man sieht wurde das richtige Fenster umgetitelt",vbInformation,"Debug Information")
    28. End Sub
    29. End Class

    Soweit so gut. Das bedeutet, ich bekomme schon mal die Speicherstelle des Fensters und mit C oder C++ käme ich da wohl auch weiter, aber ich bin auf VB angewiesen bei dem Tool, aus dem das Problem stammt.
    Es geht also, jedoch komme ich mit SendMessage nicht weiter, um Pfad und File zu setzen. (Vmtl. gibt's das Gegenstück im Dialog nicht(?))
    Kennt jemand eine Möglichkeit, dem Dialog trotzdem das File beizubiegen?

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „DrSeltsam“ ()

    Schonmal SendKeys probiert?
    Aber Moment:

    DrSeltsam schrieb:

    Eine Website besitzt ein [...] Tag, das [...] aus [...] sicherheitsgründen nicht fernzusteuern sei.
    Wenn der Anbieter das nicht will, bestünde die Möglichkeit, dass wir durch Hilfestellung Beihilfe zu einer Straf(?)tat leisten. Kommt nicht so gut im Forum.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also deine heransgehensweise würde ich ändern, keine weitere Funktion aus der WinApi benötigt. Aus Sicherheitsgründen damit nicht jeder Webseitenbetreiber via JS dein Dateisystem Scannen und beliebige Dateien hochladen kann, muss im Webbroser eine interaktion dazu vom User stammen. Deshalb wird das so nichts. Selbst wenn du einen Pfad, wie "C:/tmp/eine.txt" da rein bekommst wird es dir nichts nützen. Baue das was da im Webbrowser passiert einfach nach, also Verkehr mitschneiden und dann nachbauen. Ohne Webbrowser-Control, nur WebRquest & co, evtl. JS interpreter.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Vielen Dank für die Antworten,

    mit dem Füllen des Dateipfades ist nichts schlimmes verbunden. Es geht nur darum, Benutzer zu entlasten und immer die richtige Datei zu senden, ohne dass ich mich darauf verlassen muss, das meine User die richte zuvor für sie erstellte Datei reinschreiben. Na, ja; muss ich mir halt einen anderen DAU-sicheren Weg überlegen...

    LG
    Andreas.

    DrSeltsam schrieb:

    muss ich mir halt einen anderen DAU-sicheren Weg überlegen...
    Du hast dafür bereits das richtige Rezept bekommen:

    NoIde schrieb:

    Baue das was da im Webbrowser passiert einfach nach, also Verkehr mitschneiden und dann nachbauen. Ohne Webbrowser-Control, nur WebRquest & co, evtl. JS interpreter.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --