الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

اضافة Security

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله وبركاته انا انتهيت من تطوير web application باستخدام jdeveloper 10g او بعد الاتتهاء بنجاج من عمل دبلوي والتطبيق واجهتني مشكلة في السكيوريتي

السلام عليكم ورحمة الله وبركاته انا انتهيت من تطوير web application باستخدام jdeveloper 10g او بعد الاتتهاء بنجاج من عمل دبلوي على ORACLE APPLICATION 10G والتطبيق واجهتني مشكلة في السكيوريتي مع العلم انا بستخدم ADF BC وبعد الدبلو وزعة URL الاتي على المستخدمين

http://mrmwrwis.mrmewr.local/mrmwrwt/wrs/test/login.jsp

ولكن المشكلة في السكيوريتي أي حد من استدعي أي صفحة فعلى سبيل المثال عندي صفحة falaj.jspx ممكن أي حد استدعاها كالاتي

مع العلم باني اطلعت على ال application security لبعض الكتب التابعة لاوراكل ولكن لم تكن واضحة تماما اطلب منكم الايضاح

  • الردود 44
  • المشاهدات 11.1k
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

Most Popular Posts

  • بالنسبه للسيكيوريتى فى ال ADF (وده موضوع شائع جدا) فانت عندك حلول كثيره الحل الاول : استخدام ال ADF Security Framework واتكلمت عنه بالتفصيل فى موضوع من هنا الحل الثانى : الحل البرمجى وهو انك ب

  • لقد اطلعت على المثال ولكن به العديد من الملاحظات من وجهة نظر المستخدم او من وجهة نظر فنية وسأقوم إن شاء الله بسرد جميع الملاحظات حتى يستفيد منها الكل في وقت لاحق

الصور المنشورة

بتاريخ:

إن استخدام الـ filters هو الحل الأمثل لذلك فلا تبحث في كتب أوراكل أو حتى كتب ADF بل في كتب Servlets حيث ستجد أنماط مختلفة لمنع الدخول من الـ URL

بتاريخ:
  • كاتب الموضوع

مشكور اخي العزيز sd4it بس كمان اذا اي كتاب او رابط لاي كتاب ترسل لي تحياتي

بتاريخ:

بالنسبه للسيكيوريتى فى ال ADF (وده موضوع شائع جدا) فانت عندك حلول كثيره

الحل الاول : استخدام ال ADF Security Framework واتكلمت عنه بالتفصيل فى موضوع من هنا

الحل الثانى : الحل البرمجى

وهو انك بتستخدم ال page phase Listener ووظيفتها انها فى اى مره بيتم استدعاء اى صفحه بتتاكد ان المستخدم ده عمل لوجين فى الاول قبل الدخول وكمان ممكن تعمل امتداد ما دام بتشتغل برمجيا بحيث تمنع اى حد يعمل Copy and paste لل URL حتى لو كان عامل لوجين

مثال على ذلك

بما ان الموضوع ده ناس كتير بتسال عليه فانا كنت عامله برنامج لوجين قبل كده فى المشاركه دى من هنا قمت بتطوير هذا البرنامج ليتضمن الاتى

1 بعد اضافة الكلاسين Security Util وكمان page Phase Listener وطبعا كلاسpage phase Listener بنسجلها فى ال <phase-listener> فى ملف ال adf_settings.xml اذا انت لم تقم بعملية الدخول وحاولت الدخول على اى صفحة اخرى فى البرنامج عن طريق كتابة ال URL بتاعها سيحدث لك redirect لصفحة اللوجين وكمان حتظهر رساله انك لم تقم بعملية الدخول

2 أيضا اضفت security زياده عن طريق استخدام ميثود isViewState() عشان تمنع اى شخص حتى لو عامل لوجين ومتسجل انه يكتب ال URL لاى صفحه اخرى فى الموقع واذا عمل كده بتظهر له رساله انه من الممنوع كتابه الURL لصفحات الموقع وبتعمل له redirect برضه لصفحة اللوجين ( من الممكن حذف هذه النقطه من الابليكيشن اذا كنت عاوز بس انك تمنع اللى معملوش لوجين انهم يدخلوا على الموقع )

حمل البرنامج من المرفقات وبالنسبة لسكريبت جدول ال users حتلاقيه فى المشاركه الاولى اللى فيها البرنامج قبل التعديل وطبعا البرنامج بيشتغل على 11 وليس 10

SimpleExample.rar

بتاريخ:
  • كاتب الموضوع

مشكورة اخت هالة ان شاء الله بطلع عليه او لو في اي شيي برجع ليك

بتاريخ:
  • كاتب الموضوع

تحية اخت هالة اطلعت على النموذج حقيقة رائع بس هذا بالنسبة 11جي
كيف بالنسبة لي 10جي

بتاريخ:

شوف حاليا معنديش JDeveloper 10g على الجهاز عشان اقولك اية اللى حتعمله تعديل لكن الحل البرمجى ده ما دام بالكود فالطبع يمكن تنفيذه على ال 10g اعمل ال الكلاسين وحاول تسجل ال page phase Listener فى ال life Cycle فى ال faces_config واذا ما اشتغلتش فانت لازم تكريت ملف الadf-setting.xml فى فولدر ال Meta-inf لان الملف ده بييتكريت by Default فى ال JDeveloper 11g وطبعا لازم تعرف variable فى السيشن نوعه Boolean اللى هو logged in وبيبقى ب true اذا الuser عمل login زى ما موجود فى المثال لان فى كل مره الكلاس بتعمل check على ال variable ده حاول تطبق المثال ده على ال 10g طبقا لاحتياجاتك واذا وقفت معاك حاجة هات رسالة الخطأ

بتاريخ:
  • كاتب الموضوع

شكرا اخت هالة ان شاء الله بطبقوا او برجع ليك

بتاريخ:

لقد اطلعت على المثال ولكن به العديد من الملاحظات من وجهة نظر المستخدم او من وجهة نظر فنية وسأقوم إن شاء الله بسرد جميع الملاحظات حتى يستفيد منها الكل في وقت لاحق

بتاريخ:

توجد الملاحظات التالية من وجهة نظر المستخدم:
1. عند فتح الموقع أول مرة فإنه تظهر رسالة خطأ في حين أنه من الطبيعي للمستخدم الدخول على الموقع بدون رسالة خطأ. تكون هذه الرسالة مقبولة أثناء العمل في الشاشات وليس عند الدخول أول مرة
2. ليس من المطلوب منع كتابة الـ URL ولكن المطلوب هو منع كتابة URL ليس لي صلاحية عليه خاصة أنه أحياناً تحدث رسالة خطأ في ADF ويضطر المستخدم لإعادة تحميل الصفحة وسيجد النظام يرميه إلى شاشة الدخول. ولو رغبنا بالفعل في منعه من كتابة الـ URL فيجب أن تكون لدينا صفحة رئيسية نرميه عليها بدلاً من إعادته لشاشة الدخول مرة ثانية

توجد الملاحظات التالية من وجهة نظر فنية:
1. في SecurityPagePhaseListener لا يوجد أي داعي للمتغير currentView
2. في SecurityUtil الاعتماد على array تحمل أسماء الصفحات غير عملي لأنه عادة تكون اسماء الصفحات في قاعدة البيانات بحيث يمكن إضافة أسماء الشاشات في قاعدة البيانات وبالتالي لا تكون أسماء الشاشات في الكود
3. عند إرجاع بيانات المستخدم في authenticateUser فإننا لا نستخدم Map لأنه تجعلنا نكتب اسم المتغير (وقد تحدث فيه أخطاء إملائية) في حين أنه من الأفضل إرجاع UserData بحيث يمكننا استخدام الـ getter لإرجاع أي بيانات نحتاجها
4. الـ View Object باسم User لا داعي له في الحقيقة لأنه يمكننا استخدام UserData وعمل الفلتر عليه بدون bind variables وبذلك لن نحتاج إلى إنشاء User
5. طريقة استدعاء الدوال من AppModule قديمة وطويلة بلا داعي حيث توجد دوال في ADF لاستدعاء authenticateUser مباشرة كما وضحت في مثال الدخول سابقاً
6. CustomApplicationModuleImpl لا داعي له لأنه يمكن وضع الدالتين التي به في AppModule مباشرة
7. طريقة الحماية المتبعة تتطلب استخدام Task Flow وهذا يعتبر عيباً لأنه يمكن بناء نظام بدون استخدام Task Flow

بتاريخ:

اخ / sd4it

سارد على ملاحظاتك واقولك ما هو الداعى وما هو الافضل

عند فتح الموقع أول مرة فإنه تظهر رسالة خطأ في حين أنه من الطبيعي للمستخدم الدخول على الموقع بدون رسالة خطأ


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


ليس من المطلوب منع كتابة الـ URL ولكن المطلوب هو منع كتابة URL ليس لي صلاحية عليه


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

1 اذا المستخدم لم يكن عامل لوجين من الاساس وحاول الدخول على اى صفحه protected فبالتالى سيحدث له redirect لصفحة اللوجين مع رسالة انه لم يسجل الدخول بعد وده كان نفس طلب سائل الموضوع

2 اضافة Security زياده تمنع اى شخص من كتابة ال URL وانا قلت للسائل اذا لم يحتاجها من الممكن حذفها وعلى فكره فى حالة اعادة تحميل الصفحة لاى سبب لن يحدث للمستخدم Redirect


ولو رغبنا بالفعل في منعه من كتابة الـ URL فيجب أن تكون لدينا صفحة رئيسية نرميه عليها بدلاً من إعادته لشاشة الدخول مرة ثانية


بالطبع سيكون لدينا صفحة رئيسيه لاعادة اى مستخدم قام بكتابة ال URL ولن نوجهه لصفحة اللوجين لاحظ هنا ان المثال لا توجد فيه غير صفحتين فقط لا غير ومفيش اى صفحة تانيه يمكن عمل Redirect له غير صفحة اللوجين لكن عند تطبيق هذا المثال على برنامج كامل ففى هذه الحالة عند كتابة ال URL لاى صفحة سيتم توجيهه للصفحة الرئيسيه وليس لصفحة اللوجين

بالنسبة لملاحظاتك الاخرى


في SecurityPagePhaseListener لا يوجد أي داعي للمتغير currentView


باحاول حاليا توسيع هذا المثال عشان يتضمن حاجات تانية تعطى Security أكبر ولذلك المتغير ده موجود لفكرة لم تكتمل بعد


في SecurityUtil الاعتماد على array تحمل أسماء الصفحات غير عملي لأنه عادة تكون اسماء الصفحات في قاعدة البيانات بحيث يمكن إضافة أسماء الشاشات في قاعدة البيانات وبالتالي لا تكون أسماء الشاشات في الكود


لا يوجد هنا غير اسم الصفحات ال non_protected وهى صفحة اللوجين فقط و كلامك يدل ان فى الكود كل صفحات الابليكيشن وده خاطىء تماما

عند إرجاع بيانات المستخدم في authenticateUser فإننا لا نستخدم Map لأنه تجعلنا نكتب اسم المتغير


من نصح بضرورة عدم استخدام ال map وما المشكلة من كتابة اسم المتغير اللذى تم تخزينه هل هى الاخطاء الاملائيه .؟؟؟؟؟؟؟


الـ View Object باسم User لا داعي له في الحقيقة لأنه يمكننا استخدام UserData وعمل الفلتر عليه بدون bind variables وبذلك لن نحتاج إلى إنشاء User


الحقيقه اندهشت فعلا من هذه الملاحظه والخلط بين readonly View Object للSecurity فقط لا غير وبين View object تانى هو Updatable بيعمل تحديث فى بيانات المستخدم


طريقة استدعاء الدوال من AppModule قديمة وطويلة بلا داعي حيث توجد دوال في ADF لاستدعاء authenticateUser مباشرة كما وضحت في مثال الدخول سابقاً



الحقيقه انى لم اشاهد اى امثلة دخول ولكن عندما تذكر شىء فاذكر لى عيوبه لاننا لم نكتب اى سطركود لاستدعاء الميثود من الابليكيشن موديول فقط اخرجناها الى Client Interface ووضعناها فى ال page Definition فاين الطول الذى تتكلم عنه ؟

واخيرا من ناحية نقطة التاسك فلو ففى هذا المثال لا نستخدم اى task flow او Fragment أو region فقط navigation عادى جدا فماذا تقصد بهذه النقطه؟؟؟
بتاريخ:

الأخت هالة:
سأذكر لك وللكل تصحيح وتحسين لبعض ما ذكرتيه للفائدة.

في مسالة استخدام map ففي رأيك أيهما أفضل: أن نكتب map.get("userName) أم user.getUserName() ، ففي الواقع الثانية أفضل لأنه لن يتعين على المبرمج معرفة اسم الـ key وسيكون عنده auto complete كما أنه في حالة التعديل فيمكن استخدام خاصية refactoring لتعديل اسم الخاصية وهذا لا يمكن في حالة استخدام Map وهذا يعرف باسم strongly typed properties.

بالنسبة لمسألة إنشاء view object فهل إذا أردت الاستعلام في جدول معين برمجياً أقوم بإنشاء View Object وبه bind variables أم أقوم بالاستعلام باستخدام الجدول الأصلي (حتى لو يستخدم لتحديث البيانات) لأن الـ view object يستخدم أساساً للـ query وبالتالي بدلاً من إنشاء view object لكل استعلام أريده فيمكنني استخدام الـ view object الأصلي

مسألة استدعاء الدالة من AppModule تتطلب الذهاب إليه وإنشاء client interfaceوهذا يقوم بإنشاء 2 class ثم نذهب للـ page definition ونسحب الدالة فيه ثم نستدعيها في حين أن مثال الدخول الذي ذكرته في الفيديوهات
والذي كان عليه أكثر من سؤال يوضح الطريقة المباشرة لذلك وهي لا تحتاج إلى هذه الخطوات (وللعلم في المشاريع الكبيرة هذه الخطوات التي ترينها صغيرة تفرق كثيراً مع كثرة حجمها). أيضاً من عيوب هذه الطريقة أنه عند الحاجة إلى تعديل function parameters فيجب التعديل يدوياً في الـ client interface وهذا أيضاً شئ يستهلك وقتاً.

كوني وضعت الصفحات في الملف adfc-config فهذا يعني استخدام الـ task flow وفي حالتك هذه تسمى Unbounded Task Flow فماذا لو كانت الصفحات موجودة في faces-config.

أخيراً تنفيذ مشاريع كبيرة ومطلوب فيها عامل السرعة يجعل الشخص يفكر بطريقة مختلفة لأن الخبرة هنا لها دور كبير

بتاريخ:
  • كاتب الموضوع

حقيقة المثال رائع جدا اخت هالة بس بالنسبة لطريقة الاستدعاء صاح قد يكون هنالك عدة طرق انا شخصيا بستخدم
طريقة اكثر اختصارا وهي
appmoduleimpl()
من خلال هذالكلاس بستطيع اصل الى كل المسود بس الشي اللي ممكن اضيفو ان ليس من الممكن ان تعمل
back
للصفحة السابقة

بتاريخ:
  • كاتب الموضوع

هل من الممكن اضافة اسم مستعا ر للصفحة على سبيل المثال المسار الكامل للصفحة
mrmwr.wrs.default.jspx
هل ممكن اظهالره على المتصفح على الصورة mrmwr ؟
قد يكون نوع من السرية

بتاريخ:
  • كاتب الموضوع

اخت /هاله جزاك الله الف خير بس عندي سؤال
كيف انا بحدد الصفحة protected
او non_protected ?

بتاريخ:
  • كاتب الموضوع

اخت هالة بعد ما اطلعت على المثال وجدت

private static final String[] NO_PROTECTED_PAGES = {"/Home"};
هذا بالنسبة لل non_protected
اذا عندي اكثر من ضفحة non_protected كيف وين اضيفة ؟

  • بعد 2 أسابيع...
بتاريخ:

اولا انت عندك array of String ضيف كل الصفحات ال non Protected فيها وخللى بالك من حاجه مهمه اوى وهى التغييرات اللى فى 11 عن 10 واول تغيير فيهم ان فى 10 بيتم كتابة الصفحه بامتدادها اما فى 11 فالويب لوجيك لا يسمح بهذا يعنى الصفحة فى 10 حتتكتب فى ال array بهذه الطريقه "Home.jspx/" وتغييرات تانيه تتعلق بال phase Listener اللى بتعملها implement لان فى 11 بتعمل implement لPagePhaseListener زى ما موجود فى المثال اما فى 10 حتعمل implement ل PhaseListener على طول عشان تقدر تضيفها لل Life Cycle فى ال faces-config على طول

بتاريخ:
  • كاتب الموضوع

اخت /هالة جزاك الله الف خير على المجهود المقدرة وانا بديت مشروع جديد ب 11 جي لان حقيقة في ميزات كتيرة مافي ال 10 جي

بتاريخ:
  • كاتب الموضوع

حاولة اعمل implement ل PhaseListener على طول عشان تقدر تضيفها لل Life Cycle فى ال faces-config على طول لكن للاسف ما ممكن ما بديني امكتنية اصل للكلاس
امن رحت لي Cycle او سويت نيو ما اعطاني امانية الوصول الى مسار الكلاس

بتاريخ:

أولا: فين الكود اللى انت كاتبه عشان اعرف انت عامل ايه بالظبط بصراحه مش فاهمه المشكله ايه بالظبط لكن عموما اختصارا للوقت هى دى الكلاس اللى حتبقى فى 10g واذا وقفت معاك حاجه تانى هات الكود اللى كاتبه




import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

public class SecurityPagePhaseListener implements PhaseListener

public void beforePhase(PhaseEvent event) {

}

public void afterPhase(PhaseEvent event) {
  if (event.getPhaseId().getOrdinal() == 1) {

// put your  code Here

		}
	}

 public PhaseId getPhaseId() {

	return PhaseId.RESTORE_VIEW;
}
  

بتاريخ:
  • كاتب الموضوع

الكود اوك مفيش مشكلة بس في 11 جي انت سويتي كول للمثود في المجلد meta ....
ذي ما ذكرتي لي بالنسبة ل 10 جي رحت الى Life Cycle فى ال faces-config ما اداني امكانية اصل الى مسار الكلاس بمععنى عندما اروح الى faces-config واختار Life Cycle ثم جديد لاضافة المثود لا استطيغ الوصول الى مسار المثود

بتاريخ:

فى 11g كل اللى عملته انى وضعت ال phase Listener فى ملف ال adf-settings.xml فى 10g اول ما حتقول ان الكلاس implement
ال PhaseListener زى ما مكتوب فى الكود السابق اول ما تروح على ال lifeCycle حتظهر عندك الباكيج وجواها الكلاس على طول وانا جربتها عندى على 10 وظهرت عادى

بتاريخ:
  • كاتب الموضوع

الرجاء معاينة المرفق عملت كل هذه الخطوات لكن مافي امكانية اصل الى الكلاس

post-117776-0-03758700-1321416452_thumb.jpg

  • بعد 2 أسابيع...
بتاريخ:

اولا باعتذر عن التاخر فى الرد بسبب الاوضاع الحاليه ربنا يهدى نفوس الثوار ويرحم الشهداء اللهم امين

ثانيا: الحقيقه انى مش فاهمه ازاى مش شايف الكلاس عموما انا عملت لك البرنامج على 10g يمكنك تحميله من هذا الرابط والنسخة اللى معمول عليها هى 10.1.3 واذا كنت حتفتحه على نسخة مختلفه فى 10g فطبعا زى ما احنا متعودين فى 10 بتعمل copy لل adf-faces-impl.jar و jsf-impl.jar من ال version اللى مستخدمها وتضعهم فى ال lib فى ال workspace بتاعتك وبعدين تفتحه عادى حتلاقى انه بيتاكد فى كل مره من اليوزر وانه authenticated قبل ما يدخله فى اى مكان

بتاريخ:
  • كاتب الموضوع

اولا : نسال الله ان يعود الامن الى ارض الكنانة والسلام ة للك ولكل الشعب المصري الصديق
انشاء الله بجربو او بديك الافادة شكرا

زائر
هذا الموضوع مغلق.

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.