سؤال

أحاول أن أضع دليلا على مفهوم نظام الاستيفاء سلسلة آمنة XSS.

إعطاء سلسلة مع بدائل،

"Hello <b>$planetoid</b>!"

أريد كسرها في الأجزاء الحرفية والبدائل ("Hello<b>" planetoid "</b>!") ثم قم بتشغيل آلة حالة اليسار إلى اليمين عبر الأجزاء الحرفية. عندما وصلت إلى قيمة داخلية (planetoid في ما سبق)، أحتاج إلى أن أكون قادرا على الوصول من الدولة إلى وظيفة الفرار المناسبة.

هل يعرف أحد بأي أمثلة لكيفية استخدام LEX / YACC / BISON لصالح آلة الحالة وتكون قادرا على ربط الملصقات في القواعد مع دول الإخراج؟ أريد أن أشتقي آلة الحالة التي يمكنني استخدامها في جافا سكريبت، ومحاولة استبدال تطبيق سلسلة PHP الأساسي.

ويرد وصف أسبابي للقيام بذلك هنا.

هتافات، مايك

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

المحلول

بشكل عام، ليس من الممكن إنشاء آلة حالة بالنسبة للناسيات التي يمكن تمثيلها في BNF. يمكن لآلات الدولة التعرف إلا على اللغات العادية ويمكن BNF تحديد لغات خالية من السياق. يمكن YACC إنشاء المحللين. هل سيكون ذلك كافيا؟

نصائح أخرى

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

ST_EXPECT_TAG_NAME : { state = TAG_NAME };
TAG_BODY
    : '<' ST_EXPECT_TAG_NAME TAG_NAME ATTRS SPACES '>' ST_OUT_OF_TAG
    ;

المترجمة الناتج أسماء الولاية في بيان التبديل

YY_REDUCE_PRINT (yyn);
switch (yyn)
  {
      case 118:
#line 74 "tmp/html-combo.y"
    { state = TAG_NAME ;}
    break;

قد تكون هناك طريقة لاستخراج الجداول دون تحليل C، لكنني جاهل جدا من yacc / bison.

يمكنك استخدام yacc / bison لهذا. في البداية النظر في Bison من الصعب تحديد مكانه حيث يمكنك تطبيق آلة الحالة. يتم حل القواعد في BISONN اليسار اليمين. بمعنى آخر؛ إذا كان لديك قاعدة (تسمى SUCE0) التي تستمد المادة 1 Suit2 Soice3، يتم استدعاء الإجراءات بالترتيب: المادة 1، المادة 2، المادة 3، المادة الحكم. يمكنك الجمع بين ذلك باستخدام آلة حالة عالمية، مع قيم إرجاع ديناميكية للقواعد (أستخدم اتحادا مع أنواع مختلفة مثل سلسلة أو int أو حتى حاوية لقيم الإرجاع).

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