استاذي عندل
اقنعني او انا اقنع
انا استخدمت فلتر على كود الفلاش وسأعمل على شرحها بالتفصيل الدقيق
ولا اعتقد انه يمكن تمرير اي شي من دون فلترته
****رشفة من الشاي الساخن***
بداية الكود الاساسي
كود PHP:
function handle_flash(&$parser, $param, $option)
{
$option = str_replace(' ', '', $option);
$param = preg_replace('/[^=a-z0-9\s]/', '', $param);
$option = str_replace(array("'", ';', '(', ')', '*'), '', $option);
$param = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $param);
$option = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $option);
$extfile = @basename($option);
$ext = substr(strrchr($extfile, '.'), 1, 3);
if(eregi($_SERVER["SERVER_NAME"], $option) AND ($ext == 'swf'))
{
if (@getimagesize($option))
{
return '<embed src="' . $option . '" ' . $param . ' quality="high" loop="false" menu="false" TYPE="application/x-shockwave-flash" wmode="transparent" AllowScriptAccess="never" nojava="true"></embed>';
}
else
{
return '[flash]<font color="#FF0000">' . $option . '</font>[/flash]';
}
}
elseif($ext == 'swf')
{
return '<embed src="' . $option . '" ' . $param . ' quality="high" loop="false" menu="false" TYPE="application/x-shockwave-flash" wmode="transparent" AllowScriptAccess="never" nojava="true"></embed>';
}
}
$tag_list['option']['flash'] = array
(
'callback' => 'handle_external',
'external_callback' => 'handle_flash',
'strip_empty' => true,
'disable_smilies' => true,
'disable_wordwrap' => true,
'stop_parse' => true
);
الجزئ الاول من الكود
كود PHP:
$option = str_replace(' ', '', $option);
$param = preg_replace('/[^=a-z0-9\s]/', '', $param);
$option = str_replace(array("'", ';', '(', ')', '*'), '', $option);
$param = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $param);
$option = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $option);
$extfile = @basename($option);
$ext = substr(strrchr($extfile, '.'), 1, 3);
كود فلاشي للتطبيق
كود HTML:
[flash=http://www.tl3b.com/uploads/12-25-06~eid2_a3tereflek_.swf]width=500 height=300[/flash]
في السطر
$option = str_replace(' ', '', $option);
يتم ازالة اي مسافات في المتغير option الذي يعبر عن الرابط للفلاش
http://www.tl3b.com/uploads/12-25-06...3tereflek_.swf
بعد ذلك
$param = preg_replace('/[^=a-z0-9\s]/', '', $param);
[^=a-z0-9\s]
Match a single character NOT present in the list below «[^=a-z0-9\s]»
The character "=" «=»
A character in the range between "a" and "z" «a-z»
A character in the range between "0" and "9" «0-9»
Match a single character that is a "whitespace character" (spaces, tabs, line breaks, etc.) «\s»
هنا يتم التحقق من الطول والبعد بحيث يشمل فقط (الارقام والحروف من a وحتى z والمسافة وعلامة المساواة =) كما هنا width=500 height=300
بعد ذلك
$option = str_replace(array("'", ';', '(', ')', '*'), '', $option);
يتم ازالة كلٍ من ' و ; و ( و ) و * من متغير الطول والعرض
كما يتم هنا
$param = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $param);
$option = preg_replace('@<[\/\!]*?[^<>]*?>@si', '', $option);
ازالة > و < و /
وهنا يتم جلب اسم ملف الفلاش فقط من دون الرابط
$extfile = @basename($option);
بعد ذلك يتم جلب امتداد الملف
$ext = substr(strrchr($extfile, '.'), 1, 3);
*************************
الآن نأتي للشرط الأول
كود PHP:
if(eregi($_SERVER["SERVER_NAME"], $option) AND ($ext == 'swf'))
{
if (@getimagesize($option))
{
return '<embed src="' . $option . '" ' . $param . ' quality="high" loop="false" menu="false" TYPE="application/x-shockwave-flash" wmode="transparent" AllowScriptAccess="never" nojava="true"></embed>';
}
else
{
return '[flash]<font color="#FF0000">' . $option . '</font>[/flash]';
}
}
يتم التأكد هنا
if(eregi($_SERVER["SERVER_NAME"], $option) AND ($ext == 'swf'))
ما اذا كان الفلاش على الموقع و امتداده swf
يتم تنفيذ
كود PHP:
if (@getimagesize($option))
{
return '<embed src="' . $option . '" ' . $param . ' quality="high" loop="false" menu="false" TYPE="application/x-shockwave-flash" wmode="transparent" AllowScriptAccess="never" nojava="true"></embed>';
}
*** رشفة من الشاي المعتدل حرارته****
getimagesize
تتحقق ما اذا كان الملف فلاش او صورة
The getimagesize() function will determine the size of any GIF, JPG, PNG, SWF, SWC, PSD, TIFF, BMP, IFF, JP2, JPX, JB2, JPC, XBM, or WBMP image file and return the dimensions along with the file type and a height/width text string to be used inside a normal HTML IMG tag.
If accessing the filename image is impossible, or if it isn't a valid picture, getimagesize() will return FALSE and generate an error of level E_WARNING.
اذا فشل التحقق
تعود الدالة برابط الفلاش كنص فقط بلون احمر
وشفشل غالباُ بسبب عدم وجود الملف او احتوائه على محتوى غير فلاشي
او تعطيل خاصية allow_url_fopen من على سيرفر المستضيف
return '[flash]<font color="#FF0000">' . $option . '</font>[/flash]';
واستغرب قولك انه يشكل خطراً!!!!!
***رشفة من الشاي البارد***
هذا اذا كان الملف الفلاشي على المجلد الموقع
الآن اذا لم يكن على مجلد الموقع ما الذي يحدث
يتم تفقد امتداد الملف فقط حسب الشرط
كود PHP:
elseif($ext == 'swf')
{
return '<embed src="' . $option . '" ' . $param . ' quality="high" loop="false" menu="false" TYPE="application/x-shockwave-flash" wmode="transparent" AllowScriptAccess="never" nojava="true"></embed>';
}
ولا استطيع المجازفة هنا واستخدام دالة getimagesize على ملفات من خارج السيرفر
حيث ستشكل ثقلاً من ناحية استنفاذ مصادر السيرفر
مما يسبب بطئ في تصفح المواضيع
منتظر تعليقاتكم