وظيفة يحصل () هي واحدة من أخطر وظائف لا يمكن الاعتماد عليها في لغة البرمجة ج. تم تصميم هذه الوظيفة لقراءة سلسلة من دفق الإدخال. ولكن نظرا لأنه لا يتحقق من حجم المخزن المؤقت الذي سيتم تخزين السلسلة فيه ، فإنه يفتح الباب أمام العديد من نقاط الضعف والهجمات المحتملة في البرنامج.
في وثائق اللغة ج وأدلة البرمجة ، و يحصل () تعتبر وظيفة قديمة وغير آمنة. بدلا من ذلك ، فمن المستحسن استخدام وظيفة فجيتس () ، وهو أكثر أمنا ، لأنه يتحقق من حدود المخزن المؤقت ولا يسمح الكتابة فوق الذاكرة.
على سبيل المثال ، إذا قمت بإدخال سلسلة أطول من حجم المخزن المؤقت المخصص لتخزين السلسلة ، فستقوم وظيفة جيتس() بالكتابة فوق الذاكرة خارج المخزن المؤقت ، مما قد يؤدي إلى إيقاف تشغيل برنامج الطوارئ أو إدخال تعليمات برمجية ضارة.
في هذا الصدد ، تم إهمال وظيفة جيتس() في معيار سي 11 ويمكن إزالتها تماما من اللغة في المستقبل. لذلك ، يجب على المبرمجين استخدام بدائل آمنة لقراءة السلاسل من دفق الإدخال لضمان سلامة واستقرار برامجهم.
- ما هو سبب عدم وجود يحصل في اللغة ج?
- تاريخ إنشاء اللغة ج
- نقاط الضعف والمشاكل مع وظيفة يحصل
- وظائف الإدخال البديلة في ج
ما هو سبب عدم وجود يحصل في اللغة ج?
لغة البرمجة ج ، وضعت في أوائل 1970 ، لديها العديد من الوظائف لإدخال البيانات والمخرجات. ومع ذلك ، فإن مكتبة ج القياسية ليس لديها وظيفة جيتس. دعونا ننظر إلى أسباب هذا الغياب.
وظيفة انعدام الأمن: السبب الرئيسي لعدم وجود يحصل في اللغة ج يرتبط بانعدام الأمن. لا تتحقق وظيفة جيتس من حجم المخزن المؤقت الذي يتم إدخال البيانات فيه ، وقد تتسبب في تجاوز سعة المخزن المؤقت. يمكن أن يؤدي هذا إلى سلوك برنامج غير متوقع ، بما في ذلك نقاط الضعف مثل تجاوز سعة المخزن المؤقت ، والتنفيذ المحتمل للتعليمات البرمجية الضارة. وبسبب هذا ، تم إهمال وظيفة جيتس وإزالتها من معيار اللغة ج بدءا من مراجعة ج 11.
البدائل: عدم وجود وظيفة يحصل في مكتبة ج القياسية لا يعني أنه ليس من الممكن إدخال سلسلة من لوحة المفاتيح. بدلا من ذلك ، يمكنك استخدام وظيفة فجيتس ، الذي يتحقق من حجم المخزن المؤقت ويتوقف عن القراءة بعد الوصول إلى الطول المحدد أو عند الكشف عن حرف سطر جديد. هذا يجعله بديلا آمنا لتلقي مدخلات المستخدم.
توصيات المطور: يتم تشجيع المطورين على استخدام وظائف إدخال سلسلة أكثر أمانا ، مثل فجيتس أو سكانف ، مع إشارة صريحة من الحد الأقصى لحجم المخزن المؤقت. هذا يساعد على منع تجاوزات المخزن المؤقت وتحسين أمان البرنامج.
بشكل عام ، فإن عدم وجود وظيفة يحصل في لغة ج يرجع إلى احتمال انعدام الأمن وتوافر بدائل أكثر أمانا. يجب أن يكون المطورون على دراية بالثغرات الأمنية المحتملة المرتبطة بإساءة استخدام وظائف إدخال السلسلة وتطبيق تدابير الأمان المناسبة عند تطوير برامج سي.
تاريخ إنشاء اللغة ج
تم تطوير لغة البرمجة سي في عام 1970 في مختبرات بيل (سميت في الأصل مختبرات تي آند تي بيل) من قبل دينيس ريتشي. ابتكر ج كتحسين على لغة البرمجة السابقة ب ، والتي تم تطويرها بواسطة كين طومسون.
كان الغرض من إنشاء لغة سي هو توفير المرونة والكفاءة في البرمجة على مستوى النظام. أراد ريتشي وطومسون إنشاء لغة برمجة عالمية يمكن استخدامها لتطوير أنظمة التشغيل وبرامج النظام الأخرى.
تم تصميم لغة سي كلغة منخفضة المستوى ، مما يعني أنها توفر وصولا مباشرا إلى ذاكرة الكمبيوتر والسجلات ، مما يسمح للمطورين بإنشاء كود فعال ومحسن. ومع ذلك ، فقد قدمت أيضا بعض التجريدات والأدوات التي جعلتها أكثر سهولة في الاستخدام ومرونة في الاستخدام مقارنة باللغات الأخرى منخفضة المستوى.
واحدة من أهم ميزات ج هي قابليتها للنقل. وقد تم تصميم اللغة بحيث يمكن تشغيلها على مختلف أبنية الكمبيوتر وأنظمة التشغيل دون تغييرات على رمز البرنامج. كان هذا عاملا مهما لمختبرات بيل ، حيث استخدموا أجهزة كمبيوتر وأنظمة تشغيل مختلفة لعملهم البحثي.
بمرور الوقت ، أصبحت ج شائعة واستخدمت لأغراض مختلفة. أصبحت لغة البرمجة الرئيسية لتطوير أنظمة تشغيل يونكس ، ولاحقا للعديد من أنظمة التشغيل الأخرى. ج أصبحت أيضا لغة برمجة مستخدمة على نطاق واسع لتطوير برامج التطبيقات وأنظمة إدارة قواعد البيانات وتطبيقات الويب والمزيد.
يرتبط تاريخ لغة سي بإصدارات ومعايير مختلفة ، مثل أنسي سي و إسو سي. لقد قاموا بإجراء تحسينات وإضافات مختلفة على اللغة ، مما زاد من توحيدها وقابليتها للنقل.
ج لا تزال واحدة من لغات البرمجة الأكثر شعبية في جميع أنحاء العالم. بساطته وكفاءته ومرونته تجعله خيارا جذابا للمطورين من مختلف المجالات. يستمر في التطور والتكيف مع التقنيات الجديدة ومتطلبات تطوير البرمجيات.
نقاط الضعف والمشاكل مع وظيفة يحصل
وظيفة يحصل قديمة وخطيرة لاستخدامها في البرمجة ج. ترتبط مشاكله بنقص فحوصات تجاوز سعة المخزن المؤقت للإدخال ، مما يجعله عرضة لهجمات مثل تجاوز سعة المخزن المؤقت.
ترتبط المشاكل مع وظيفة جيتس لقدرته على قراءة سلسلة من المدخلات القياسية وحفظه إلى المخزن المؤقت المحدد ، ولكن دون التحقق من حجم المخزن المؤقت. هذا يعني أنه إذا تجاوزت السلسلة المدخلة حجم المخزن المؤقت ، يمكن لوظيفة جيتس الكتابة فوق مناطق الذاكرة المجاورة ، مما قد يؤدي إلى سلوك برنامج غير متحكم فيه أو حتى إمكانية تنفيذ تعليمات برمجية ضارة.
هذه المشكلة ذات أهمية خاصة عند العمل مع صفائف الأحرف ، وهي سلاسل. إذا تم استخدام وظيفة جيتس لقراءة إدخال المستخدم في صفيف حرف ، ومن ثم يتم تمرير هذه المصفوفة إلى وظائف أخرى دون التحقق من حجم ، ثم يمكن للمهاجمين استخدام هذه الفرصة لحقن التعليمات البرمجية الخبيثة أو الكتابة فوق البيانات الهامة.
من ناحية ، يمكن حل المشكلة باستخدام وظائف قراءة سلسلة أكثر أمنا مثل فجيتس ، والذي يسمح لك لتحديد الحد الأقصى لعدد الأحرف للقراءة. هذا يتجنب تجاوز سعة المخزن المؤقت. خيار آخر هو استخدام الوظائف التي تحقق من حجم المخزن المؤقت ، على سبيل المثال ، باستخدام وظائف من السلسلة.مكتبة ح.
من ناحية أخرى ، يجب أن يكون المبرمجون حذرين بشكل خاص عند استخدام وظيفة جيتس. يجب عليهم دائما التأكد من أن حجم المخزن المؤقت كبير بما يكفي لقبول السلسلة المتوقعة ولديه مساحة تخزين كافية. إذا كان حجم المخزن المؤقت غير معروف ، فقد يكون الحل الأفضل هو استخدام بدائل أكثر أمانا لتجنب الثغرات الأمنية المحتملة.
وظائف الإدخال البديلة في ج
يتم إهمال وظيفة يحصل في ج ولا ينصح للاستخدام بسبب نقاط الضعف تجاوز سعة المخزن المؤقت. يمكن أن يؤدي إلى مشكلات أمنية خطيرة ، بما في ذلك الكتابة فوق الذاكرة وتنفيذ التعليمات البرمجية عن بعد.
بدلا من يحصل ، فمن المستحسن استخدام وظيفة فجيتس ، والذي يسمح لك لتحديد الحد الأقصى لعدد الأحرف لقراءة من تيار الإدخال. هذا يساعد على تجنب تجاوزات المخزن المؤقت ويحسن أمان البرنامج. تقوم وظيفة فجيتس بإرجاع مؤشر إلى السلسلة التي يقرأها ، أو فارغة في حالة حدوث خطأ.
لقراءة قيم نوع معين ، مثل الأعداد الصحيحة أو أرقام الفاصلة العائمة ، يمكنك استخدام وظائف فسكانف أو سكانف. وظيفة فسكانف يقرأ البيانات من ملف أو المدخلات القياسية (ستدين) وتنسيقها وفقا للتنسيق المحدد. تعمل وظيفة المسح الضوئي بشكل مشابه ، ولكنها تقرأ البيانات فقط من الإدخال القياسي.
عند العمل مع سطر الأوامر ، والخيار هو استخدام وظيفة جيتشار ، الذي يقرأ حرف واحد من تيار الإدخال. لقراءة سلسلة من الأحرف تصل إلى حرف سطر جديد ، يمكنك استخدام وظيفة فجيتس مع المعلمة ستدين.
ومع ذلك ، على الرغم من أن وظائف الإدخال البديلة تعمل على تحسين الأمان ، فلا يزال يتعين عليك توخي الحذر عند العمل مع إدخال المستخدم. يوصى بالتحقق من صحة بيانات الإدخال والتحقق من إمكانية تجاوز سعة المخزن المؤقت قبل الكتابة أو المعالجة.