MySQL / CGI: la password nel file sorgente C non è sicura?

1

Questa linea è una cattiva pratica da un punto di vista della sicurezza?

connect = mysql_real_connect(connection, "host", "user", "password", "database", 0, (const char *)NULL, 0);

Se sì, quale soluzione useresti?

Modifica

void get_credentials(char* host, char* name, char* passwd, char* db) {
  char string_path[80] = "/etc/.acro";
  struct stat sb;
  stat(string_path, &sb);
  int file_OK = FILE_OK;
  if (sb.st_mode == 0644) {
    fprintf(stderr, "Corrupt login file: permissions");
    file_OK = FILE_BAD;
  }
  /* if(file_meta->st_uid != ???) {
       fprintf(stderr, "Corrupt login file: owner");
       file_OK = FILE_BAD;
     } */
  if(file_OK) {
    FILE *login_file = fopen(string_path, "r");
    fgets(host, 80, login_file);
    fgets(name, 80, login_file);
    fgets(passwd, 80, login_file);
    fgets(db, 80, login_file);
    host[strcspn (host, "\n")] = '
// 33216 = 100700 in octal => rwx for owner only
if (sb.st_mode != 33216) { 
    printf("Corrupt login file: permissions");
    file_OK = FILE_BAD;
}
'; name[strcspn (name, "\n")] = '
connect = mysql_real_connect(connection, "host", "user", "password", "database", 0, (const char *)NULL, 0);
'; passwd[strcspn (passwd, "\n")] = '
void get_credentials(char* host, char* name, char* passwd, char* db) {
  char string_path[80] = "/etc/.acro";
  struct stat sb;
  stat(string_path, &sb);
  int file_OK = FILE_OK;
  if (sb.st_mode == 0644) {
    fprintf(stderr, "Corrupt login file: permissions");
    file_OK = FILE_BAD;
  }
  /* if(file_meta->st_uid != ???) {
       fprintf(stderr, "Corrupt login file: owner");
       file_OK = FILE_BAD;
     } */
  if(file_OK) {
    FILE *login_file = fopen(string_path, "r");
    fgets(host, 80, login_file);
    fgets(name, 80, login_file);
    fgets(passwd, 80, login_file);
    fgets(db, 80, login_file);
    host[strcspn (host, "\n")] = '
// 33216 = 100700 in octal => rwx for owner only
if (sb.st_mode != 33216) { 
    printf("Corrupt login file: permissions");
    file_OK = FILE_BAD;
}
'; name[strcspn (name, "\n")] = '%pre%'; passwd[strcspn (passwd, "\n")] = '%pre%'; db[strcspn (db, "\n")] = '%pre%'; fclose(login_file); } }
'; db[strcspn (db, "\n")] = '%pre%'; fclose(login_file); } }

Modifica 2

Il controllo dell'autorizzazione dovrebbe assomigliare a questo per un file 700:

%pre%     
posta Emanuel Berg 03.07.2012 - 10:07
fonte

1 risposta

8

Sì, per diversi motivi.

Uno, qualcuno con accesso in lettura al binario potrebbe potenzialmente eseguire il comando strings e cercare possibilità probabili vicino alla frase "localhost".

Due, se decidi di usare il programma altrove, hai attualmente le opzioni di 1) impostare esattamente lo stesso database su localhost con lo stesso nome utente e password ( veramente non saggio) o 2) modifica del codice sorgente e ricompilazione per la seconda piattaforma.

Alterare il programma per leggere i dati di connessione da un file di configurazione in /etc/programname/program.conf o ~/.programname/ a seconda del gusto, e farlo insistere per avere le autorizzazioni di directory impostate su 700 e applicare la proprietà appropriata.

    
risposta data 03.07.2012 - 10:26
fonte

Leggi altre domande sui tag