سؤال

لدي موقع على شبكة الإنترنت مكتوبة في ColdFusion يحتوي على كل من صفحات الويب التفاعلية المعتادة وتشغيل بعض المهام من خلال جدولة CF. تخطيط dir هو

/
/app
/scheduledTasks

أرغب في أن تكون المهام قادرة على استخدام كل الإعدادات نفسها، إلخ. تم إنشاؤها في التطبيق .cfc داخل / تطبيق حتى أود نقل هذا الدليل الكامل / المجدول إلى / التطبيق. المشكلة هي أن هذا التطبيق.cfc يستخدم آلية CFLOGIN ونموذج تسجيل الدخول الخاص بي. يتيح لك جدولة CF فقط توفير اسم مستخدم وكلمة مرور لمصادقة HTTP الأساسية. المهام المجدولة لن تضمن أبدا ذلك. كيف يمكنني حل هذا أم هل هناك نهج أفضل للبدء؟

لقد تساءلت عن النظر في بعض متغير CGI في تطبيقي onrequeststart الخاص بي مثل وكيل المستخدم، و / أو قيمة IP البعيدة، أو / أو قيمة سحرية في عنوان URL Param، وإذا كان كل شيء هناك، تجاوز الأمان لأنني "أعرف" جدولة CF في الطرف الآخر. هذا ليس أمان كبير ولكن قد يكون مقبولا.

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

هل كان لدى أي شخص مشكلة مماثلة وحلها؟

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

المحلول

اترك مهام الجدول الزمني في مجلدها الخاص مثلك حاليا من أصل الموقع.

قم بإنشاء تطبيق.cfc في مجلد ScheduletAsks الذي يمتد إلى واحد في دليل التطبيقات مثل ذلك:

<cfcomponent extends="/.apps/application">

قم بتحميل طريقة OnRequestStart ووضعها في مصادقةك مثل ذلك:

<cffunction name="onRequestStart" returntype="void" access="public" output="false">
    <cfargument name="targetPage" type="any" required="true">
    <cfif not structkeyexists(url, "access") or not url.access eq application.ApplicationName>
        <cflocation url="/" addtoken="false">
    </cfif>
</cffunction>

هذا هو الأمن الأساسي للغاية ولكنه سيحصل على المهمة. تخصيص تروق لك.

نصائح أخرى

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

تمر المهام المجدولة ColdFusion في بعض البيانات في معلومات CGI بما في ذلك:

http_user_agent = cfschedule.

الآن Http_User_Agent قابلة للفحواء، وبالتالي فإن السؤال التالي هو تحديد مدى احتجاجك في الوصول إلى المجلد. هل تريد فقط CF لتشغيل هذه المهام؟ أو هل تريد تشغيلها من الخارج أيضا؟ فقط جهاز الكمبيوتر الخاص بك؟ وما بعد ذلك بمجرد تحديده، يمكنك تحديد كوده وللحل RIP747 هو فكرة جيدة لذلك لن أقترح أي شيء آخر! ؛)

سوف أتحقق من أن الطلب يأتي فقط من IP محلي (إذا كنت تقوم بتشغيل الجدول الزمني في نفس الخادم ...) ..... آخر (أعتقد أفضل) هو ما أقوم به normallydo للسماح بإجراء عمليات الويب أو رصد الروتين تستخدم خارجيا ودون تسجيل الدخول:

على You Application.cfc، الطريقة onapplicationstart، ضع شيئا مثل:

<!--- List of Directories Excluded from Login --->
<cfset application.ExcludedLoginDirs = "/monitoring/registration/wservices/">   

ثم على OnsessionStart الخاص بك (أو أي طريقة للمستخدم لمنع الوصول غير المصرح به وإعادة توجيه تسجيل الدخول:

<!--- Find current directory --->
<cfset currentDir = listgetAt("-," & cgi.Script_Name, listLen("-," & cgi.script_Name, "/")-1, "/")>

<!--- Exclude LOGIN if user authenticated or Directory Excluded --->
<!--- In this code, I FORCE login if user is NOT autenticated AND directory is NOT excluded --->
<cfif Val(session.User_ID) EQ 0 AND ListFind(application.ExcludedLoginDirs, "#currDir#", "/") EQ 0> 
      ............Login..........
</cfif>

إلخ.......

بعض المزايا على هذه الطريقة هي: 1. إذا لم ينفذ برنامج المتصل ملف تعريف الارتباط والحفاظ على حالة الجلسة، فإنه يعمل. 2. إذا كان برنامج المتصل يحتفظ بالجلسة، فسيتم منح الوصول إلى الصفحات المحمية التي تمر CFID و CFToken في عنوان URL للمكالمات. 3. إذا مرن جدا ولا صيانة أخرى غير إضافة دليل جديد في نهاية المطاف وتدمير التطبيق ... (أنا استخدم

<cfif isDefined("url.destroyApp")>
     <cfset reinit = this.onApplicationStart()>
</cfif> 

على الطريقة onrequeststart و

<cfset StructClear(application)>

كطردي الأول على طريقة OnApplicationStart.

آمل أن يساعد!

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