FTP Upload/Download über PHP Script

  • C#
  • .NET (FX) 4.0

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von enba.

    Ja, das mit dem FTP ist nämlich auch dann weiterhin eine schlechte Idee, da FTP dafür komplett ungeeignet und weiterhin unsicher ist. Setze Dir eine MySQL-Datenbank auf und manage dann den Zugriff via PHP.
    Ich würde Dir aber raten, das Spiel erstmal flachzulegen und VB.NET ganz zu lernen, denn dann kannst Du das auch mal neu anpacken und brauchst das eig. gar nicht.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    wie @Trade sagt, braucht man eigentlich garkeine zweite programmiersprache.

    Kannte mich zwar noch nie mit VB aus, sollte aber trotzdem locker möglich sein auf ne MySQL Datenbanmk zuzugreifen. Wenn nicht mit VB alleine, dann mit nem geeigneten MySQL-Connector.
    @Goldwing Studios Nein, das hatte ich nicht gesagt, genau andersrum. ;)
    Wenn man (My)SQL benutzt, dann auf jeden Fall mit PHP, denn sonst muss ich ja die Credentials im Source meiner Anwendung angeben, was im selber Ergebnis resultiert, dass das Ganze unsicher ist.
    Wenn eine PHP-Datei auf dem Server liegt, dann ist das egal, wenn da die Daten drinstehen, da die eh immer ausgeführt wird und Du deren Quellcode nicht einsehen kannst, solange Du z. B. nicht gerade auf dem FTP-Server der Person unterwegs bist und Zugriff auf diese Datei hast.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Joa, oooooder
    man benutzt einen mysql "account"(wusste nicht mehr wie das richtig heißt) mit verminderten rechten z.B. SELECT und INSERT.

    Dann ist es "egal" wenn jemand die Zugangsdaten des niederen Zugriffs rausbekommt

    DELETE würde ich selbst machen bzw. einem PHP-Script, da sowas schnell nach hinten losgeht ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Goldwing Studios“ ()

    Das ist trotzdem nicht egal, da kann ja dennoch jeder Daten manipulieren. Alles, was Du benutzt, kann auch ein Angreifer benutzen. Sicherheit und Schutz muss immer zu 100% gewährleistet sein.
    Wie Du siehst, es geht auf dieser Ebene nicht viel sicherer als mit PHP.

    Edit: Wieso hast Du das jetzt eig. wieder rauseditiert? ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Sicher ist immer so ein Ding, klar könnte man sich sicher mit VB mit MySQL verbinden.

    Aber das wäre klar umständlicher als mit PHP.

    Klar ist aber auch hier, das man im PHP-Script alle Parameter abfangen muss, denn wenn die z.B. GET-Parameter unbearbeitet in die Datenbank ballert ist das noch unsicher als ein löchriger Käse.

    Das hier wäre zum Beispiel auch möglich:
    index.php/?db_variable=(DELETE FROM database)


    Damit wären alle daten weg...
    @Trade
    Ich bin nicht auf VB umgestiegen. Bin auf C# umgestiegen da das viel professioneller ist und ich das besser finde zu lernen, da ich dazu auch schon ein Buch habe. Immer noch nicht klar wie ich denn bitte mein C# Programm mit einem PHP Script verknüpfen soll und dazu noch über den Script auf eine Datenbank zugreifen soll, wo ich nebenbei über PHP garkeine Kenntnisse besitze.

    Ich werde das Projekt neu ansetzen wenn ich diese ganzen Sachen(die ich dazu benötige) gelernt habe. Denn im moment habe ich 1 Blockade: C# mit PHP verknüpfen und dann über PHP auf eine Datenbank zugreifen(Hochladen/Runterladen). Ich kann ja nicht alles gleichzeitig lernen.
    @Goldwing Studios Das weiß ich. ;)
    Es ginge sogar noch einfacher, indem man einfach die Datenbank droppt.
    Aber das ist ja alles kein Problem, man kann ja Parameter gut escapen und somit ist alles gut. Es ist mit PHP etwas mehr Aufwand, das evtl. schon, mit VB.NET könnte ich gut das Entity Framework nutzen, das es z. B. in NuGet auch direkt gibt. Das Problem ist, dass wenn Du nicht den Benutzer seine eigenen Daten eingeben lässt, weil er seine eigene Datenbank nutzen soll, sondern weil Deine benutzt werden soll, dann geht das eben so nicht.

    Goldwing Studios schrieb:

    klar könnte man sich sicher mit VB mit MySQL verbinden.

    Da muss ich leider etwas widersprechen, insofern Du Daten in Deiner Anwendung mitlieferst, sind diese auch auslesbar. Klar gibt es Sicherungsverfahren, aber die bringen i. d. R. auch recht wenig, denn irgendwie ist das Ganze immer umgehbar, da die Anwendung am Ende das Ganze "entsichern" müsste.

    Wenn man das mit PHP richtig macht, ist das durchaus sicher.
    btw: Deine URL wäre ungültig. :P

    @AProgrammer Ja, eins nach dem anderen, dann wird das was.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @AProgrammer
    aha, schön deine Einsicht.

    Die ist allerdings völlig Unsinnig(siehe Diskussion hier), da du mit MySQL und C# die gleichen Probleme haben wirst.

    Schau dir mal PHP an, lohnt sich echt und ist relativ einfach zu lernen.

    GET und POST wären so die Übertragungsarten, die du dir anschauen solltest.

    @Trade
    Wenn man das mit PHP richtig macht, ist das durchaus sicher.

    Auf jeden!
    @Goldwing Studios "einfach" ist es sicher nicht.
    Es ist genauso anspruchsvoll wie alle anderen Programmiersprachen.
    ​Ich kann ja nicht alles gleichzeitig lernen.

    PHP GET und POST ist mir bekannt, aber das bringt mir leider wenig wenn ich nicht mal weiß wie ich alles miteinader verknüpfen kann. Ich weis du willst mir helfen, bin auch dankbar aber ich habe da echt keine Ahnung. ?(
    Hab mal ein Sample gemacht wie so ein PHP Script aussehen könnte, nicht ideal, aber ein Anfang.
    Die SQL habe ich highscore genannt, sie hat eine Tabelle tbl_user, mit drei Spalten id->INT->autoincrement, name TEXT(256), score BIGINT.

    Müsste man noch ein wenig sicherer machen, so könnte jeder via WebBrowser einen Highscore eintragen.

    Beispielurls:
    http://localhost/index.php?func=insert&name=deiner&score=152454
    localhost/index.php?func=getall
    localhost/index.php?func=gettop10

    PHP-Quellcode

    1. <?php
    2. define('DB_HOST', 'localhost');
    3. define('DB_USER', 'root');
    4. define('DB_PASS', '');
    5. define('DB_NAME', 'highscore');
    6. class FunctionSelector{
    7. public static function Select(){
    8. if(isset($_REQUEST['func']) && !empty($_REQUEST['func'])){
    9. if(function_exists($_REQUEST['func'])){
    10. call_user_func($_REQUEST['func']);
    11. }
    12. }
    13. }
    14. }
    15. FunctionSelector::Select();
    16. //returns 0 when cant insert
    17. //returns 1 when is insert
    18. //returns 2 when highscore and user exist
    19. //returns 3 if user is not set or empty
    20. //returns 4 if score is not set or empty
    21. function Insert(){
    22. $user = $_REQUEST['user'];
    23. $score = $_REQUEST['score'];
    24. if(isset($user) && !empty($user)){
    25. if(isset($score) && !empty($score)){
    26. $pdo_handle = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS);
    27. $query = "SELECT * FROM tbl_user WHERE name = :name AND score = :score";
    28. $query = preg_replace('/\, $/', '', $query);
    29. $statement = $pdo_handle->prepare($query);
    30. $statement->bindParam(':name', $user);
    31. $statement->bindParam(':score', $score);
    32. $statement->execute();
    33. if ($statement->rowCount() == 0){
    34. $query = "INSERT INTO tbl_user(name, score) VALUES (:name, :score)";
    35. $query = preg_replace('/\, $/', '', $query);
    36. $statement = $pdo_handle->prepare($query);
    37. $statement->bindParam(':name', $user);
    38. $statement->bindParam(':score', $score);
    39. echo $statement->execute();
    40. } else {
    41. echo 2;
    42. }
    43. } else {
    44. echo 4;
    45. }
    46. } else {
    47. echo 3;
    48. }
    49. }
    50. function GetAll(){
    51. $pdo_handle = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS);
    52. $query = "SELECT * FROM tbl_user";
    53. $statement = $pdo_handle->prepare($query);
    54. $statement->execute();
    55. $results=$statement->fetchAll(PDO::FETCH_ASSOC);
    56. echo json_encode($results);
    57. }
    58. function GetTop10(){
    59. $pdo_handle = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS);
    60. $query = "SELECT * FROM tbl_user ORDER BY score DESC limit 10";
    61. $statement = $pdo_handle->prepare($query);
    62. $statement->execute();
    63. $results=$statement->fetchAll(PDO::FETCH_ASSOC);
    64. echo json_encode($results);
    65. }


    V Edit: @Trade Gut dann nutz ich das demnächst.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Murdock“ ()

    @Murdock Ist TEXT nicht veraltet? Würde auf jeden Fall VARCHAR verwenden. 20 Zeichen sollte eig. auch reichen.
    @AProgrammer Wie sieht das denn aus, beherrscht Du SQL?

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @nafets Korrigiere mich, wenn ich falsch liege, aber sollte das bei PDO nicht automatisch schon geschehen? Afaik muss es zumindest nur bei MySQLi sein. (Wenn ich mich recht entsinne sollten diese zumindest gegen die 1. Order Injection sicher sein)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    @AProgrammer C# und VB basieren beide auf dem .NET Framework und kompilieren am Ende zu MSIL.
    Professioneller oder nicht gibt es mMn also nicht, man kann auch in VB ordentlich programmieren. C# arbeitet
    nur generell sauberer, weil es keine impliziten Konvertierungen zulässt oder Altlasten trägt, die von unerfahrenen
    Nutzern gerne missbraucht werden.

    Zum Thema PHP und PreparedStatements:

    PHP-Quellcode

    1. $prep = $this -> pdo -> prepare ("SELECT id FROM users WHERE name=:name LIMIT 1");
    2. $prep -> bindValue (':name', $username);
    3. $prep -> execute ();


    Das PDO-Object bekommst du so:

    PHP-Quellcode

    1. $this -> pdo = new PDO("mysql:host=HOST;dbname=DBNAME", "DBUSER", "DBPASS");


    PHP wird generell serverseitig ausgeführt und ist für den Nutzer nicht einsehbar. Man kann durch Fehler maximal
    kleine Einblicke in den Code bekommen, weshalb du Fehler eventuell vermeiden solltest. Dazu kannst du den ErrorMode
    des PDO-Objektes setzen, siehe Google.

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Nikx“ ()