محرر البي بي كود و أكواد يتم منعها - الماجيك كوتس
السلام عليكم
أنا أستعمل محرر بي بي كود و أستعمل كذلك إضافة تلوين الأكواد syntaxhighlighter و لكن المشكل للأسف المحرر يقوم بتحويل العلامات مثل "" ''الى \"\" \'\' هل إذا منعت تحويلها , هل سيأثر هذا على الحماية!
3 إجابات
المشكل عندي أنه علامة \ تظهر فقط في معاينة الموضوع
هكذا <?php $_POST['text'] = $text; if(isset($_POST['preview'])){ echo"".$text.""; } ?> <form method="post" action=""> <input name="text" type="text"/> <input type="submit" name="preview" value="preview"/> </form>أما عند حفظه في قاعدة البيانات يبقى الرمز كما هو بدون مشاكل نهائي للعلم الماجيك كوتس لم تعد شغالة لانني أطفئتها في السيرفر المحلي ; Magic quotes ; ; Magic quotes for incoming GET/POST/Cookie data. magic_quotes_gpc = Off ; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc. magic_quotes_runtime = Off ; Use Sybase-style magic quotes (escape ' with '' instead of \'). magic_quotes_sybase = Off أتمنى أن أجد حل بواسطة: Imad 0 من 1 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا معنى انها تظهر بالمعاينة انها مفعلة ، لا ادرى كيف وانت اغلقتها .. ضع الكود فى اول الاسكربت او استخدم دالة الاخ علاء لحذف اى من هذه الرموز لاى شىء وبالمناسبة لماذا تفعل هذا echo"".$text.""; الصحيح هو echo $text; فقط تعودت على الامر :) عند التعديل فى ملف الـphp.ini لابد من عمل ريسترت للسيرفر المحلى نعم اكيد عملت للسيرفر المحلي ريستارت بس ما نجح لغاية ما عملت اعادة تشغيل للجهاز باكمله و الحمد لله تم حل الامر, 3 أيام و الجهاز شغال بلا توقف لغاية ما عملت ريسترت شيء مضحك فعلاً, أشكر الأخ ملهم و علاء و الاخ ماك اوس و كافة الأخوة بالموقع هنا على سرعة التفاعل و بارك الله فيكم
لو اردت حل جزئى ، ولكنى انصح بحل الاخ ملهم لانه الحل الكامل للمشكلة فى جميع مراحلها
استخدم دالة stripslashes وهذه دالة مطورة منها تعمل على المصفوفات ايضا function stripslashes_deep($value) { $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value); return $value; }وهذا مثال لذلك ولحل مشكلتك // Example $array = array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar")); $array = stripslashes_deep($array); // Output print_r($array); بواسطة: علاء تعديل: علاء 2 من 2 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا مشكور اخي
السلام عليكم
مشكلتك هى الـMagic Quotes التى تم الغائها تماما فى الاصداء 5.3.0 وعندهم حق صراحة , افضل حل لذلك هى قفلها والغائها عن طريق php.ini وان لم يكن لك التصريح يوجد حلول اخرى اولا الغائها من الـphp.ini magic_quotes_gpc = Off magic_quotes_runtime = Off magic_quotes_sybase = Offاو عن طريق الـ.htaccess php_flag magic_quotes_gpc Offاو افضل طريقة بهم عن طريق هذا الكود تضعه فى اول الاكواد تنفيذا فى الاسكربت الخاص بك if (get_magic_quotes_gpc()) { $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); while (list($key, $val) = each($process)) { foreach ($val as $k => $v) { unset($process[$key][$k]); if (is_array($v)) { $process[$key][stripslashes($k)] = $v; $process[] = &$process[$key][stripslashes($k)]; } else { $process[$key][stripslashes($k)] = stripslashes($v); } } } unset($process); }هذه راح تحل مشكلتك ولكن يبقى كيف يتم حماية المدخلات الى قاعدة البيانات ، وهذا يتم عن طريق تمرير المتغير غير الرقمى لدالة mysql_real_escape_string هذا مثال لاستعمالها فى الحماية <?php // الاتصال $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') OR die(mysql_error()); // الاستعلام $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)); ?>وهذا مثال اختراق فى حالة عدم الحماية <?php // لم نقم بوضع الحماية اللازمة على $_POST $_POST['username'] = 'aidan'; $_POST['password'] = "' OR ''='"; // والان نبحث عن تطابق بين المدخلات والجداول $query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'"; mysql_query($query); // وهذا معناه الاستعلام المرسل الى قاعدة البيانات سيمثل كارثة مثل echo $query; ?> بواسطة: molhm 4 من 4 أشخاص وجدو هذه الاجابة مفيدة. هل وجدتها؟ نعم لا مشكور اخي بارك الله فيك |
العيب ليس فى كلاس تحويل الbbcode الى html العيب انك حفظت الاكواد فى قاعدة البيانات مضافة لها هذه الاضافات فعليك استخدام طريقة الاخ ملهم واعادة الكتابة مرة اخرى حتة تحفظ النص فى قاعدة البيانات دون \ وعند استدعائها مرة اخرى لن يكون بها اى شىء مثل \
2 / يناير / 2012 الساعة 16:3
وسبب حفظ النصوص هكذا فى قاعدة البيانات هى ان خاصية المجيك كوتس مفعلة ، فعليك اغلاقها كما موضح فى الطريقة وبعد ذلك عند كتابة "" ستمر على قاعدة البيانات عند تمريرها على دالة mysql_real_escape_string هكذا \"\" للامان ولكن عند حفظها فى قاعدة البيانات ستكون "" مثل اول مرة وبذلك عند احضارها ستكون "" ايضا وليس \"\"
2 / يناير / 2012 الساعة 16:6
أنا أعمل على السيرفر المحلي appserv هل هي مفعلة فيه ايضاً؟؟؟
Apache Web Server Version 2.2.8
PHP Script Language Version 5.2.6
MySQL Database Version 5.0.51b
phpMyAdmin Database Manager Version 2.10.3
2 / يناير / 2012 الساعة 16:13
نعم مفعلة لان كما ترى اصدار البى اتش بى لديك اقل من 5.3.0 وهذا الشرط فى كود الاخ ملهم if (get_magic_quotes_gpc()) { معناه ان فى حالة ان الدالة مفعلة فقط يتفذ هذا الكود
2 / يناير / 2012 الساعة 16:16
راح أجرب طريقة الأخ بس للعلم عندما يتم حفظ الكود " أو ' في قاعدة البيانات يتم حفظه كما هو بس المشكل هو في معاينة الموضوع قبل عرضه ساعتها تظهر \
2 / يناير / 2012 الساعة 16:33
اذن استخدم دالة الاخ علاء لحذف هذه الرموز عند العرض فقط
2 / يناير / 2012 الساعة 17:5
تم حل الأمر
أشكر الأخ ملهم و علاء و الاخ ماك اوس و كافة الأخوة بالموقع هنا على سرعة التفاعل و بارك الله فيكم
2 / يناير / 2012 الساعة 17:43