استخدام تجميع التجميع من المصدر لتقييم المعادلات الرياضية في C#

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

سؤال

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

شكرًا

سي # .نت 2.0، وينفورمز

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

المحلول

إذا كان من الممكن حفظ "معادلات" C# وتبادلها بين المستخدمين، فمن المؤكد أن هناك مخاطرة أمنية.يمكن للمستخدم أن يضع تعليمات برمجية ضارة في المعادلة، ويجعلها تفعل أشياء سيئة على أجهزة المستخدمين الآخرين.أو يمكن ببساطة خداع المستخدم لإدخال "معادلة" ضارة (فكر في المعادلة القديمة بديل + F4 مزحة هنا).

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

يعد تحميل التجميعات التي تم إنشاؤها ديناميكيًا في AppDomain منفصل فكرة جيدة على أي حال، لأنه يسمح لك بذلك تفريغ هم مرة اخرى.

نصائح أخرى

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

ومنذ بعض الوقت لقد عثر عليها وسيلة ذكية للقيام بذلك: الاستفادة من وحدة التقييم ظيفة ل JScript. يمكنك إنشاء فئة ل JScript بسيطة:

  class JsMath
  {
    static function Eval(MathExpression : String) : double
    {
      return eval(MathExpression);
    };
  }

وتجميع مثل هذا:

<اقتباس فقرة>   

وهيئة الأوراق المالية / الهدف: JsMath.js مكتبة

والآن يمكنك فقط الرجوع إلى مكتبة JsMath واستخدام الأسلوب JsMath.Eval.

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

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

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