SORU
22 Ocak 2010, Cuma


Neden strlcpy ve strlcat güvensiz olarak kabul edilir?

Strlcpy ve strlcat bazı insanlar hala güvensiz olduklarını düşünüyoruz ancak strncpy ve strncat için güvenli bir yedek olarak tasarlanmış ve sorunun farklı bir türü neden sadece bunu anlıyorum.

http://en.wikipedia.org/wiki/Strlcpy#Criticism

Birisi strlcpy veya strlcat kullanarak nasıl bir örnek verebilir, yani bir işlevi buher zamanonun dizeleri sona erer null, güvenlik sorunlarına yol açabilir?

Ulrich Drepper ve James Antill Birleşik Devletleri bu doğrudur, ama asla örnekler verin ya da bu konuyu açıklığa kavuşturmak.

CEVAP
22 Ocak 2010, Cuma


Öncelikle, strlcpy strncpy güvenli bir sürüm (strncpy strcpy güvenli bir versiyonu olarak planlanmıştı) olarak planlanmıştı. Bu iki işlev tamamen alakasız. strncpy C-dizeleri (yani boş sonlandırılmış dize) hiç bir ilişkisi olan bir işlevdir. Adını str... önek vardır aslında sadece tarihi bir gaf. strncpy tarihi ve amacı iyi bilinen ve iyi belgelenmiş. Bu fonksiyon "dizeleri (C-dizeleri ile değil) Unıx dosya sistemi, bazı tarihsel sürümlerinde kullanılan." sabit genişlikli adı ile çalışmak için oluşturulur Bazı programcılar bugün karışıyor adını ve varsayalım strncpy nedense sözde hizmet olarak sınırlı uzunlukta C-string kopyalama işlevi (bir "güvenli" bir eş strcpy), gerçekte ise tam bir saçmalık ve neden kötü programlama uygulama. C standart kütüphane mevcut haliyle-uzunluğu sınırlı için hiçbir işlevi yoktur C-string ne olursa olsun kopyalama. Bu strlcpy devreye giriyor. strlcpy gerçekten sınırlı uzunlukta doğru kopyalama işlevi C-dizeleri ile çalışmak için oluşturulur. strlcpy düzgün sınırlı uzunlukta kopyalama işlevi yapması gereken her şeyi yapıyor. Bir amaç sadece eleştiri olduğunu, ne yazık ki, standart değil.

İkinci olarak, strncat diğer taraftan, biz de bu işlevi ile çalışır C-string ve gerçekleştirir sınırlı uzunlukta birleştirme (bu gerçekten bir "güvenli" kardeş strcat). Kullanmak için bu işlevi düzgün programcı vardır için bazı özel bakım, beri boyutunu parametre bu işlevi kabul eder değil gerçekten boyutu arabellek aldığı sonuç, daha ziyade boyutta kalan kısmı (aynı zamanda, sonlandırıcı karakter sayılır örtülü olarak). Bu arabellek boyutu bu boyutu kravat için, programcı genellikle strncat eleştirmek için kullanılan bazı ek hesaplamalar gerçekleştirmek için hatırlamak zorunda olduğundan kafa karıştırıcı olabilir. strlcat bu sorunlar, dikkat, ekstra hesaplamalar gerekli olan arabirim değiştirme (en azından arama kodunda) alır. Yine, bu eleştirme görebilir miyim sadece temel işlevi standart değildir. Ayrıca, strcat grup fonksiyonları profesyonel kod çok sık yeniden tabanlı dize birleştirme fikrinin sınırlı kullanılabilirlik nedeniyle görmek istemediğin bir şeyler.

Bu işlevler güvenlik sorunlarına yol açabilir nasıl gelince... Onlar sadece yapamam. C dilini daha büyük bir derece güvenlik sorunlarına yol açabilir mi kendisi "güvenlik sorunlarına yol". Sen, uzunca bir süre C dili Java garip bir lezzet olma yönünde hareket için güçlü bir duygu var. Bu duygu bazen C dilinin etki alanı olarak, oldukça clueless sonuçlanan ve C dilinin özellikleri eleştiri ve C standart kitaplığı özellikleri zorla döküldü. Ben kesinlikle şeyler o kadar da kötü değildir umarım, ancak bu durumda böyle bir şey ile de ilgili olabileceğini düşünüyorum.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Christian Atlas

    Christian At

    26 Mart 2009
  • David Wills

    David Wills

    31 Aralık 2007
  • Tomas N

    Tomas N

    14 Kasım 2010