السلام عليكم ورحمة الله وبركاته
كتبت موضوعي هذا بعد أن رأيت رد الاخ juba على هذا الرابط
http://www.swalif.net/softs/swalif-1838397-39.html
واعذروني على وضعه بموضوع مستقل حتى يعم العلم أكبر شريحة ممكنة
كما أتمنى عدم إغلاق أو حذف الموضوع أو دمجه مع الموضوع السابق
لأني تعبت في كتابة التحليل والذي لا أعتبره رداً بل يحتاج إلى موضوع مستقل بذاته
للعلم التحليل أدناه كله دوماً ما احتفظ فيه بنفسي منذ أشهر ولم أتكلم لكن بعد أن رأيت الأخ juba يرد على مجهول ويدعي كون أنه هو على حق دائماً والكل على خطأ
حينها لم أسكت وقمت بوضع هذا التحليل المنطقي بدلائل برمجية
عزيزي juba
دعني أحلل المنتج الخاص بك لأثبت لك أن طريقتك في البرمجة فاشلة 
وأرجوك.. رحم الله امرؤ عرف قدر نفسه فلا تجعل من نفسك أعلى العالين وتظن أنك على حق والبقية على خطأ
نبدأ باسم الله تعالى
أول أسطر المنتج:
كود PHP:
$MonitorPages=array();
$MonitorPages[]="newthread";
$MonitorPages[]="newreply";
$MonitorPages[]="postings";
$MonitorPages[]="editpost";
$MonitorPages[]="inlinemod";
// thes con n3d
if (THIS_SCRIPT && in_array(THIS_SCRIPT, $MonitorPages)){
أول شئ .. لماذا لم تكتفي بهذا الكود التالي البسيط ؟ لماذا كل تلك الزحمة ؟
ولماذا وضعت أمرين للتحقق من الشرط مع أنه يمكنك الإكتفاء بالأمر الثاني !!
كود PHP:
if (in_array(THIS_SCRIPT, array('newthread', 'newreply', 'postings', 'editpost', 'inlinemod'))){
أم أن زيادة الجرعة الوهمية في البرمجة تظن أنك قد قمت بزيادة نسبة الحماية ؟
المهم
ننتقل إلى عمل الكود التالي
كود PHP:
// slo see
if (isset($_REQUEST['title'])){
$_REQUEST['title']=remove_html_tags($_REQUEST['title']);
}
if (isset($_GET['title'])){
$_GET['title']=remove_html_tags($_GET['title']);
}
if (isset($_POST['title'])){
$_POST['title']=remove_html_tags($_POST['title']);
}
// too 2 see sub )- :
if (isset($_REQUEST['subject'])){
$_REQUEST['subject']=remove_html_tags($_REQUEST['subject']);
}
if (isset($_GET['subject'])){
$_GET['subject']=remove_html_tags($_GET['subject']);
}
if (isset($_POST['subject'])){
$_POST['subject']=remove_html_tags($_POST['subject']);
}
حشو زايد بكثرة لا أعلم لماذا مع العلم أنه بإمكانك الإختصار إلى هذا الكود:
كود PHP:
if (isset($_REQUEST['title'])){
$_REQUEST['title']=remove_html_tags($_REQUEST['title']);
}
if (isset($_REQUEST['subject'])){
$_REQUEST['subject']=remove_html_tags($_REQUEST['subject']);
}
أم أنك لا تعلم أن $_REQUEST يحمل قيم $_GET و $_POST كلاهما ؟
أيضاً أرى أنك قمت بعملية فلترة للـ title والـ subject .. مع العلم أن subject لاتوجد إلا في newthread تحت مسمى الـ title بهذا الشكل:
كود PHP:
$newpost['title'] =& $vbulletin->GPC['subject'];
إذاً الفلترة فقط طبقت بكل الأحوال على title
رح شف وش فايدة دالة verify_title داخل ملف class_dm_threadpost.php وكيف يستدعى بواسطة دالة verify داخل ملف class_dm.php 
هل تتوقع أن مبرمجين vBulletin أغبياء لهذه الدرجة لكي يتركوا الـ title تمر دون فلترة من قبلهم؟
حتى الإعلانات نفسها لايمكن استغلالها حيث قاموا بترقيع الثغرة من سنة جدي
تبي الدليل ؟ افتح ملف announcement.php وابحث عن السطر التالي:
كود PHP:
$anncdata->set('title', $vbulletin->GPC['title']);
هكذا إذاً !
لنذهب نبحث عن دالة set حتى نرى كيف تعمل !
وجدناه ! افتح ملف class_dm.php وابحث عن:
كود PHP:
function set($fieldname, $value, $clean = true, $doverify = true)
انظر لداخل الدالة عن :
كود PHP:
$verify = $this->verify($fieldname, $value, $doverify);
هنا اترك الباقي لك للبحث عن عمل دالة التحقق verify وكيف تقوم بالفلترة مع اني ماراح اتوقع انك تفهم شئ بعدها إذا لم تفهم مالفرق بين دالة die و exit 
إذاً حتى الآن توصلنا إلى أن الأكواد البرمجية أعلاه كله لافائدة نهااائياً وبتاتاً سوى أكواد وجودها كـ عدمها
ننتقل إلى المرحلة الثانية وهي أكواد أغبى من سابقتها:
كود PHP:
$vbulletin->templatecache["spacer_open"]="";
if ($show['old_explorer']){
$vbulletin->templatecache["spacer_open"].=addslashes(' <table cellpadding="0" cellspacing="0" border="0" width="$stylevar[outertablewidth]" align="center"><tr><td class="page" style="padding:0px $stylevar[spacersize]px 0px $stylevar[spacersize]px">');
}else{
$vbulletin->templatecache["spacer_open"].=addslashes('<div align="center">
<div class="page" style="width:$stylevar[outerdivwidth]; text-align:$stylevar[left]">
<div style="padding:0px $stylevar[spacersize]px 0px $stylevar[spacersize]px">');
}
$vbulletin->templatecache["spacer_close"]="";
if ($show['old_explorer']){
$vbulletin->templatecache["spacer_close"].=addslashes(' </td></tr></table>');
}else{
$vbulletin->templatecache["spacer_close"].=addslashes(' </div>
</div>
</div>');
}
أول شئ سؤال
مافائدة دالة addslashes إذا لم يكن يوجد بداخله متغير يتم إرساله من قبل شخص ما ؟
ثاني شئ
إذا أنك تظن أنك تقوم بترقيع الثغرة بهذا الطريقة فـ عليك إذاً عمل نفس الطريقة مع جميع القوالب لأنه بما أن الهكر يمكنهم حقن قالبي spacer_open و spacer_close فبإمكانهم كذلك حقن جميع القوالب وخصوصاً قالب FORUMHOME .. مالمانع؟
هنا لايوجد مانع سوى أنك توهم عملاءك وتغريهم بالحماية التامة بأكواد لافائدة لها نهائياً
مع العلم أني حتى الآن لا أفهم مالفرق بين قالبي spacer_open و spacer_close وبين قالبي header و footer في طريقة اختراق الثغرة المزعومة !! (لا أقصد الفرق شكلياً طبعاً)
لماذا لم تقم بنفس العمل مع قالبي header و footer أم أنك تتبع المثل (مع الخيل ياشقراء) ؟
ننتقل الآن إلى المرحلة الثالثة وهي الأكواد التركية وهذا الشئ الوحيد في منتجك الذي لا أعتبره فشلاً
هذه الأكواد لا بأس بها وأنصح بها سوى أنها متكررة بشكل فظيع جداً
يعني مثلاً لديك:
كود PHP:
'cmd=', '%20cmd', 'cmd%20'
بإمكانك استغناءهم بهذا فقط (cmd) دون إضافة بعد أو قبل
كذلك:
كود PHP:
'union%20', '%20union', 'union(', 'union='
بإمكانك استغناءهم بهذا فقط (union) دون إضافة بعد أو قبل
وغيرها الكثير من القيم الزايدة
هذا مالدي حالياً
juba إذا أردت المناقشة فـ ناقش بعقلانية وبدلائل برمجية لا أن تأتي وتقول (هذا خطأ وهذا صحيح و هذا وأنت ولماذا و و و و وإلخ) فـ عذر البليد مسح السبورةالله يرضى عليك 
هذا وصلى الله على نبينا محمد وعلى آله وصحبه وسلم أجمعين
والسلام عليكم ورحمة الله وبركاته