c++ mysql login ist dieser code sicher ?



  • ich habe den code geschrieben und n kumpel sagte das der code total unsicher , müll ist

    was sagt ihr dazu ?

    //http://gaming-friends.ath.cx
    
    #include <windows.h> 
    #include <mysql.h>
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string>
    
    #pragma comment (lib,"libmysql.lib") 
    #pragma comment (lib,"mysqlclient.lib")
    #pragma comment (lib,"menu.lib")
    
    #include "lib.h"
    
    using namespace std;
    
    char user_menu();
    char admin_menu();
    
       string user_eingabe;
    
       char ip[200]   = "ip";
       char name[100]   = "user";
       char pass[100]   = "pass";
       char db[100]   = "db";
    
    __declspec(dllexport) void lade_login()
    {
       anfang:
    
       MYSQL* mysql;
       mysql = mysql_init(NULL);
    
       if(mysql_real_connect(mysql,ip,name,pass,db,0,NULL,0) != 0) 
       {
          system("cls");
          cout << "Connectet to mysql" << endl;
       }
       else
       {
          MessageBoxA(NULL,"Der Mysql Server ist offline","Der Mysql Server ist offline",MB_ICONERROR);
          exit(0);
       }
       string pass_eingabe;
       string user_check;
       string pass_check;
       string gesperrt;
       string gesperrt_check;
    
       string admin;
       string admin_check;
    
       cout << "User Name: ";
       cin >>user_eingabe;
       system("cls");
       cout << "User Pass: ";
       cin >>pass_eingabe;
       system("cls");
       cout << "Connect to server" << endl;
       cout << "->Suche " << user_eingabe << endl;
       cout << "->Suche " << "pass" << endl;
    
    string suche1;
    string suche2;
    
          suche1 =  "SELECT pass FROM server_user WHERE user = \"" + user_eingabe + "\"";
          suche2 = mysql_query(mysql,suche1.c_str());
    
          MYSQL_RES *res; 
          MYSQL_FIELD *field; 
          MYSQL_ROW row; 
    
          res = mysql_store_result(mysql); 
          field = mysql_fetch_field(res); 
    
          while(row = mysql_fetch_row(res)) 
          { 
             int nCols = mysql_num_fields(res); 
    
             for(int i=0; i<nCols; ++i) 
    
                pass_check = row[i];
    
          }
    
          if( pass_eingabe == pass_check)
          {
             system("cls");
                cout << "Connect to server" << endl;
                cout << "->Suche " << user_eingabe <<  " ok " << endl;
                cout << "->Suche " << "pass"  << " ok "<< endl;
    
             string gesperrt = "0";
    
             suche1 =  "SELECT gesperrt FROM server_user WHERE user = \"" + user_eingabe + "\"";
             suche2 = mysql_query(mysql,suche1.c_str());
    
             MYSQL_RES *res; 
             MYSQL_FIELD *field; 
             MYSQL_ROW row; 
    
             res = mysql_store_result(mysql); 
             field = mysql_fetch_field(res); 
    
             while(row = mysql_fetch_row(res)) 
             { 
                int nCols = mysql_num_fields(res); 
    
                for(int i=0; i<nCols; ++i) 
    
                   gesperrt_check = row[i];
    
             }
    ///////////////////////////////////////////////////////////
                if ( gesperrt == gesperrt_check)
                {
                   suche1 =  "SELECT admin FROM server_user WHERE user = \"" + user_eingabe + "\"";
                   suche2 = mysql_query(mysql,suche1.c_str());
    
                   MYSQL_RES *res; 
                   MYSQL_FIELD *field; 
                   MYSQL_ROW row; 
    
                   res = mysql_store_result(mysql); 
                   field = mysql_fetch_field(res); 
    
                   while(row = mysql_fetch_row(res)) 
                   { 
                      int nCols = mysql_num_fields(res); 
    
                      for(int i=0; i<nCols; ++i) 
    
                         admin_check = row[i];
    
                   }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
                   if(admin_check == "0")
                   {
                      cout << endl << "Lade user menu" << endl;
                      //Hier kommt das User menu rein oder was auch immer der user machen soll
                   }
                   else
                   {
                      cout << endl << "Lade Admin menu" << endl;
                      //Hier kommt das Admin menu rein oder was auch immer der Admin machen soll
                   }
                }
                else
                {
                   MessageBoxA(NULL,"Ihr Account ist Gesperrt","Ihr Account ist Gesperrt",MB_ICONINFORMATION);
                }
             }
             else
             {
                MessageBoxA(NULL,"Falscher User name oder Password","Falscher User name oder Password",MB_ICONINFORMATION);
             }
    
          system("cls");
          cout << "Connect to server" << endl;
          cout << "->Suche " << user_eingabe <<  " NICHT GEFUNDEN " << endl;
          cout << "->Suche " << "pass"  << " NICHT GEFUNDEN   "<< endl;
    
          goto anfang;
    }
    


  • Und auf welche Art von Sicherheit bezieht sich deine Frage? Du solltest deine Bedenken wirklich genuer aufführen, damit steigerst du auch die Qualität und die Brauchbarkeit der Antworten.

    Daher eine allgemeine Antwort: Wenn du Passwörter, etc. im Programm fest einprogrammierst, dann lassen diese sich mit einem Hexeditor auslesen.



  • also ich bin gerade mit einem kumpel dabei ein server remote zu schreiben wo auch persönliche daten gespeichert werden und er sagte das dieser art von code
    zu unsicher ist, das man ihn zu leicht entschlüßeln kann, da da ja passwörter e-mail und andere sachen gespeichert werden



  • Sehe ich das richtig, dass der Client sich das richtige Passwort vom MySQL-Server holt und es dann selbst mit dem eingegeben vergleicht?
    Sehe ich weiterhin richtig, dass das Passwort der MySQL-Datenbank selbst im Programm enthalten ist?
    Wenn dem so ist, hat dein Kumpel völlig recht.
    Faustregel: alles, was das Programm kennt, kennt auch der User.
    Damit hat jeder freien Zugriff auf die MySQL-Datenbank, inklusive der Passwörter aller anderen Nutzer.



  • was würdet ihr den vorschlagen wie ich was machen kann ?



  • Letztendlich kannst du nur verlieren. Du kannst das Programm nicht tatsächlich sicherer machen, da die Daten ja irgendwoher kommen sollen. Selbst wenn du den User jedes mal nach dem Passwort für die Datenbank fragst, kann er noch immer in deiner Datenbank rumhacken...

    Du müsstest daher z.B. ein PHP-Script schreiben, welches den gesamten Zugrif regelt. Der User könnte sich dann bei dem Script einloggen und erhält nur die Daten, die für ihn vorgesehen sind. Dafür sorgt das Script. Auch die Daten für die Datenbank hat nur das Script...

    Du müsstest dann allerdings eine Webseite aufrufen und den Inhalt auswerten. Dazu gibt es aber unter Windows fertige Funktionen bzw. auch schon fertige Libs, wie z.B. libcurl.



  • Du brauchst noch ein Serverprogramm dazwischen. Der Client verbindet sich mit dem Server und sendet Loginname und Passwort.
    Der Server sendet daraufhin eine Anfrage an den MySQL-Server (auf den sonst niemand Zugriff hat!) und vergleicht Username/Passwort.
    Daraufhin teilt der Server dem Client mit, ob die Kombination richtig war oder nicht.



  • Athar schrieb:

    Du brauchst noch ein Serverprogramm dazwischen. Der Client verbindet sich mit dem Server und sendet Loginname und Passwort.
    Der Server sendet daraufhin eine Anfrage an den MySQL-Server (auf den sonst niemand Zugriff hat!) und vergleicht Username/Passwort.
    Daraufhin teilt der Server dem Client mit, ob die Kombination richtig war oder nicht.

    oje hm mal kucken wie ich das hin bekomme ^^


Anmelden zum Antworten