سؤال

في بلدي نموذجي التطبيق يقوم المستخدم بالنقر على زر في صفحة aspx استدعاء C# الكائن الأعمال, ثم تشغيل إجراء مخزن.

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

هنا هو نموذجي الاستدعاءات لتوضيح سؤالي:

Page_Load()
{
  if(p.IsInRole("Managers"))  //or equivalent attribute
  {
    AddAccount.Visible =true;
  }
}

AddAccount_OnClick()
{
  if(p.IsInRole("Managers"))  //or equivalent attribute
  {
    //Add the account
    Account.Add(...);  //and maybe another role check...
  }
}

-- TSQL doesn't understand .NET authorization, this call is in a 'trusted' subsystem
create proc Add_Account @user, @account_name
If @user in (Select user from role_table where role='manager')
-- Add the account
هل كانت مفيدة؟

المحلول

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

أن حجة تدعو إلى التفتيش الأمنية التي توضع في أي مصدر البيانات نفسها ، إذا كان يدعم ذلك (مثل المفضلة لديك RDBMS) ، أو طبقة الوصول إلى البيانات.

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

كتبت عن شيء مماثل في سياق WCF منذ بعض الوقت.

نصائح أخرى

من تنفيذ المنظور سيكون الحل الأفضل لتنفيذ يتحقق قدر من أسفل كومة ممكن لأن هناك أقل عدد من الوظائف التي تتطلب الحماية ، وبالتالي أقل عدد من الأمور التي تفسد, جميع مدخلات المستخدم يجب أن تمر عبر حماية طبقة.إذا كان الأساس هو حماية لا تحتاج إلى الرعاية عن كل شيء بناء على هذا الأساس.

هذا حل واحد obviouse العيب - واجهة المستخدم لا يعرف شيئا عن المصادقة والتخويل ، والتحقق من البيانات و جميع الأشياء الأخرى.لذلك كل المدخلات يذهب إلى أسفل المكدس ، قد يسبب خطأ ، و ترتفع المكدس مرة أخرى إلى إعلام المستخدم.وهذا سوف يسبب كريهة تجربة المستخدم بسبب الأخطاء التي يمكن الكشف عنها بسهولة في واجهة المستخدم فقط يتم الكشف بعد مرور البيانات إلى النظم الخلفية.ونتيجة لذلك سوف نضيف العديد من الشيكات userinterface ، أيضا ، من أجل إعطاء أفضل تجربة للمستخدم.

إذا كنت تستخدم واجهة البرمجة على أساس هذه ليست مشكلة على الإطلاق, لأنه يمكنك مشاركة رمز التحقق بين تطبيق طبقات.وهذا يتيح لك المزيد من بسهولة إضافة رمز التحقق إلى تطبيق جميع طبقات هذا وسوف تعطيك الدفاع في العمق - وجود خلل في تطبيق واحد طبقة يمكن أن تكون اشتعلت من قبل طبقة أخرى.بالطبع, إذا كان رمز التحقق في حد ذاته خاطئ و مشاركتها عبر تطبيق طبقات ، علة hance خطأ ربما probagate من خلال تطبيق جميع الطبقات.

وأود أن وضع الدور وصول الشيكات في عمل الأشياء في الواقع أداء يحتمل أن تكون خطرة/أمور حساسة.

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

ولكن يجب أن يكون لديك دائما الشيكات على الأعمال التجارية الخاصة بك أساليب الكائن كحد أدنى.

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

private void MyBypassingCall()
{
  if( myLogic )
  {
    AddAccount_OnClick();
  }
}

حتى وضعه على Page_Load لا يكفي.يجب أن تحقق أيضا في تزيين الأسلوب مع PrincipalPermissionAttribute.أن التخفيضات على الكثير من التعليمات البرمجية.

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

كائنات الأعمال.

ولكن في وقت البناء.دع كل حالة التقاط دور محدد جدا.

تحرير:أكثر إيجازا من هذا الطريق.

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