Hangi fonksiyonları C standart kütüphane genellikle kötü uygulamaya teşvik?
Bu ilham tarafından this question ve yorum belirli bir cevap olduğunu öğrendiğim strncpy
Bir çok güvenli dize işleme işlevini C ve balataları sıfır, kadar ulaşır n
, baÅŸka bir ÅŸey bilmiyorsun.
Özellikle, R.. alıntı
-sonlandırma boÅŸ yok strncpy ve -pad null tüm kalan yok hedef tampon, zaman kaybı. Çalışabilirsiniz eski etrafında kendi ekleyerek doldurma, ama ikincisi deÄŸil null. Bu asla "güvenli olarak kullanmak için tasarlanmıştır dize" iÅŸlevi, ama kullanım sabit boyutlu çalışma Unıx alanları dizin tablo ve veritabanı dosyaları. snprintf(n)", src) s "Þst doÄŸru "standart" güvenli strcpy sadece C ama çok yavaÅŸ olabilir. Bu arada, kendisi kesilme olabilir büyük bir hata olması ve bazı durumlarda olabilir ayrıcalık yükselmesine sebep olur, ya da DoS atma "string fonksiyonları" güvenli bir sorun çıktı kesecek. bunu yapmak için baÅŸka bir yol "" ya da güvenli ""güvenli Bunun yerine, emin olmalısınız hedef tampon olduÄŸunu saÄŸ boyutu ve basit kullanımı strcpy (veya memcpy eÄŸer biliyorsanız da daha iyisi, dize uzunluÄŸu kaynak).
Bu not strncat() bile daha fazla. arayüzü kafa karıştırıcı daha bu tam olarak ne anlama strncpy - uzunluğu değişken, yine mi? Ne değil mi tedarik neye dayanarak beklediğiniz () strncpy vb - daha fazla hata yani hatta daha eğilimli strncpy(). Kopyalama dizeleri etrafında, giderek ediyorum olduğu görüşünü güçlü sadece hedef gereken argüman() her zaman tüm boyutlarını biliyorum çünkü vaktinden önce ve var emin olun yeterli zaman öncesinde. Kullanın () hedef herhangi bir tercih () strcpy, strcat () ve strncpy(), () strncat, memcpy().
Yani, açıkça standart C kitaplığı biraz paslanmışım. Bu nedenle şu soruyu sormak istiyorum:
Standart kütüphane fonksiyonları uygunsuz///kod hataları/verimsizlikleri güvenlik sorunlarına yol neden olabilecek şekilde kullanılır C?
Objektiflik adına, bir cevap için bir dizi kriter var:
- Eğer lütfen, eğer yapabilirseniz, kendi amacı soru yani işlevi geride tasarımı sebep cite.
- Kodun şu anda konur kötüye vurgulamak lütfen.
- Bu yanlış bir sorunun doğru olabilir neden devlet lütfen. Bu açık olmalı biliyorum ama yumuşak cevaplar önler.
Lütfen kaçının
- Fonksiyonları (bu unequivocably karışıklık nedenleri hariç) adlandırma kuralları ile ilgili tartışmalar.
- "- Tercihi Tamam, hepimizin var ama asıl beklenmeyen yan etkileri ilgileniyorum ve onlara karşı korumak için nasıl. "y x tercih ederim
Bu öznel kabul olması muhtemeldir ve kesin bir cevabı var gibi topluluk wiki hemen için işaretleme yapıyorum.
Ayrıca C99 başı olarak çalışıyorum.
CEVAP
Standart kütüphane fonksiyonları uygunsuz///kod hataları/verimsizlikleri güvenlik sorunlarına yol neden olabilecek şekilde kullanılır C ?
Aşikar olanı tercih edeceğim :
char *gets(char *s);
Kısaca imkansız uygun şekilde kullanmak için onun olağanüstü çaba sarf ettiler.
CSS olarak Base64 iyi ya da kötü uygul...
Nasıl uyumlu hafıza sadece standart kü...
Standart kütüphane biçimi Python nedir...
Hangi durum Python kötü/yasadışı değiş...
C standart iostreams için düşük perfor...