تسجيل الدخول النصي مع الأزرار المخفية

StackOverflow https://stackoverflow.com/questions/7031

  •  08-06-2019
  •  | 
  •  

سؤال

لقد كنت أستخدم PHP وJavaScript لبناء موقع الويب الخاص بوالدي.إنه يريد دمج نظام تسجيل الدخول في موقعه على الإنترنت، ولدي تصميم للنظام باستخدام PHP.مشكلتي هي كيف أظهر الأزرار إذا قام الشخص بتسجيل الدخول؟

على سبيل المثال - لديك بيت, منتجات, معلومات عنا, ، و اتصال.أريد الحصول على أزرار ل تاجر, موزع, وربما معلومات أخرى إذا قام المستخدم بتسجيل الدخول.لذلك سوف يكون لي بيت, منتجات, معلومات عنا, جهات الاتصال, ، التاجر (في حالة تسجيل دخول التاجر)، موزع (في حالة تسجيل دخول الموزع)، وما إلى ذلك.

هل ستكون لغة JavaScript طريقة جيدة للقيام بذلك أم لغة PHP، أو ربما كليهما معًا؟استخدام JavaScript لإظهار الأزرار وإخفائها، وPHP للتحقق لمعرفة الأزرار التي سيتم إظهارها.­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

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

المحلول

وفيما يتعلق بالأمن، لا يمكنك الوثوق بما يأتي من العميل:

  • يمكن للزائر رؤية كل التعليمات البرمجية الخاصة بك (HTML وJavascript، وليس PHP) وتجربة الأشياء
  • ولا يجوز للزائر حتى استخدام المتصفح؛من السهل جدًا إرسال طلب باستخدام برنامج نصي

وهذا يعني أن إخفاء الأزرار يعد تصميمًا جيدًا لواجهة المستخدم (لأنه لا يمكنك استخدامها إذا لم تقم بتسجيل الدخول).لكنها ليست ميزة أمنية.تقوم ميزة الأمان بالتحقق، على الخادم، من تسجيل دخول الزائر قبل كل إجراء يتطلب ذلك.

إذا كنت لا تنوي إظهار الأزرار، فليس من المفيد إرسال HTML والصور إلى المتصفح ثم إخفائها باستخدام Javascript.أود أن تحقق مع PHP.

نصائح أخرى

في ملف القائمة الخاص بك أو w/e تضع:

<? require 'auth.php' ?>
<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Products</a></li>
    <? if( loggedin() ): ?><li><a href="">Secret area</a></li><? endif; ?>
</ul>

ثم في الصفحات التي تتطلب المصادقة، قم بذلك فقط:

<?php 
    require 'auth.php';
    require_login();
?>

حيث قد يحتوي auth.php على:

<?php
    function loggedin(){
        return isset( $_SESSION['loggedin'] );
    }

    function require_login(){
        if( !loggedin() ){
            header( 'Location: /login.php?referrer='.$_SERVER['REQUEST_URI'] );
            exit;
        }
    }
?>

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

أقترح استخدام PHP لاختيار عرض الأزرار أم لا.أفعل هذا في .NET في كثير من الأحيان.

يجب أن تكون قادرًا على التحقق من وصول المستخدم على جانب الخادم عندما يحاول استخدام زر مقيد أيضًا.

ما قمنا به في عملي هو وجود مكتبة توفر وظائف مثل التحقق مما إذا كان المستخدم قد قام بتسجيل الدخول.على سبيل المثال:

<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
    echo 'html for logged in user';
}
// rest of html

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

<?php
public function viewCustomer($customerId) {
    if (!isLoggedIn())
        redirectToLoginPage();
}

كل ما كتبه كريستيان ليسكير صحيح.لكن لاحظ أنه قال "أريد" وليس "يجب".الاختيار ليس بهذه السهولة.

بادئ ذي بدء، الأمن ليس مشكلة في الاختيار.يجب أن يكون لديك فحص أمني على الخادم عند تنفيذ إجراء ما.الكود الذي يقرر إظهار/إخفاء الزر الذي يؤدي إلى الإجراء غير ذي صلة.

وهذا يترك لنا عيبًا واحدًا فقط في تنفيذ منطق العرض/الإخفاء في Javascript - وهو أن HTML الذي يتم إرساله إلى المستخدم أكبر من اللازم.قد لا يكون هذا مشكلة كبيرة.

ومع ذلك، فإن وجود منطق إظهار/إخفاء في PHP له ميزة ناقص.عادةً ما يكون كود PHP المطلوب هو a علامة الحساء.يقدم كود أكيرا مثالاً جيدًا لكيفية القيام بذلك عادةً.

من المحتمل أن يبدو كود Javascript المقابل كما يلي:

if (logged())
{
    elementSecretArea.style.display = "list-item";
}

(بافتراض أن العناصر التي يمكن إخفاؤها لها عرض: لا شيء افتراضيًا).

يسمح هذا النمط أيضًا بسيناريو "Ajax" الجميل:يرى المستخدم صفحة بدون منطقة سرية، ويدخل كلمة المرور، ويرى المنطقة السرية، كل ذلك دون تحديث الصفحة.

لذا، إذا كان لديك بالفعل برنامج نصي يتم تشغيله عند تحميل المستند لأسباب أخرى، فسأفكر جديًا في وجود منطق الإظهار/الإخفاء هناك.

بشكل أساسي حيث تكون قائمتك بتنسيق html، على سبيل المثال كقائمة <ul> <li>Home</li> </ul> قمت بإضافة PHP بعد </li> من العنصر الأخير:

<?php
  if($session-logged_in) {    
?>

<li>My Account</li>

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