عیب یابی خطای زمان اجرا Protection JSON

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

اجرا ناموفق بود

کد خطا

steps.jsonthreatprotection.ExecutionFailed

متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]: error_description
          at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

انواع خطاها و علل احتمالی

سیاست JSONThreatProtection می‌تواند انواع مختلفی از خطاهای ExecutionFailed را ایجاد کند. جدول زیر انواع مختلف خطاها و دلایل احتمالی آنها را فهرست می‌کند:

نوع خطا علت
طول نام ورودی شیء از حد مجاز تجاوز کرده است حداکثر طول رشته مجاز در نام ورودی یک شیء بیش از حد مجاز است.
تعداد ورودی شیء از حد مجاز فراتر رفت حداکثر تعداد ورودی‌های مجاز در یک شیء بیش از حد مجاز است.
تعداد عناصر آرایه از حد مجاز فراتر رفته است تعداد عناصر مجاز در یک آرایه از حداکثر تعداد مجاز تجاوز کرده است.
عمق ظرف از حد مجاز تجاوز کرده است از حداکثر عمق مجاز تودرتو تجاوز شده است.
طول مقدار رشته از حد مجاز تجاوز کرده است حداکثر طول مجاز برای یک مقدار رشته‌ای تجاوز کرده است.
شیء JSON نامعتبر ورودی JSON Payload نامعتبر است.

طول نام ورودی شیء از حد مجاز تجاوز کرده است

متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded object entry name length at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

مثال متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded object entry name length at line 2",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که بار داده پیام ورودی مشخص شده توسط عنصر <Source> شامل یک شیء JSON با نام ویژگی باشد که از حداکثر طول مشخص شده در عنصر <ObjectEntryNameLength> بیشتر باشد.

برای مثال، اگر عنصر <ObjectEntryNameLength> در سیاست به عنوان ۵ مشخص شده باشد، اما محتوای پیام ورودی دارای یک ویژگی JSON باشد که نام آن بیش از ۵ کاراکتر باشد، این خطا رخ می‌دهد.

تشخیص

  1. پیام خطا را بررسی کنید تا نام سیاست JSONThreatProtection و شماره خطی که نام ورودی طولانی در آن قرار دارد را شناسایی کنید. برای مثال، در پیام خطای زیر، نام سیاست JSONThreatProtection، JSON-Threat-Protection-1 و شماره خط در payload، 2 است.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. سیاستی را که در مرحله 1 شناسایی کردید، بررسی کنید و مقدار مشخص شده در عنصر <ObjectEntryNameLength> را یادداشت کنید.

    برای مثال، در سیاست JSONThreatProtection زیر، <ObjectEntryNameLength> روی 5 تنظیم شده است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>5</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. شماره خط خاص (که در مرحله ۱ مشخص شده است) از payload ورودی را بررسی کنید و بررسی کنید که آیا طول نام شیء از مقدار مشخص شده در عنصر <ObjectEntryNameLength> (که در مرحله ۲ مشخص شده است) بیشتر است یا خیر. اگر طول نام شیء از آن عدد بیشتر باشد، علت خطا همین است.

    در اینجا یک نمونه از payload ورودی آورده شده است:

    {
       "number" : 500,
       "string" : "text"
    }
    

    JSON payload نشان داده شده در بالا دارای یک ویژگی به نام number در خط 2 است که دارای 6 کاراکتر است (طول نام 6 است). از آنجایی که طول نام شیء بیشتر از 5 است (مقداری که برای عنصر <ObjectEntryNameLength> مشخص شده است)، خطای زیر را دریافت می‌کنید:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    

وضوح تصویر

اگر سیاست JSONThreatProtection برای محافظت در برابر بارهای داده‌ای با نام‌های ورودی شیء که از مقدار تعریف‌شده تجاوز می‌کنند، در نظر گرفته شده باشد، انتظار می‌رود پیام خطا نمایش داده شود. در این مورد، هیچ اقدام اضافی لازم نیست.

با این حال، اگر تشخیص دهید که نام‌های ورودی شیء طولانی‌تر می‌توانند بدون هیچ پیامدی در payload مشخص شوند، <ObjectEntryNameLength> را بر اساس نیازهای خود به مقدار مناسبی تغییر دهید.

برای مثال، اگر فکر می‌کنید می‌توانید نام اشیاء را تا طول ۱۰ کاراکتر مجاز کنید، سیاست JSONThreatProtection را به صورت زیر تغییر دهید:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>10</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

تعداد ورودی شیء از حد مجاز فراتر رفت

متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded object entry count at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

مثال متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded object entry count at line 7",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که بار داده پیام ورودی مشخص شده توسط عنصر <Source> شامل یک شیء JSON باشد که شامل ورودی‌ها (ویژگی‌ها) بیشتری نسبت به مقدار مشخص شده در عنصر <ObjectEntryCount> در خط‌مشی باشد.

برای مثال، اگر عنصر <ObjectEntryCount> برابر با ۵ باشد، اما محتوای JSON ورودی بیش از ۵ ورودی داشته باشد، این خطا رخ می‌دهد.

تشخیص

  1. پیام خطا را بررسی کنید تا نام سیاست JSONThreatProtection و شماره خطی که تعداد ورودی‌ها در آن از حد مجاز فراتر رفته است را شناسایی کنید. برای مثال، در پیام خطای زیر، نام سیاست JSON-Threat-Protection-1 و شماره خط در payload 7 است:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. مقدار مشخص شده در عنصر <ObjectEntryCount> از سیاست (که در مرحله 1 مشخص شده است) را یادداشت کنید.

    در مثال سیاست زیر، <ObjectEntryCount> روی 5 تنظیم شده است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. شماره خط خاص (که در مرحله ۱ مشخص شده است) از payload ورودی را بررسی کنید و بررسی کنید که آیا تعداد موجودیت‌های موجود در payload بیشتر از مقدار مشخص شده برای عنصر <ObjectEntryCount> (که در مرحله ۲ مشخص شده است) است یا خیر. اگر تعداد اشیاء از تعداد ورودی اشیاء بیشتر باشد، علت خطا همین است.

    در اینجا یک نمونه از payload ورودی آورده شده است:

    {
    "name" : "John",
    "id" : 234687,
    "age" : 31,
    "city" : "New York",
    "country" : "USA",
    "company" : "Google"
    }
    

    در JSON payload نشان داده شده در بالا، ششمین ورودی در خط شماره ۷ (company) رخ می‌دهد. از آنجایی که تعداد ورودی‌های شیء در JSON payload ورودی بیشتر از ۵ است (مقداری که برای عنصر <ObjectEntryCount> مشخص شده است)، خطای زیر را دریافت می‌کنید:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count at
    line 7
    

وضوح تصویر

اگر سیاست JSONThreatProtection برای محافظت در برابر بارهای داده‌ای با تعداد ورودی‌های شیء که از یک آستانه خاص فراتر می‌رود، در نظر گرفته شده باشد، در این صورت پیام خطا قابل انتظار است. در این حالت، نیازی به انجام هیچ اقدام اضافی ندارید.

با این حال، اگر تشخیص دهید که ورودی‌های شیء بیشتری می‌توانند بدون هیچ پیامدی در payload گنجانده شوند، <ObjectEntryCount> را بر اساس نیازهای خود به مقدار مناسبی تغییر دهید.

برای مثال، اگر فکر می‌کنید می‌توانید تا 10 ورودی شیء را مجاز کنید، سیاست JSONThreatProtection را به صورت زیر تغییر دهید:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>10</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

تعداد عناصر آرایه از حد مجاز فراتر رفته است

متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded array element count at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

مثال متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded array element count at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که بار داده پیام ورودی مشخص شده توسط عنصر <Source> شامل یک آرایه JSON با تعداد عناصر بیشتر از تعداد مشخص شده در عنصر <ArrayElementCount> در خط‌مشی باشد.

برای مثال، اگر عنصر <ArrayElementCount> با 3 مشخص شده باشد، اما ورودی دارای یک آرایه JSON با بیش از ۳ عنصر باشد، این خطا رخ می‌دهد.

تشخیص

  1. پیام خطا را بررسی کنید تا نام سیاست و شماره خطی که در آن طول آرایه از حد مجاز تجاوز کرده است را شناسایی کنید. برای مثال، در پیام خطای زیر، نام سیاست JSON-Threat-Protection-1 و شماره خط در payload 3 است:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. مقدار مشخص شده برای عنصر <ArrayElementCount> از سیاست (که در مرحله 1 مشخص شده است) را یادداشت کنید.

    در مثال زیر از سیاست JSONThreatProtection، <ArrayElementCount> برابر با 3 است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. شماره خط خاص (که در مرحله ۱ مشخص شده است) از payload ورودی را بررسی کنید و بررسی کنید که آیا آرایه مشخص شده در آنجا تعداد بیشتری از تعداد مشخص شده در عنصر <ArrayElementCount> (که در مرحله ۲ مشخص شده است) دارد یا خیر. اگر تعداد عناصر آرایه از تعداد مشخص شده بیشتر باشد، علت خطا همین است.

    در اینجا یک نمونه از payload ورودی آورده شده است:

    {
     "name":"Ford",
     "models":[
        "Mustang",
        "Endeavour",
        "Fiesta",
        "EcoSport",
        "Focus"
     ]
    }
    

    JSON Payload نشان داده شده در بالا دارای ۵ عنصر در آرایه‌ای به نام models در خط ۳ است. از آنجا که تعداد عناصر آرایه بیشتر از ۳ است (مقدار مشخص شده برای عنصر <ArrayElementCount> )، خطای زیر را دریافت می‌کنید:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count
    at line 3
    

وضوح تصویر

اگر سیاست JSONThreatProtection برای محافظت در برابر حملات با آستانه‌ی تعداد آرایه‌ی خاص در نظر گرفته شده باشد، انتظار می‌رود پیام خطا نمایش داده شود. در این مورد، هیچ اقدام اضافی لازم نیست.

با این حال، اگر تشخیص دهید که تعداد بیشتری از عناصر در یک آرایه مجاز هستند، <ArrayElementCount> بر اساس نیازهای خود به مقدار مناسبی تغییر دهید.

برای مثال، اگر فکر می‌کنید می‌توانید تا ۵ عنصر آرایه را مجاز کنید، سیاست را به صورت زیر تغییر دهید:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>5</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

عمق ظرف از حد مجاز تجاوز کرده است

متن پاسخ خطا

ترافیک زمان اجرا، کد پاسخ ۵۰۰ را با خطای زیر برمی‌گرداند:

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded container depth at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

مثال متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded container depth at line 5",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که بار داده پیام ورودی مشخص شده توسط عنصر <Source> شامل یک شیء JSON باشد که شامل عناصر JSON با عمق کانتینری است که از حداکثر عمق کانتینر مشخص شده در عنصر <ContainerDepth> در سیاست بیشتر است. عمق کانتینر، حداکثر عمق تو در تو مجاز برای عناصر JSON است. به عنوان مثال، آرایه‌ای حاوی یک شیء که خود شامل یک شیء دیگر است، منجر به عمق کانتینری ۳ می‌شود.

برای مثال، اگر عنصر <ContainerDepth> برابر با 3 باشد، اما عمق کانتینر ورودی از این حد بیشتر باشد، این خطا رخ می‌دهد.

تشخیص

  1. پیام خطا را بررسی کنید تا نام سیاست JSONThreatProtection و شماره خطی که در آن عمق کانتینر از حد مجاز فراتر رفته است را شناسایی کنید. برای مثال، در پیام خطای زیر، نام سیاست JSON-Threat-Protection-1 و شماره خط در payload 5 است.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. مقدار مشخص شده برای عنصر <ContainerDepth> (که در مرحله 1 مشخص شد) را یادداشت کنید.

    در مثال زیر از سیاست JSONThreatProtection، <ContainerDepth> برابر با 5 تنظیم شده است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. شماره خط خاص (که در مرحله ۱ مشخص شده است) از payload ورودی را بررسی کنید و بررسی کنید که آیا عمق کانتینر در payload از مقدار مشخص شده در عنصر <ContainerDepth> (که در مرحله ۲ مشخص شده است) بیشتر است یا خیر. اگر عمق کانتینر از تعداد بیشتر باشد، علت خطا همین است.

    در اینجا یک نمونه از payload ورودی آورده شده است:

    {
     "ContainerDepth2":[ {
           "ContainerDepth4":[
              {
                 "ContainerDepth6":[
                    "1",
                    "2"
                 ]
              }
           ]
        }
     ]
    }
    

    محتوای JSON نشان داده شده در بالا، در خط ۵ دارای عمق کانتینر ۶ است. از آنجایی که عمق بیشتر از ۵ است، مقدار مشخص شده برای عنصر <ContainerDepth> از سیاست JSONThreatProtection، خطای زیر را دریافت می‌کند:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    

وضوح تصویر

اگر سیاست JSONThreatProtection برای محافظت در برابر بارهای داده‌ای با عمق کانتینر بیش از مقدار مشخص شده در نظر گرفته شده باشد، انتظار می‌رود پیام خطا نمایش داده شود. در این حالت، هیچ اقدام اضافی لازم نیست.

با این حال، اگر تشخیص دادید که عمق کانتینر بالاتر قابل قبول است، <ContainerDepth> را بر اساس نیاز خود به مقدار مناسبی تغییر دهید.

برای مثال، اگر فکر می‌کنید می‌توانید عمق کانتینرها را تا 10 مجاز کنید، سیاست را به صورت زیر تغییر دهید:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>10</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

طول مقدار رشته از حد مجاز تجاوز کرده است

متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded string value length at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

مثال متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded string value length at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که بار داده پیام ورودی مشخص شده توسط عنصر <Source> شامل عناصر JSON باشد که دارای مقادیری با کاراکترهای بیشتر از حد مجاز توسط عنصر <StringValueLength> باشند.

برای مثال، اگر عنصر <StringValueLength> در این سیاست روی 50 تنظیم شده باشد، اما محتوای ورودی دارای یک یا چند عنصر باشد که مقادیر آنها شامل بیش از ۵۰ کاراکتر باشد، این خطا رخ می‌دهد.

تشخیص

  1. پیام خطا را بررسی کنید تا نام سیاست و شماره خطی که طول رشته در آن از حد مجاز تجاوز کرده است را شناسایی کنید. در مثال زیر نام سیاست JSON-Threat-Protection-1 and خط در payload 3 است.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. مقدار مشخص شده برای عنصر <StringValueLength> را در (شناسایی شده در مرحله 1) یادداشت کنید.

    در مثال زیر از سیاست JSONThreatProtection، <StringValueLength> روی 50 تنظیم شده است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. شماره خط خاص (که در مرحله ۱ مشخص شده است) از payload ورودی را بررسی کنید و بررسی کنید که آیا طول مقدار از تعداد کاراکترهای مشخص شده برای عنصر <StringValueLength> (که در مرحله ۲ مشخص شده است) بیشتر است یا خیر. اگر طول مقدار از حد مجاز بیشتر باشد، علت خطا همین است.

    در اینجا یک نمونه از payload ورودی آورده شده است:

    {
      "Country": "New Zealand",
      "Place Name": "Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu"
    }
    

    JSON Payload نشان داده شده در بالا دارای شیء‌ای به نام Place Name است که مقدار آن Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu در خط ۳ دارای ۸۵ کاراکتر است. از آنجایی که طول مقدار بیشتر از ۵۰ است، مقداری که در عنصر <StringValueLength> مشخص شده است، با خطای زیر مواجه می‌شوید:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length
    at line 3
    

وضوح تصویر

اگر سیاست JSONThreatProtection برای محافظت در برابر بارهای داده‌ای با مقادیری که از طول رشته خاصی تجاوز می‌کنند، در نظر گرفته شده باشد، در این صورت پیام خطا قابل انتظار است. در این مورد، هیچ اقدام اضافی لازم نیست.

با این حال، اگر تشخیص دهید که می‌توان طول مقدار طولانی‌تری را در payload مشخص کرد، <StringValueLength> را بر اساس نیازهای خود به مقدار مناسبی تغییر دهید.

برای مثال، اگر فکر می‌کنید می‌توانید مقداری تا طول ۹۰ را مجاز کنید، سیاست را به صورت زیر تغییر دهید:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>90</StringValueLength>
</JSONThreatProtection>

شیء JSON معتبر نیست

متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: string: at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

مثال متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: Expecting : at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که بار داده پیام ورودی مشخص شده توسط عنصر <Source> در سیاست JSONThreatProtection یک شیء JSON معتبر نباشد.

تشخیص

  1. پیام خطا را بررسی کنید تا نام سیاست و شماره خطی که خطا در آن رخ داده است را شناسایی کنید. در مثال زیر نام سیاست JSON-Threat-Protection-1 and خط در payload 2 است.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. شماره خط خاص (که در مرحله 1 مشخص شده است) از payload ورودی را بررسی کنید و بررسی کنید که آیا شیء JSON که در payload ارسال شده است، واقعاً یک شیء JSON معتبر است یا خیر.

    در اینجا یک نمونه از payload ورودی آورده شده است:

    {
      "Longitude": 6.11499,
      "Latitude"  50.76891
    }
    

    در فایل JSON نشان داده شده در بالا، خط ۳ فاقد ":" (دونقطه) است. از آنجایی که این یک شیء JSON معتبر نیست، با خطای زیر مواجه می‌شوید:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    Expecting : at line 3
    

وضوح تصویر

اطمینان حاصل کنید که یک ورودی معتبر JSON payload به هر API Proxy که شامل سیاست JSONThreatProtection است، ارسال می‌شود.

برای مثالی که در بالا توضیح داده شد، JSON payload را به صورت زیر تغییر دهید:

{
    "Longitude": 6.11499,
  "Latitude" : 50.76891
}

منبع در دسترس نیست

کد خطا

steps.jsonthreatprotection.SourceUnavailable

متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]::
          Source[var_name] is not available"
        "detail": {
            "errorcode": "steps.jsonthreatprotection.SourceUnavailable"
        }
    }
}

مثال متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]::
          Source requests is not available",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.SourceUnavailable"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که متغیر message مشخص شده در عنصر <Source> از سیاست JSONThreatProtection یکی از موارد زیر باشد:

  • خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می‌شود، در دسترس نیست)
  • یکی از مقادیر معتبر request ، response یا message نیست.

برای مثال، این خطا زمانی رخ می‌دهد که عنصر <Source> در سیاست روی متغیری تنظیم شده باشد که در جریان اجرای سیاست وجود نداشته باشد.

تشخیص

  1. نام سیاست و نام متغیر منبع را از پیام خطا مشخص کنید. برای مثال، در پیام خطای زیر، نام سیاست JSON-Threat-Protection-1 و متغیر منبع requests است:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. مقدار مشخص شده برای عنصر <Source> که در مرحله 1 شناسایی شد را بررسی کنید.

    در مثال زیر از سیاست JSONThreatProtection، عنصر <Source> روی requests تنظیم شده است.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>requests</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    

    مقادیر معتبر برای عنصر <Source> عبارتند از request ، response یا message . از آنجا که requests یک مقدار معتبر نیست و در جریانی که سیاست در حال اجرا است وجود ندارد، با خطای زیر مواجه می‌شوید:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    

وضوح تصویر

مطمئن شوید که متغیر تنظیم‌شده در عنصر <Source> از سیاست JSONThreatProtection ناموفق، روی request ، response یا message تنظیم شده باشد و در جریانی که سیاست در آن اجرا می‌شود، وجود داشته باشد.

برای اصلاح مثال JSONThreatProtection policy که در بالا نشان داده شده است، می‌توانید عنصر <Source> را طوری تغییر دهید که از متغیر request استفاده کند، زیرا در جریان درخواست وجود دارد:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

متغیر غیرپیام

کد خطا

steps.jsonthreatprotection.NonMessageVariable

متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Variable var_name does not resolve to a Message"
        "detail": {
            "errorcode": "steps.jsonthreatprotection.NonMessageVariable"
        }
    }
}

مثال متن پاسخ خطا

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Variable message.content does not resolve to a Message",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.NonMessageVariable"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که عنصر <Source> در سیاست JSONThreatProtection روی متغیری غیر از نوع message تنظیم شده باشد.

متغیرهای نوع پیام، کل درخواست‌ها و پاسخ‌های HTTP را نشان می‌دهند. متغیرهای جریان داخلی Apigee Edge، request، response و message از نوع message هستند. برای کسب اطلاعات بیشتر در مورد متغیرهای پیام، به مرجع متغیرها مراجعه کنید.

تشخیص

  1. نام سیاست JSONThreatProtection و نام متغیر Source را از پیام خطا شناسایی کنید. برای مثال، در پیام خطای زیر، نام سیاست JSON-Threat-Protection-1 و متغیر Source، message.content است:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. عنصر <Source> از سیاست JSONThreatProtection (که در مرحله 1 مشخص شده است) را بررسی کنید.

    در مثال زیر از سیاست JSONThreatProtection، <Source> به جای message روی message.content تنظیم شده است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>message.content</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    

    از آنجایی که message.content از نوع message نیست، با خطای زیر مواجه می‌شوید:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does
    not resolve to a Message
    

وضوح تصویر

مطمئن شوید که عنصر <Source> در سیاست JSONThreatProtection ناموفق، روی یک متغیر جریان از نوع پیام تنظیم شده باشد که در جریانی که سیاست در آن اجرا می‌شود، وجود داشته باشد.

برای اصلاح این سیاست، می‌توانید عنصر <Source> را تغییر دهید تا متغیری از نوع message را مشخص کند. برای مثال، در خطای JSONThreatProtection می‌توانید عنصر <Source> را به عنوان message مشخص کنید:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>message</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>