Unencrypted DB Queries in Transit: تفاوت بین نسخهها
(صفحهای تازه حاوی «آسیب پذیری "Unencrypted DB Queries in Transit" به وضعیتی اطلاق میشود که در آن اپلیکیشن دسکت...» ایجاد کرد) |
(بدون تفاوت)
|
نسخهٔ کنونی تا ۹ آوریل ۲۰۲۳، ساعت ۰۸:۵۱
آسیب پذیری "Unencrypted DB Queries in Transit" به وضعیتی اطلاق میشود که در آن اپلیکیشن دسکتاپ برای ارتباط با پایگاه داده از پروتکلهای امنیتی استفاده نمیکند و دادههایی که بین برنامه دسکتاپ و پایگاه داده جابجا میشوند به صورت رمزنگاری نشده انتقال مییابند. به این ترتیب، مهاجمان میتوانند به راحتی به دادههای ارسالی و دریافتی دسترسی پیدا کنند.
برای مثال، فرض کنید یک برنامه دسکتاپ برای ارتباط با پایگاه داده از دستورات SQL استفاده میکند، اما برای ارتباط با پایگاه داده از SSL/TLS استفاده نمیکند و به جای آن، دادههایی که بین برنامه دسکتاپ و پایگاه داده جابجا میشوند به صورت رمزنگاری نشده انتقال مییابند. در این صورت، مهاجمان میتوانند به راحتی دادههای ارسالی و دریافتی را با استفاده از روشهایی مانند sniffing دسترسی پیدا کرده و از آنها به نحوی سوء استفاده کنند.
برای پیشگیری از این نوع آسیب پذیری، برنامههای دسکتاپ باید از پروتکلهای امنیتی مثل SSL/TLS برای رمزنگاری و امنیت دادههای ارسالی استفاده کنند.
نمونه کد c آسیب پذیر:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql.h>
int main(int argc, char *argv[]) {
MYSQL *conn;
char *server = "localhost";
char *user = "root";
char *password = "password";
char *database = "test";
char *query = "SELECT * FROM users";
conn = mysql_init(NULL);
if (conn == NULL) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
if (mysql_real_connect(conn, server, user, password, database, 0, NULL, 0) == NULL) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
if (mysql_query(conn, query)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
MYSQL_RES *result = mysql_store_result(conn);
if (result == NULL) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}
int num_fields = mysql_num_fields(result);
MYSQL_ROW row;
while ((row = mysql_fetch_row(result))) {
for(int i = 0; i < num_fields; i++) {
printf("%s ", row[i] ? row[i] : "NULL");
}
printf("\n");
}
mysql_free_result(result);
mysql_close(conn);
return 0;
}