// Typically, you include the header "mysql.h" with function and type declarations.
// In this example, only the required lines from the header are quoted.
typedef struct _MYSQL MYSQL;
MYSQL *mysql_real_connect(MYSQL *mysql,
const char *host, const char *user, const char *passwd,
const char *db, unsigned int port, const char *unix_socket,
unsigned long client_flag);
typedef void * DbHandle;
extern MYSQL *sql;
// File that uses functions from "mysql.h"
const char *host = "localhost";
char *user = "guest";
char *passwd;
DbHandle connect_to_database_server(const char *db)
{
passwd = (char*)"guest";
return (DbHandle)
mysql_real_connect (sql, host, user, passwd, db, 0, 0x0, 0);
}
В этом примере аргументы host
(имя хоста), user
(имя пользователя), и passwd
(пароль) являются строковыми литералами и непосредственно доступны в коде.
Запрос сгенерированного двоичного файла для строк ASCII может открыть эту информацию.
Коррекция - чтение конфиденциальных данных из защищенных файлов строенияОдним из возможных коррекций является чтение данных из файла строения. В следующем исправленном примере вызов функции connect_to_database_server_init
предположительно считывает имя узла, имя пользователя и пароль в его аргументы из защищенного файла строения.
// Typically, you include the header "mysql.h" with function and type declarations.
// In this example, only the required lines from the header are quoted.
typedef struct _MYSQL MYSQL;
MYSQL *mysql_real_connect(MYSQL *mysql,
const char *host, const char *user, const char *passwd,
const char *db, unsigned int port, const char *unix_socket,
unsigned long client_flag);
typedef void * DbHandle;
extern MYSQL *sql;
// File that uses functions from "mysql.h"
int connect_to_database_server_init(const char **host,
const char **user,
const char **passwd,
const char **db);
DbHandle connect_to_database_server(const char *db)
{
const char *host_from_cfg;
const char *user_from_cfg;
const char *passwd_from_cfg;
const char *db_from_cfg;
if (connect_to_database_server_init(&host_from_cfg,
&user_from_cfg,
&passwd_from_cfg,
&db_from_cfg))
{
return (DbHandle)
mysql_real_connect (sql, host_from_cfg, user_from_cfg,
passwd_from_cfg, db_from_cfg, 0, 0x0, 0);
}
else
return (DbHandle)0x0;
}