سؤال

هذا هو تطبيق محرك اختبار مع 5 أوراق التي حددتها لي .. مثل 5 صفحات PHP

تدفق التطبيق

login.html

check.php // للتحقق مما إذا كانت بيانات الاعتماد r صحيحة

إذا كان صحيحا ثم

Main.php // ينقر المستخدم على "Take Test" في هذه الصفحة التي تعرضه 1 من الأوراق الخمس ...

ولكن بمجرد تسجيل الدخول ، يمكنني فقط تغيير عنوان URL إلى عنوان URL لورقة الاختبار التي أريدها .. الأسماء الورقية R 1.php 2.php ....

كيف يمكنني التوقف عن هذا...؟؟

if(!isset($_SESSION['page'])//Tp
        continue;           //Tp
else
 {
   header('Location:login.php');
   exit;
 }                               //Tp
$_SESSION['page']=$_SERVER['SCRIPT_NAME'];//tp

هل هذا صحيح ... كما قلت هناك 5 صفحات ....

في صفحة EAC لدي هذا الرمز ....

أتحقق مما إذا كان متغير الجلسة قد تم تعيينه .... إذا تم تعيينه ... فهذا يعني أنه قام بالفعل بزيارة الصفحة ..... لكن هذا الرمز لا يعمل ... هل استخدمت المتغير _session ["الصفحة" ] قبل إعلان ذلك ؟؟؟

هل كانت مفيدة؟

المحلول

يمكن حل المشكلات التي تواجهها في الغالب عن طريق ترتيب الكود الخاص بك حول برنامج نصي معالج افتراضي. (انظر إرشاتي أدناه.)

هناك طريقتان أساسيتان لتمرير المعلومات إلى مثل هذا البرنامج النصي (كما قلت في تعليق أعلاه). الطريقة الأساسية هي عبر متغير ، مثل http://www.example.com/main.php?p=1.

إذا كنت ترغب في الحصول على المزيد من عناوين URL الصديقة للزوار ، يمكنك استخدام ملف RewriteRule في .htaccess ملف لتحويل عناوين URL لطيفة إلى عناوين URL التي سيفهمها معالجك. (انك سوف تحتاج mod_rewrite ممكّن.)

قد يكون هذا مبالاة لهذا السؤال بالذات ، ولكن فيما يلي بعض الإرشادات لتطبيقات الويب الآمنة. أعتقد أنهم جميعا وثيق الصلة:

  1. ضع معلوماتك الحساسة خارج جذر الويب العام.
  2. افتراضيًا ، لا تعرض أي معلومات. فقط تمكين عرض المعلومات إذا كان المستخدم مصرحًا به بشكل إيجابي.
  3. من الناحية المثالية ، يشمل ذلك عناوين URL (إذا كتبت عنوان URL صالحًا ولكنهم غير مصرح لهم ، فلا تسمح لهم بمعرفة أنهم وصلوا إلى عنوان URL صالح). تتمثل إحدى الطرق في إعادة التوجيه (اضبط رأس الموقع كما كنت تفعل) إلى صفحة تسجيل الدخول إذا لم يتم تفويضها.
  4. إنشاء نص معالج افتراضي. سيتضمن هذا البرنامج النصي المركزي جميع الملفات المطلوبة واتصل بجميع الوظائف المطلوبة. تمرير جميع معلومات الطلب إلى هذا المعالج ، وجعله يخرج جميع HTML.
  5. شرط #3: تغليف الكود الخاص بك في الوظائف والفصول. وبهذه الطريقة ، يمكن لمعالجك الافتراضي الاتصال بهم عندما يكون جاهزًا ، فقط إذا كنت في حاجة إليها ، وليس فقط لأنها كانت مدرجة. هذا يتيح لك المزيد من التحكم في تدفق التطبيق الخاص بك.
  6. بدلاً من echoجي HTML في أماكن عشوائية في جميع أنحاء الكود ، أعد جميع إخراج HTML إلى معالجك الرئيسي, ، والتي ستجمعها وإخراجها جميعًا في مكان واحد عندما يكون جاهزًا. عشوائي echoS المنتشرة حولها تجعل من الأسهل على الثقوب الأمنية الظهور.
  7. لا تثق في مدخلات المستخدم. إذا كنت ستستخدم قيمة تحصل عليها $_GET أو $_POST, ، تأكد من أنها قيمة صالحة قبل استخدامها.

تعديل:

(هذا أكثر تحديداً وموجه نحو الكود كما هو الآن)

هناك 3 أسباب لن يتم تشغيل الكود الخاص بك كما تتوقع أن:

  1. لقد تركت أقواس الختام على السطر الأول if(!isset($_SESSION['page']).

  2. الطريقة التي يتم بها كتابة الرمز الخاص بك ، إذا $_SESSION['page'] تم تعيينه بالفعل عندما يزور المستخدم الصفحة ، سيتم إعادة توجيهه إلى صفحة تسجيل الدخول. يمكنك إصلاح هذا عن طريق وضع header('Location:login.php'); exit; في ال if بند وإزالة else بند تماما:

    if(!isset($_SESSION['page'])) {
       header('Location:login.php');
       exit;
    }
    $_SESSION['page']=$_SERVER['SCRIPT_NAME'];
    
  3. تحتاج إلى ضبط $_SESSION['page'] عندما يقومون بتسجيل الدخول لأول مرة حتى يتمكنوا من عرض الصفحة الأولى.

أوصي باستخدام عدد صحيح $_SESSION['page'] بدلا من اسم البرنامج النصي. بهذه الطريقة ، يمكنك ضبط $_SESSION['page'] إلى 1 عندما يقومون بتسجيل الدخول ، وفي كل مرة يقومون فيها بنجاح عرض الصفحة ، الزيادة $_SESSION['page'] من قبل واحد. يعتبر $_SESSION['page'] ليعني الورقة التالية يُسمح لهذا المستخدم بعرضها.

يمكنك تعيين أ $pageid على كل ورقة. في كل مرة يحاولون عرض صفحة ، إذا $_SESSION['page'] اقل من $pageid, ، لا تدعهم يشاهدون الصفحة.

نصائح أخرى

أفضل طريقة هي بناء مصادقة وترخيص حقيقي في طلبك. ثم يحتاج عنوان URL الذي يخدم الورقة إلى التحقق من أنه يُسمح للمستخدم بعرض الصفحة قبل تقديمها.

كل ما تفعله في check.php ، قم بذلك على الصفحة الورقية نفسها.

الكثير من البدائل. زوج:

  • لا تشفر اسم الأسماء الورقية في عنوان URL ولكن قم بإرجاع محتويات الورقة المحددة من صفحة تسمى ، على سبيل المثال ، test-paper.php.

  • تتبع الأوراق التي يحق للمستخدم رؤيتها في جلسة المستخدم. تحقق في كل صفحة من ورقة اختبار ما إذا كان يُسمح للمستخدم برؤية هذا واحد وإرجاع 403 ممنوعًا (أو صفحة خطأ) إذا لم يكن كذلك.

الكثير ، أنا متأكد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top