نمایش پست تنها
  #61  
قدیمی 01-28-2012
دانه کولانه آواتار ها
دانه کولانه دانه کولانه آنلاین نیست.
    مدیر کل سایت
        
کوروش نعلینی
 
تاریخ عضویت: Jun 2007
محل سکونت: کرمانشاه
نوشته ها: 12,700
سپاسها: : 1,382

7,486 سپاس در 1,899 نوشته ایشان در یکماه اخیر
دانه کولانه به Yahoo ارسال پیام
پیش فرض عدم استفاده از gets() در C++ سر ریزی بافر و مشکلات امنیتی

خدا چه میگی مهرگان سوالت مگه ای نیست که چجو از gets استفاده بکنی ؟

gets با cin.get خو فرق مکنه .

gets اصلا دیگه cin نمیخواد
تو الان سوالت چیه ؟

خو هر چی که میخوای با gets بگیر


کد:
#include <stdio.h> البته وقتی نیم اسپیس استاندارد رو یوز میکنی فکر کنم اینو نیاز نداره دیگه 

int main()
{
  char string [256];
  printf ("Insert your full address: ");
  gets (string);
  printf ("Your address is: %s\n",string);
  return 0
{
منتهی مشکل تکنیکی ای که وجود داره اینه که برنامه نویسها میگن از gets استفاده نکنین چون میتونه بافر اور فلو رخ بده و از این راه هکر ها خیلی سواستفاده میکنند

Function is intrinsically unsafe and should not be used
نقل قول:


Replace gets() with a C++ stream method that has a limit on the number of characters that will be read into the buffer (cin.getline(buffer, bufSize), for example).

If "buf" is a static buffer locally defined, bufSize can be replaced by sizeof(buffer). If malloc'd, use the malloc size.
Examples of Incorrect Code
کد:
 char str1[10];
gets(str1); 
    /* If the string is more than 10 characters, the overflow will spill over into the adjoining memory. */ 

راه درستش
کد:
 char str1[10];
fgets(str1, sizeof(str1), stdin); 
    /* Will not overflow.
Note that if buffer is malloc'd, sizeof() will not work and the malloc size should be used. */
/* In C++, use of iostream::getline() is preferred. */
__________________
مرا سر نهان گر شود زير سنگ -- از آن به كه نامم بر آيد به ننگ
به نام نكو گر بميــرم رواست -- مرا نام بايد كه تن مرگ راست




ویرایش توسط دانه کولانه : 01-28-2012 در ساعت 12:51 AM
پاسخ با نقل قول
کاربران زیر از دانه کولانه به خاطر پست مفیدش تشکر کرده اند :
جای تبلیغات شما اینجا خالیست با ما تماس بگیرید