Onlineverwaltung - Möglichkeiten ?

  • Guten Abend allerseits.
    Ich suche eine (sichere) Alternative zu FTP, welches leicht verständlich ist, sicher und schnell.
    Aktuell benutze ich zwar einen FTP Speicher, da ich aber mehrere Programme für fremde Nutzer geschrieben habe,
    welche Dateien auf den FTP uploaden, lässt sich das Passwort binnen Minuten sniffen.
    Bisher hatte ich das Glück, dass das nur Leute gemacht haben, die mir die Nachricht zukommen ließen und freundlich waren,
    aber man muss ja trotzdem nicht alles offenstehen lassen in der Hoffnung, dass niemand etwas macht....

    Wenn ihr eine Alternative nennt,
    so gebt mir bitte einen Link zu einem Tutorial (Include wäre natürlich ebenfalls schön), damit ich da nicht "reinworfen" werde,
    sondern mir das in Ruhe durchlesen kann.

    Am liebsten wäre mir ein Mechanismus wie bei
    FIleRead* und Ini* (also FileReadLine,FileWriteLine,_FileWriteToLine,IniRead,IniReadSection etc.)

    Habe aktuell "nur" einen Server bei funpic gehostet, wo Datenbanken glaube ich dabei sind....

    Mfg,
    Dankeschön

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

    2 Mal editiert, zuletzt von Dankeschön (29. Oktober 2009 um 21:09)

  • Gibt es noch andere (evt. einfachere ;) ) Möglichkeiten, um Daten sicher hoch- & runterzuladen ?

    Die Tutorials von MySQL etc. zeigen nur, wie man eine Datenbank offline verwaltet, nicht wie man das mit einem Onlinespeicher durchzieht...

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

  • Verstehe das nicht so richtig :(

    Am liebsten hätte ich ein fertiges Skript, wo ich mir die Sachen nur abschauen muss...

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

  • oke also hier die beiden Dateien die Du brauchst:

    1. Das AutoIT Skript:

    Spoiler anzeigen
    [autoit]

    #include<File.au3>
    #include<Array.au3>
    Global $MIMETypes[200][2]
    Local $line
    If Not FileExists(@ScriptDir & "\MIMETypes.txt") Then
    If MsgBox(36, 'PostData', "MIMETYpes.txt fehlt. Downloaden?") = 6 Then
    InetGet("http://pastebin.com/pastebin.php?dl=f7401663f",@ScriptDir & "\MIMETypes.txt")
    EndIf
    EndIf
    $mime = FileOpen(@ScriptDir & "\MIMETypes.txt", 0)
    For $i = 0 To 199
    $line = FileReadLine($mime)
    If @error = -1 Then ExitLoop
    $line = StringSplit($line, @TAB)
    $MIMETypes[$i][0] = $line[1]
    $MIMETypes[$i][1] = $line[2]
    Next
    FileClose($mime)

    [/autoit] [autoit][/autoit] [autoit]

    If $i < 1 Then $i = 1
    ReDim $MIMETypes[$i][2]

    [/autoit] [autoit][/autoit] [autoit]

    _ArraySort($MIMETypes, 0, 0, 0, 2)

    [/autoit] [autoit][/autoit] [autoit]

    ;####################### FUNKTION STARTEN ########################################
    Local $form_fields[2][2] = [["password", "1234"],["filename", ".././Datas/test.ico"]];passwort + zielpfad der datei
    Local $form_files[1][2] = [["datei", "D:\m.ico"]];lokale datei, die hochgeladen werden soll

    [/autoit] [autoit][/autoit] [autoit]

    $x = post_multipart("http://deinserver.de/PHP/upload.php", "", $form_fields, $form_files);pfad zu deiner php datei

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(">Header: " &@CRLF & $x[0] & @CRLF &@CRLF)
    ConsoleWrite(">Body: " & @CRLF & $x[1] & @CRLF)
    ;###################################################################################
    ;jedes mal wenn eine datei hochgeladen werden soll, musst du diesen abschnitt verwenden, consolewrite kannst du weglassen
    ;am besten machst du das in eine Funktion und setzt für lokale datei und zielpfad zwei parameter, so musst du das nicht immer neu machen;)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func post_multipart($host, $selector, ByRef $fields, ByRef $files)
    ;~ """
    ;~ Post fields and files to an http host as multipart/form-data.
    ;~ fields is a sequence of (name, value) elements for regular form fields.
    ;~ files is a sequence of (name, filename, value) elements for data to be uploaded as files
    ;~ Return the server's response page.
    ;~ """
    Local $Return = encode_multipart_formdata($fields, $files)
    $content_type = $Return[0]
    ;~ $body = $Return[1]
    $h = _InetConnect($host)
    $Request = "POST " & $h[1] & " HTTP/1.1" & @CRLF
    $Request &= ('Host: ' & $h[2]) & @CRLF
    $Request &= ('content-type: ' & $content_type) & @CRLF
    $Request &= ('content-length: ' & StringLen($Return[1])) & @CRLF
    $Request &= @CRLF
    ;~ ConsoleWrite($Request & $Return[1] & @CRLF)
    _InetSend($h, $Request & $Return[1])
    ;~ _InetSend($h, $Return[1])
    ;~ errcode, errmsg, headers = h.getreply()
    Return _InetReceive($h)
    EndFunc ;==>post_multipart
    Func encode_multipart_formdata($fields, $files)
    ;~ """
    ;~ fields is a sequence of (name, value) elements for regular form fields.
    ;~ files is a sequence of (name, filename, value) elements for data to be uploaded as files
    ;~ Return (content_type, body) ready for httplib.HTTP instance
    ;~ """
    Local Const $BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$'
    ;~ CRLF = '\r\n'
    $L = ""
    For $i = 0 To UBound($fields) - 1
    $L &= ('--' & $BOUNDARY) & @CRLF
    $L &= ('Content-Disposition: form-data; name="' & $fields[$i][0] & '"') & @CRLF
    $L &= @CRLF
    $L &= $fields[$i][1] & @CRLF
    Next
    For $i = 0 To UBound($files) - 1
    $L &= ('--' & $BOUNDARY) & @CRLF
    $L &= ('Content-Disposition: form-data; name="' & $files[$i][0] & '"; filename="' & $files[$i][1] & '"') & @CRLF
    $content_type = get_content_type($files[$i][1])
    $L &= ('Content-Type: ' & $content_type) & @CRLF
    $L &= @CRLF
    ;~ If StringLeft($content_type, 5) <> "text/" Then
    ;~ $f = FileOpen($files[$i][1], 16)
    ;~ $L &= BinaryToString(FileRead($f)) & @CRLF
    ;~ FileClose($f)
    ;~ Else
    $L &= FileRead($files[$i][1]) & @CRLF
    ;~ EndIf
    Next
    $L &= ('--' & $BOUNDARY & '--') & @CRLF
    $L &= @CRLF

    [/autoit] [autoit][/autoit] [autoit]

    $content_type = 'multipart/form-data; boundary="' & $BOUNDARY & '"'
    Local $Return[2] = [$content_type, $L]
    ;~ return content_type, body
    Return $Return
    EndFunc ;==>encode_multipart_formdata

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Func get_content_type(filename):
    ;~ return mimetypes.guess_type(filename)[0] or 'application/octet-stream'
    ;~ EndFunc
    Func get_content_type($path)
    ;~ Return "application/octet-stream"
    Local $szDrive, $szDir, $szFName, $szExt
    _PathSplit($path, $szDrive, $szDir, $szFName, $szExt)
    ConsoleWrite(StringTrimLeft($szExt, 1) & @CRLF)
    If StringTrimLeft($szExt, 1) = "" Then Return 'application/octet-stream'
    Local $mimeid = _ArrayBinarySearch2D($MIMETypes, StringTrimLeft($szExt, 1))
    ;~ ConsoleWrite($mimeid & @error & @CRLF)
    If $mimeid = -1 Then Return SetError(1, 0, 'application/octet-stream')
    Return $MIMETypes[$mimeid][1]
    EndFunc ;==>get_content_type
    ;===============================================================================
    ;
    ; Function Name: _ArrayBinarySearch()
    ; Description: Uses the binary search algorithm to search through a
    ; 1-dimensional array.
    ; Author(s): Jos van der Zande <jdeb at autoitscript dot com>
    ;
    ;===============================================================================
    Func _ArrayBinarySearch2D(Const ByRef $avArray, $vValue, $iStart = 0, $Column = 0, $iEnd = 0)
    If Not IsArray($avArray) Then Return SetError(1, 0, -1)

    [/autoit] [autoit][/autoit] [autoit]

    Local $iUBound = UBound($avArray) - 1

    [/autoit] [autoit][/autoit] [autoit]

    ; Bounds checking
    If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound
    If $iStart < 0 Then $iStart = 0
    If $iStart > $iEnd Then Return SetError(4, 0, -1)

    [/autoit] [autoit][/autoit] [autoit]

    Local $iMid = Int(($iEnd + $iStart) / 2)

    [/autoit] [autoit][/autoit] [autoit]

    If $avArray[$iStart][$Column] > $vValue Or $avArray[$iEnd][$Column] < $vValue Then Return SetError(2, 0, -1)

    [/autoit] [autoit][/autoit] [autoit]

    ; Search
    While $iStart <= $iMid And $vValue <> $avArray[$iMid][$Column]
    If $vValue < $avArray[$iMid][$Column] Then
    $iEnd = $iMid - 1
    Else
    $iStart = $iMid + 1
    EndIf
    $iMid = Int(($iEnd + $iStart) / 2)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    If $iStart > $iEnd Then Return SetError(3, 0, -1) ; Entry not found

    [/autoit] [autoit][/autoit] [autoit]

    Return $iMid
    EndFunc ;==>_ArrayBinarySearch2D

    [/autoit] [autoit][/autoit] [autoit]

    ; Made from _InetGetSourcePost by GtaSpider
    Func _InetConnect($sURL)
    Local $iSocket, $sHeader, $sRecv, $iIP, $sHost, $aRegExp, $sHttp1, $iErr, $iSend

    [/autoit] [autoit][/autoit] [autoit]

    If $sURL = '' Then Return SetError(1, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    If StringLeft($sURL, 7) <> 'http://' And StringLeft($sURL, 8) <> 'https://' Then $sURL = "http://" & $sURL
    ;~ If StringRight($sURL, 1) <> "/" Then $sURL &= "/"

    [/autoit] [autoit][/autoit] [autoit]

    $aRegExp = StringRegExp($sURL, "http?://(.*?)/", 3)
    If @error Then Return SetError(2, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $sHost = $aRegExp[0]
    If $sHost = '' Then Return SetError(3, 0, 0)

    [/autoit] [autoit][/autoit] [autoit]

    $sHttp1 = StringTrimLeft($sURL, StringInStr($sURL, "/", -1, 3) - 1)
    If $sHttp1 = '' Then Return SetError(3, 0, 0)
    TCPStartup() ;If not already done
    $iIP = TCPNameToIP($sHost)
    If $iIP = '' Or StringInStr($iIP, ".") = 0 Then Return SetError(4, 0, 0)
    $iSocket = TCPConnect($iIP, 80)
    If @error Or $iSocket < 0 Then Return SetError(5, 0, 0)
    Local $Return[3] = [$iSocket, $sHttp1, $sHost]
    Return $Return
    EndFunc ;==>_InetConnect
    ; Made from _InetGetSourcePost by GtaSpider
    Func _InetSend($iSocket, $sData)
    Local $iSend = TCPSend($iSocket[0], $sData)
    If @error Or $iSend < 1 Then Return SetError(6, 0, 0)
    Return 1
    EndFunc ;==>_InetSend
    ; Made from _InetGetSourcePost by GtaSpider
    Func _InetReceive($iSocket)
    Local $sRecv, $aReturn, $iErr
    While 1
    $sRecv = TCPRecv($iSocket[0], 1024)
    $iErr = @error
    If $sRecv <> '' Then
    While 1
    $sRecv &= TCPRecv($iSocket[0], 1024)
    If @error Then ExitLoop 2
    WEnd
    EndIf
    If $iErr Then Return SetError(7, 0, 0)
    WEnd
    TCPShutdown()
    Local $aReturn[2]
    $aReturn[0] = StringLeft($sRecv, StringInStr($sRecv, @CRLF & @CRLF) - 1)
    $aReturn[1] = StringTrimLeft($sRecv, StringLen($aReturn[0]) + 4)
    Return $aReturn
    EndFunc ;==>_InetReceive

    [/autoit]

    2. Das PHP Skript

    Spoiler anzeigen
    PHP
    <?php
    ($_POST["password"] == "1234") Or die("NOT AUTH");
    (!empty($_POST["filename"])) Or die("NO FILENAME");
    move_uploaded_file($_FILES['datei']['tmp_name'], './' . $_POST['filename']);
    echo   	"./".$_POST["filename"];
    if (!file_exists( "./".$_POST["filename"])) die("\nUpload NICHT erfolgreich");
    echo "\nUpload erfolgreich";
    ?>

    die PHP datei lädst du auf deinen server, und in dein Skript schreibst du die url zu deiner upload.php hinein
    ich hoffe das reicht dir jetz zum verständnis, denn dein komplettes skript wird hier kaum jemand schreiben ;)


  • Habe das nun soweit alles verstanden.
    Trotzdem bleibt für mich eine Frage offen, und zwar ob die Verbindung (nicht der Dateiinhalt) sicher ist...
    ALso ob man nicht einfach wie bei diesem php-verfahren den string abhören kann ( https://autoit.de/www.meineurl.de/post.php?string=unsicher ) und damit dann unsinn bauen kann...

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön