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; }