أي لغات البرمجة تعتبر اكثر امانا من ناحية انها سوف تجبر المتعلم على ان يتعلم الاساسيات بشكل صحيح، واكثرهم انسيابية من ناحية ان الشخص اذا تعلمها فانها ستلبي له مطالب عدة وليس بحاجة على المستوى القريب ان ينتقل الى لغة اخرى؟
أي لغة أكثر أماناً وأكثر انسيابية للتعلم؟
الأمان:
يتعلق بالمبرمج و ليس لغة البرمجة. لأن المبرمج هو الذي يبني. و ما نسميها نحن كمستخدمين بثغرة في البرنامج مثلا...هي ميزات في اللغة المبرمج سيحتاجها في حالات نادرة.
توجد لغات سهلة لمن يود أن يدخل في عالم البرمجة مثل:
PHP و ruby و python لتطوير المواقع.
و توجد لغات يمكن عمل تطبيقات سطح مكتب عبرها مثل: ruby و python و java...
و معرفة المبرمج العديد من لغات البرمجة ميزة لأنه سيتمكن من اختيار التقنيات و اللغات المناسبة للمشاريع، لا توجد لغة أحسن من لغة بشكل عام، توجد لغة تتفوق على لغة في عنصر ما بينما ضعيفة في عنصر آخر...
انا انصح بالسي شارب C# .NET والذي يمكنك من تقديم مشاريع في مجال اوندوز، والويب، والموبايل.
اما بالنسبة للحاجة لتعلم شيء جديد فهو يعتمد على ما تنوي تحقيقه بالكود، فاذا كنت تنوي بناء برنامج على الايفون، قد تريد استخدام Objective C
واذا كنت تريد بناء موقع بشكل مضطرد السرعة، قد ترغب باستخدام Ruby on Rails
لا توجد لغة "حلالة المشاكل" بل توجد لغات واسعة النطاق، ولغات ضيقة النطاق. ولكن من تجربتي فان الC#.NET من اوسع اللغات نطاقاً، وكونها اسهل بالتعلم من الJava بعض الشيء
سي/سي++ لغة تعتمد على المبرمج في الحماية من buffer overflow attacks لهذا عليه التثبت من طول السلاسل النصية و استعمال دوال n مثل strncmp وليس strcmp.
لغة php لغة قوالب لذا فهي تخلط التقديم بالمنطق في حين أن الأفضل أن لا يختلطان لهذا ظهرت القوالب عديمة المنطق كما في
أو قليلة المنطق كما في قوالب جانغو
تسهل لغة php على المبرمج ارتكاب ثغرات XSS بسبب هذا الخلط فما أسهل أن تكتب echo $row->name لكن ما أصعب أن تخمن أي أنواع التخطي عليك تطبيقه.
تسهل لغة php أيضا ارتكاب ثغرات SQL-injection فاللغة نفسها لا توفر طريقة سهلة ومباشرة لتمرير المعاملات بشكل آمن. لكن هناك الكثير من أطر العمل تسهل ذلك.
تسهل لغة php على المبرمج عدم الاكتراث لتعلم البرمجة الصحيحة والمفاهيم وأنماط التصميم الحديثة وهذا باعتراف مؤسس اللغة. وكل شخص يعارض هذه النقطة من مبرمجي اللغة فإنه يؤكدها من حيث لا يدري.
تسهل لغة بيرل كتابة برامج لا يمكن صيانتها.
لكل ما سبق أنصحك بلغة بايثون. فهي تلزمك على كتابة كود منسق فالتنسيق جزء من صياغة اللغة. وهي لغة تطبق الكثير من المفاهيم الحديثة بل وهناك مفاهيم جديدة لا توجد في لغات أخرى مثل stackless
اخي انت لم تذكر سوى عيوبها
الان بعد ظهور MYSQLI ليس هناك ثغرات SQL-injection
نظام القوالب يسهل عملية البرمجة بشكل جيد
لغة بي اتش بي داعمة لعدة اطر عمل
اما بايثون فعندك اطارين فقط هما فلايك ودجانغو
80 في المائة من المواقع تستخدم بي اتش بي
ملاحظة انا احب لغة بايثون و اجيد التعامل مع دجانغو لكن لكل ذي حق حقه
كما انه سيجد صعوبة في تعلمها اذا لم يبدأ بلغات (الاقواس) اخي
اخي انت لم تذكر سوى عيوبها
هو سأل وأنا أجبت. ما هي اللغة الأكثر أمنا وطبعا كما نعلم أي لغة بحد ثاتها لا يقال عنها أكثر أمنا أو أقل أمنا لكن هناك أخطاء أمنية تسهل اللغة على المبرمجين ارتكابها وأنا ذكرت كل لغة وما هي الأخطاء الأمنية الأكثر شيوعا في تلك اللغة.
ولنأخذ الأمثلة في mysqli مثلا
$mysqli->query("INSERT INTO test(id, label) VALUES (1, 'a')")
$mysqli->query("SELECT id, label FROM test WHERE id = 1")
لاحظ أن القيم a و 1 جاءات مضمنة في النص وهذا هو المدخل لثغرات SQL-injection وانتهت الصفحة دون تحديث أو نصح بالطريقة الصحيحة.
كذلك هذه الصفحة http://www.php.net/manual/e...
اكتفت بعبارة Data inside the query should be properly escaped دون شرح الطريقة والسبب أن الطريقة أطول من أن تشرح.
لاحظ الفرق بينها وبين تنفيذ استعلام محمي في Yii (وهو مكتوب بلغة php)
$user = Yii::app()->db
->createCommand('SELECT * FROM tbl_user WHERE name=:name LIMIT 1')
->queryRow(array(':name'=>$_GET['name']));
هذا المثال يعمل على تخطي المحارف الخاصة والتي تحميك من SQL-injection دون أي عناء فقط تضع : ثم اسم المتغير وتمرره كمنظومة وتتكفل هي بالباقي. الشاهد من كل هذا أن اللغة تسهل عليك ارتكاب الأخطاء وأنت بحاجة إلى بذل جهد كبير في حماية نفسك بنفسك أو في استعمال مكونات خارجية. في حين مع بايثون تأتي اللعبة مع بطاريات جاهزة للتشغيل. عملية تمرير معاملات وتخطي الحروف الخاصة ليس أمر شكلي اختياري ديكوري حتى أحتاج لمكون خارجي.
اما بايثون فعندك اطارين فقط هما فلايك ودجانغو
راجع معلوماتك. هي أكثر من أن أعدها لكن وجود واحد جيد يكفي.
80 في المائة من المواقع تستخدم بي اتش بي
لهذا 80% من المواقع معرضة ل XSS و SQL-inject.
نظام القوالب يسهل عملية البرمجة بشكل جيد
نعم يجب أن يكون هناك نظام منفصل للقوالب وليس خلط قولبة البيانات وعرضها بالكود وهذا مبدأ مهم غير متحقق في PHP فهي شوربة معكرونة لكن الخبر الجيد أنها لا تلزمك بذلك ولا تمنعك من فصل (يمكنك مثلا استعمال قوالب mustache أو smarty أو twig في php) هذا لكن تظل المشكلة أنها تسمح لك بعد الفصل من الأساس.
وأنا كنت ذكرت فقرة من دليل جانغو لذا دعني أعطيك الآن مثال آخر من إطار عمل القارورة bottle في بايثون وهو إطار مصغر (يعني ليس فيه لا نظام جلسات ولا نظام قواعد بيانات ...) هو يحتوي على قوالب تافهة صغيرة متواضعة ويسمح لك بخلط كود بايثون كامل داخل القالب وكل العيوب التي تريد وهو قد يكون أسوأ نظام قوالب في عالم بايثون لكن لاحظ أنك عندما تريد وضع قيمة name في h1
<h1>Hello {{name}}!</h1>
فإنه يحميك من XSS.
الشاهد من الموضوع ليس أن هذه اللغة أفضل من تلك بل أن هذه تسهل كذا وتلك تحتاج كذا.
ليست ثغرة بقدر ما هي عيب في التصميم. إن الأصل هو عدم الحماية والمبرمج عليه أن تضع مكان الكود غير الآمن
<h1>Hello <?php echo $name ?>!</h1>
الكود الآمن التالي
<h1>Hello <?php echo htmlspecialchars($name, ENT_QUOTES) ?>!</h1>
ومكان الكود غير الآمن التالي
$mysqli->query("INSERT INTO test(id, first_name, last_name) VALUES (1, '$first_name', '$last_name')");
بالكود الآمن التالي
$params=array();
$params[':first_name']='\''.$mysqli->real_escape_string($first_name).'\'';
$params[':last_name']='\''.$mysqli->real_escape_string($last_name).'\'';
$mysqli->query(str_replace(array_keys($params), array_values($params), 'INSERT INTO test(id, first_name, last_name) VALUES (1, :first_name, :last_name)'));
الكود الآمن أعلاه لن تجده في الوثائق وهو أقرب لحل إلتفافي منه إلى مكتبة آمنة.
شاهد هذا المقطع :
السلام عليكم خالد
مبدايا لا يوجد ما يسمى اكثر امانا بين لغات البرمجة ( طبعا اقصد المعروف و المشهور منها ) , كل اللغات لها نقاط قوتها و ضعفها
نقاط الضعف المتداولة و المتعارف عليها فى الأختراق بسسب أخطاء برمجية و ثغرات فى كود المبرمج وليس اللغه نفسها
بالنسبة للانسيابية فى التعلم .. انا و غيرى كل منا سيكتب اسم اللغة التى يعمل عليها لكن عليك ان تختار بين مجموعه محمودة
PHP - C# - Python- java
كلها ستلبى لك جميع الطلبات بالاخد فى الاعتبار ان PHP لغه ويب فقط
التعليقات