مشكلة السبام هذه منتشرة جداً في أي موقع يستقبل بيانات من الزوار, سواءاً طلبات أو تعليقات أو مواضيع وغيرها
هناك حلول كثيرة للتأكد من أن الذي يقوم بهذه العملية هو شخص وليس برنامج سبام مزعج
حلك الذي اقترحته جداً رائع
لكن يمكن التلاعب عليه
مثلاً ممكن اعمل برنامج سبام يقوم بعملية إغراق برنامجك بالطلبات, ويكون موجود على جهازي الشخصي
وهذا مثلاً رابط البرنامج
http://localhost/spam.php?s=star8.com
سوف يقوم بوظيفته على أكمل وجه
والسبب هو أن الشرط الذي استخدمته يتحقق فقط من وجود هذا النص "star8.com" في الرابط
الشرط الآن متحقق والبرنامج سوف يعمل إغراق لك بالطلبات
قمت ببعض التعديلات في طريقة التحقق, ولله الحمد أصبحت أقوى
يمكنك وضع هذا الكود في أول البرنامج مثلاً أو في المكان المناسب بحسب برنامجك, وهو يتحقق ما إذا كانت هناك بيانات مرسلة للموقع
كود PHP:
// في حالة إرسال بيانات للموقع يتم التحقق
if (!empty($_POST))
{
checkReferrer();
}
إذا كانت هناك بيانات مرسلة سيتم التأكد من مصدر هذه البيانات. هل هي من داخل الموقع أو خارجه, ثم إتخاذ إجراء المنع إذا كانت من الخارج
كود PHP:
$domain = 'www.star28.com';
function checkReferrer()
{
global $domain;
// الموقع الذي قدم منه
$referer = $_SERVER['HTTP_REFERER'];
// استخراج دومين الموقع
preg_match('/^http:\/\/([^\/]*).*/i', $referer, $match);
$referer = $match[1];
// التحقق من وجود WWW
if (checkWWW($referer) == TRUE)
{
if (checkWWW($domain) == FALSE)
{
$domain = 'www.'.$domain;
}
}
else if (checkWWW($referer) == FALSE)
{
if (checkWWW($domain) == TRUE)
{
$domain = substr($domain, 4);
}
}
// التحقق
if ($referer != $domain)
{
exit('غير مسموح');
}
}
// دالة للتحقق من وجود WWW
function checkWWW($URL)
{
if (eregi('^www.', $URL, $result))
return TRUE;
else
return FALSE;
}
قم وضع دومين موقعك في المتغير $domain أول الكود, سواءاً بوجود www أو بدونه
والآن جرب الطريقة .. قم بعمل نموذج Form على جهازك الشخصي يرسل طلبات لموقعك .. هل يقوم بإضافتها أم لا ؟
لم أقم بتجربة الطريقة بعمق, أتمنى أنك تجربها وتعطيني ملاحظاتك حتى نصل لأفضل حماية نستخدمها في برامجنا
والله الموفق