أولا أبرمج في سكريبت و حتى يتم حماية الثغرات يلجأ البعض إلى منع مثل هذه الكلمات
كود PHP:
javascript java meta script....
و لكن أنا لا أريد منعها أو تعويضها بكلمات أخرى, أنا أريد أنه عند استعمالها في مواضيع السكريبت لا تشتغل , و فكرت في استعمال دالة ()htmlentities فهل هي جيدة في هذا و هل هناك حلول أخرى تنصحونني بها
نعم الدالة اللي انت ذكرتها جميلة جدا في الحماية من اكواد الهتمل والجافاسكربت
لأنه تقوم بطباعة الاكواد التي توضع ككلام عادي كانك كتبت اسمك
تحياتي لك
__________________
زورونا في موقع الحياة للنقاشات والأسئلة والأجوبة :
- php >> وهو لحل مشاكل php وما حولها
- Ideas >> وهو لعرض الأفكار وتقييمها وايضا لمناقشة الأفكار
نعم أعلم, لكن هل يمكنني تخصيص الدالة فقط في كلمات و أكواد معينة و ليس في كافة الموضوع لأنني لا أريد استعمال الدالة و خصوصاً في نصوص عربية لأنها تحول كل حرف عربي إلى 4 رموز و بالتالي ستتضاعف كمية البيانات المخزنة إلى 4 أضعاف.
يمكنك ذلك بالتعابيير القياسية وللأسف لا اعرف عنها اي شيء للان
تحياتي لك
__________________
زورونا في موقع الحياة للنقاشات والأسئلة والأجوبة :
- php >> وهو لحل مشاكل php وما حولها
- Ideas >> وهو لعرض الأفكار وتقييمها وايضا لمناقشة الأفكار
أنت تقصد بتعويض الكلمات برموز, و لكن هذا نفس ما فعلته للحماية
و لكن في السكريبت يحتاج الزوار و الأعضاء إلى كتابة كودات مثل جافا و ميتا و لهذا
لا أريد منعها أريد فقط جعلها دون تنشيط و وجدت هذه الدالة ()htmlentities لكن لم أعرف كيف أجعلها تخصص للعمل فقط مع تلك الأكواد الخبيثة و ليس النص بأكمله, لأنه عند اشتغالها في النص بأكمله ستقوم بتحول حرف من اللغة العربية لأربع رموز و هذا سيجعل تضاعف البيانات.
أنت تقصد بتعويض الكلمات برموز, و لكن هذا نفس ما فعلته للحماية
و لكن في السكريبت يحتاج الزوار و الأعضاء إلى كتابة كودات مثل جافا و ميتا و لهذا
لا أريد منعها أريد فقط جعلها دون تنشيط و وجدت هذه الدالة ()htmlentities لكن لم أعرف كيف أجعلها تخصص للعمل فقط مع تلك الأكواد الخبيثة و ليس النص بأكمله, لأنه عند اشتغالها في النص بأكمله ستقوم بتحول حرف من اللغة العربية لأربع رموز و هذا سيجعل تضاعف البيانات.
المعذرة تسرعت.
يكفي لك ان تعطل وسم الفتح والاغلاق ليتعطل تنفيذ الكود, جرب :
مشكورين أخوي, و لكن عند الظهور هل سيظهر الكود عادي و هل هناك إمكانية لإستخدام دالة htmlentities فقط على أكواد المدمرة التي تدخل للقاعدة و ليس على النص كاملا.
آخر تعديل بواسطة soptimes.com في 26-06-2010 الساعة 02:42 PM.
أنا أعرف أن htmlentities هو الحل الجيد و لكن المشكل الذي يوجد به أنه تلك الدالة تحول اللغة العربية كل حرف ب 4 رموز و تصور معي كم ستصبح قاعدة البيانات كبيرة, لذلك استعملت الحل الذي أعطيتني و ها أنت تقول أنه غي كافي. أتمنى أن تبحث معي عن دالة تكون الحل النهائي و جزاك الله خيراً فأنا جربت ألف طريقة و لحد الساعة لم أجد حل سوى الرجوع للحل التقليدي و منع جميع الكلمات الضارة و تعويضها برموز و هذا هو الذي لا أريده.
و بالنسبة لإستخدام bbcode يلزمني محرر جيد لهذا الغرض فأنا أستعمل محرر html
function CleanXSS($str){ // One of the easiest way to do XSS is to use one of the on* attributes, like onclick or onload. // With this you can easily execute a script, without the user even having to do something (with onload, etc) // or just having to click or hover over something. We just remove them all with $str = preg_replace('#(<[^>]+[\s\r\n\"\'])(on|xmlns)[^>]*>#iU',"$1>",$str);
// As you certainly know, can you use javascript: and vbscript: as protocol handlers instead of http:// and others. // Something like <a href="javascript:alert('foobar')">lll</a> executes just nicely if a user clicks on it. // We of course remove that as well. IE as also the strange behaviour that something like "java script :" is also valid, // so we have to check for a whitespace between every character. $str = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([\`\'\"]*)[\\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iU','$1=$2nojavascript...',$str); $str = preg_replace('#([a-z]*)[\x00-\x20]*=([\'\"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iU','$1=$2novbscript...',$str);
// We removed all namespace declarations above, here we remove all elements, which have a prefix, they are not needed in HTML.. $str = preg_replace('#</*\w+:\w[^>]*>#i','',$str);
// There are quite some elements in HTML, which you definitively don't want in something like user comments. // The reason for the while loop is, that stuff like // <sc<script>ript>alert('hello') // We remove them with: do { $oldstr = $str; $str = preg_replace('#</*(\?xml|applet|meta|xml|blink|link|style|script|object|iframe|frame|frameset|ilayer|layer|bgsound|title|base)[^>]*>#i',"",$str); } while ($oldstr != $str);
return $str; }
?>
__________________
Mahmoud Abd El-Hamed
Web Developer
Mobile: +2 0192565454
E-mail: admin(at)developspot.com
Site: http://developspot.com