JSON की खतरे से जुड़ी सुरक्षा के रनटाइम की गड़बड़ी की समस्या हल करना

Apigee Edge का दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

ExecutionFailed

गड़बड़ी कोड

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 नीति, 'कार्रवाई पूरी नहीं हो सकी' वाली कई तरह की गड़बड़ियां दिखा सकती है. यहां दी गई टेबल में, अलग-अलग तरह की गड़बड़ियों और उनकी संभावित वजहों के बारे में बताया गया है:

गड़बड़ी का टाइप वजह
ऑब्जेक्ट की एंट्री के नाम की सीमा पार हो गई है किसी ऑब्जेक्ट की एंट्री के नाम में स्ट्रिंग की तय सीमा से ज़्यादा वर्ण इस्तेमाल किए गए हैं.
ऑब्जेक्ट की एंट्री की संख्या तय सीमा से ज़्यादा हो गई है किसी ऑब्जेक्ट में प्रविष्टियों की तय सीमा से ज़्यादा प्रविष्टियां हो गई हैं.
कलेक्शन में एलिमेंट की संख्या तय सीमा से ज़्यादा है ऐरे में ज़्यादा से ज़्यादा जितने एलिमेंट हो सकते हैं उनकी संख्या पार हो गई है.
कंटेनर की गहराई से ज़्यादा वैल्यू पाना नेस्ट करने के लेवल की तय सीमा पार हो गई है.
स्ट्रिंग की वैल्यू, तय सीमा से ज़्यादा है स्ट्रिंग वैल्यू की तय सीमा से ज़्यादा वर्णों का इस्तेमाल किया गया है.
अमान्य JSON ऑब्जेक्ट इनपुट JSON पेलोड अमान्य है.

ऑब्जेक्ट की एंट्री के नाम की सीमा से ज़्यादा है

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "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> एलिमेंट को 5 के तौर पर बताया गया है, लेकिन इनपुट मैसेज पेलोड में ऐसी JSON प्रॉपर्टी है जिसका नाम पांच से ज़्यादा वर्ण का है, तो यह गड़बड़ी दिखती है.

संक्रमण की जांच

  1. गड़बड़ी के मैसेज की जांच करके, JSONThreatProtection नीति का नाम और उस लाइन नंबर की पहचान करें जहां लंबी एंट्री का नाम मौजूद है. उदाहरण के लिए, गड़बड़ी के इस मैसेज में, JSONThreatProtection नीति का नाम JSON-Threat-Protection-1 है और पेलोड में लाइन नंबर 2 है.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. पहले चरण में पहचानी गई नीति की जांच करें और <ObjectEntryNameLength> एलिमेंट में बताई गई वैल्यू को नोट करें.

    उदाहरण के लिए, यहां दी गई JSON ट्रिगर सुरक्षा नीति में, <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. इनपुट पेलोड की खास लाइन नंबर (जिसकी पहचान पहले चरण में बताई गई है) की जांच करें और देखें कि क्या ऑब्जेक्ट के नाम की लंबाई, <ObjectEntryNameLength> एलिमेंट में दी गई वैल्यू (दूसरे चरण में बताई गई) से ज़्यादा है. अगर ऑब्जेक्ट के नाम की लंबाई उस संख्या से ज़्यादा है, तो गड़बड़ी की वजह यही है.

    इनपुट पेलोड का उदाहरण यहां दिया गया है:

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

    ऊपर दिखाए गए JSON पेलोड में, लाइन 2 पर number नाम की एक प्रॉपर्टी है, जिसमें छह वर्ण (नाम की लंबाई छह है) हैं. ऑब्जेक्ट के नाम की लंबाई, <ObjectEntryNameLength> एलिमेंट के लिए तय की गई वैल्यू (पांच) से ज़्यादा है. इसलिए, आपको यह गड़बड़ी दिखती है:

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

रिज़ॉल्यूशन

अगर JSONThreatProtection नीति का मकसद, तय की गई वैल्यू से ज़्यादा ऑब्जेक्ट एंट्री वाले नामों वाले पेलोड से सुरक्षा करना था, तो गड़बड़ी का मैसेज दिखना चाहिए. इस मामले में, आपको कुछ और करने की ज़रूरत नहीं है.

हालांकि, अगर आपको लगता है कि बिना किसी असर के, पेलोड में ऑब्जेक्ट एंट्री के लंबे नाम दिए जा सकते हैं, तो अपनी ज़रूरतों के हिसाब से <ObjectEntryNameLength> को सही वैल्यू में बदलें.

उदाहरण के लिए, अगर आपको लगता है कि ऑब्जेक्ट के नाम 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>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>एलिमेंट 5 है, लेकिन इनपुट JSON पेलोड में पांच से ज़्यादा एंट्री हैं, तो यह गड़बड़ी दिखती है.

संक्रमण की जांच

  1. गड़बड़ी के मैसेज की जांच करें और JSONचेतावनीProtection नीति के नाम और उस लाइन नंबर की पहचान करें जहां एंट्री की संख्या तय की गई सीमा से ज़्यादा है. उदाहरण के लिए, नीचे दिए गए गड़बड़ी के मैसेज में, नीति का नाम JSON-Threat-Protection-1 है और पेलोड की लाइन नंबर 7 है:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. नीति के <ObjectEntryCount> एलिमेंट में बताई गई वैल्यू को नोट कर लें. इस एलिमेंट की पहचान पहले चरण में की गई थी.

    नीति के इस उदाहरण में, <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. इनपुट पेलोड की खास लाइन नंबर (पहले चरण में पहचानी गई) की जांच करें और देखें कि पेलोड में इकाइयों की संख्या, <ObjectEntryCount> एलिमेंट के लिए तय की गई वैल्यू (दूसरे चरण में पहचानी गई) से ज़्यादा है या नहीं. अगर ऑब्जेक्ट की संख्या, ऑब्जेक्ट एंट्री की संख्या से ज़्यादा है, तो गड़बड़ी की यह वजह है.

    इनपुट पेलोड का एक उदाहरण यहां दिया गया है:

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

    ऊपर दिखाए गए JSON पेलोड में, छठी एंट्री लाइन #7 (company) पर आती है. इनपुट JSON पेलोड में ऑब्जेक्ट एंट्री की संख्या, <ObjectEntryCount> एलिमेंट के लिए तय की गई वैल्यू 5 से ज़्यादा होने पर, आपको यह गड़बड़ी दिखती है:

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

रिज़ॉल्यूशन

अगर JSONThreatProtection नीति का मकसद, किसी खास थ्रेशोल्ड से ज़्यादा ऑब्जेक्ट एंट्री वाले पेलोड से सुरक्षा करना था, तो गड़बड़ी का मैसेज दिखना चाहिए. इस मामले में, आपको कोई और कार्रवाई करने की ज़रूरत नहीं है.

हालांकि, अगर आपको लगता है कि बिना किसी नतीजे के पेलोड में ज़्यादा ऑब्जेक्ट एंट्री शामिल की जा सकती हैं, तो अपनी ज़रूरतों के हिसाब से <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 है और पेलोड में लाइन नंबर 3 है:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. नीति के <ArrayElementCount> एलिमेंट (पहले चरण में पहचाने गए) के लिए बताई गई वैल्यू को नोट करें.

    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. इनपुट पेलोड की खास लाइन नंबर (जिसकी पहचान पहले चरण में बताई गई है) की जांच करें और देखें कि क्या उसमें दी गई अरे की संख्या, <ArrayElementCount> एलिमेंट (दूसरे चरण में बताई गई) में बताई गई संख्या से ज़्यादा है. अगर ऐरे एलिमेंट की संख्या, तय संख्या से ज़्यादा है, तो गड़बड़ी की यह वजह है.

    इनपुट पेलोड का उदाहरण यहां दिया गया है:

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

    ऊपर दिखाए गए JSON पेलोड में, तीसरी लाइन पर models नाम के कलेक्शन में पांच एलिमेंट हैं. ऐरे एलिमेंट की संख्या <ArrayElementCount> एलिमेंट के लिए तय की गई वैल्यू (तीन) से ज़्यादा होने की वजह से, आपको यह गड़बड़ी दिखती है:

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

रिज़ॉल्यूशन

अगर JSONHTMLProtection पॉलिसी को किसी खास अरे काउंट थ्रेशोल्ड के साथ पेलोड से सुरक्षित रखने के लिए बनाया गया था, तो गड़बड़ी का मैसेज दिख सकता है. इस मामले में, आपको कुछ और करने की ज़रूरत नहीं है.

हालांकि, अगर आपको लगता है कि किसी अरे में ज़्यादा एलिमेंट की अनुमति दी जा सकती है, तो अपनी ज़रूरतों के हिसाब से <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>

कंटेनर की गहराई की सीमा पार हो गई है

गड़बड़ी का जवाब

रनटाइम ट्रैफ़िक, गड़बड़ी के इस कोड के साथ 500 रिस्पॉन्स कोड दिखाता है:

{
    "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 एलिमेंट के लिए नेस्ट की गई ज़्यादा से ज़्यादा गहराई होती है. उदाहरण के लिए, किसी ऑब्जेक्ट में मौजूद ऑब्जेक्ट वाले कलेक्शन की कंटेनमेंट डेप्थ 3 होगी.

उदाहरण के लिए, अगर <ContainerDepth> एलिमेंट 3 है, लेकिन इनपुट पेलोड की कंटेनर डेप्थ इस सीमा से ज़्यादा है, तो यह गड़बड़ी दिखती है.

संक्रमण की जांच

  1. गड़बड़ी के मैसेज की जांच करके, JSONThreatProtection नीति का नाम और उस लाइन नंबर की पहचान करें जहां कंटेनर की गहराई ज़्यादा है. उदाहरण के लिए, गड़बड़ी के इस मैसेज में, नीति का नाम JSON-Threat-Protection-1 है और पेलोड में लाइन नंबर 5 है.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. <ContainerDepth> एलिमेंट (पहले चरण में पहचाना गया) के लिए बताई गई वैल्यू को नोट करें.

    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. इनपुट पेलोड की खास लाइन नंबर (पहले चरण में पहचानी गई) की जांच करें और देखें कि पेलोड में कंटेनर की गहराई, <ContainerDepth> एलिमेंट (दूसरे चरण में पहचानी गई) में बताई गई वैल्यू से ज़्यादा है या नहीं. अगर कंटेनर की गहराई, संख्या से ज़्यादा है, तो यह गड़बड़ी की वजह है.

    इनपुट पेलोड का उदाहरण यहां दिया गया है:

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

    ऊपर दिखाए गए JSON पेलोड में, लाइन 5 पर कंटेनर की गहराई 6 है. गहराई 5 से ज़्यादा होने पर, JSONThreatProtection नीति के <ContainerDepth> एलिमेंट के लिए दी गई वैल्यू से आपको यह गड़बड़ी दिखती है:

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

रिज़ॉल्यूशन

अगर JSONMessageProtection नीति को तय वैल्यू से ज़्यादा कंटेनर वाले पेलोड से सुरक्षित रखने के लिए बनाया गया था, तो गड़बड़ी का मैसेज दिख सकता है. इस मामले में, आपको कुछ और करने की ज़रूरत नहीं है.

हालांकि, अगर आपको लगता है कि कंटेनर की ज़्यादा गहराई स्वीकार की जा सकती है, तो <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 पर सेट किया गया है, लेकिन इनपुट पेलोड में एक या उससे ज़्यादा ऐसे एलिमेंट हैं जिनकी वैल्यू में 50 से ज़्यादा वर्ण हैं, तो यह गड़बड़ी दिखती है.

संक्रमण की जांच

  1. गड़बड़ी के मैसेज की जांच करके, नीति के नाम और उस लाइन नंबर की पहचान करें जहां स्ट्रिंग की लंबाई तय सीमा से ज़्यादा है. नीचे दिए गए उदाहरण में, नीति का नाम JSON-Threat-Protection-1 andलाइन इन द पेलोड 3 है.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. पहले चरण में पहचाने गए <StringValueLength> एलिमेंट के लिए बताई गई वैल्यू को नोट करें.

    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. इनपुट पेलोड की खास लाइन नंबर (पहले चरण में पहचानी गई) की जांच करें और देखें कि वैल्यू की लंबाई, <StringValueLength> एलिमेंट के लिए तय किए गए वर्णों की संख्या (दूसरे चरण में पहचानी गई) से ज़्यादा है या नहीं. अगर वैल्यू की लंबाई सीमा से ज़्यादा है, तो यह गड़बड़ी की वजह है.

    इनपुट पेलोड का उदाहरण यहां दिया गया है:

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

    ऊपर दिखाए गए JSON पेलोड में, Place Name नाम का एक ऑब्जेक्ट है. इसकी वैल्यू Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu के तीसरे लाइन में 85 वर्ण हैं. <StringValueLength> एलिमेंट में दी गई वैल्यू की लंबाई, 50 से ज़्यादा है. इसलिए, आपको यह गड़बड़ी दिखती है:

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

रिज़ॉल्यूशन

अगर JSONHTMLProtection नीति को तय की गई स्ट्रिंग की लंबाई से ज़्यादा वैल्यू वाले पेलोड से बचाने के लिए बनाया गया था, तो गड़बड़ी का मैसेज दिख सकता है. इस मामले में, आपको कुछ और करने की ज़रूरत नहीं है.

हालांकि, अगर आपको लगता है कि पेलोड में ज़्यादा लंबी वैल्यू की जानकारी दी जा सकती है, तो अपनी ज़रूरतों के हिसाब से <StringValueLength> को सही वैल्यू में बदलें.

उदाहरण के लिए, अगर आपको लगता है कि 90 तक की वैल्यू की अनुमति दी जा सकती है, तो नीति में इस तरह बदलाव करें:

<?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"
        }
    }
}

वजह

गड़बड़ी का यह मैसेज तब दिखता है, जब JSONIssueProtection नीति के <Source> एलिमेंट से तय किया गया इनपुट मैसेज पेलोड, मान्य JSON ऑब्जेक्ट नहीं है.

संक्रमण की जांच

  1. गड़बड़ी के मैसेज की जांच करके, नीति के नाम और उस लाइन नंबर की पहचान करें जहां गड़बड़ी हुई है. यहां दिए गए उदाहरण में नीति का नाम JSON-Threat-Protection-1 andपेलोड 2 की लाइन है.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. इनपुट पेलोड की उस लाइन नंबर की जांच करें जिसकी पहचान पहले चरण में की गई थी. साथ ही, देखें कि पेलोड में पास किया गया JSON ऑब्जेक्ट, वाकई में मान्य JSON ऑब्जेक्ट है या नहीं.

    इनपुट पेलोड का उदाहरण यहां दिया गया है:

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

    ऊपर दिखाए गए JSON पेलोड में, पंक्ति 3 में ":" (कोलन) नहीं है. यह मान्य JSON ऑब्जेक्ट नहीं है, इसलिए आपको गड़बड़ी का यह मैसेज मिला है:

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

रिज़ॉल्यूशन

पक्का करें कि JSONThreatProtection नीति शामिल करने वाले किसी भी एपीआई प्रॉक्सी को मान्य इनपुट JSON पेलोड पास किया गया हो.

ऊपर दिए गए उदाहरण के लिए, JSON पेलोड में इस तरह बदलाव करें:

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

SourceUnavailable

गड़बड़ी कोड

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"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब JSONThreatProtection नीति के <Source> एलिमेंट में बताए गए message वैरिएबल में से कोई एक स्थिति हो:

  • दायरे से बाहर (उस खास फ़्लो में उपलब्ध नहीं है जहां नीति लागू की जा रही है)
  • यह request, response या message जैसी मान्य वैल्यू नहीं है

उदाहरण के लिए, यह गड़बड़ी तब होती है, जब नीति में <Source> एलिमेंट को ऐसे वैरिएबल पर सेट किया गया हो जो उस फ़्लो में मौजूद न हो जहां नीति लागू की जाती है.

संक्रमण की जांच

  1. गड़बड़ी के मैसेज से, नीति के नाम और सोर्स वैरिएबल के नाम की पहचान करें. उदाहरण के लिए, गड़बड़ी के इस मैसेज में, नीति का नाम JSON-Threat-Protection-1 और सोर्स वैरिएबल requests है:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. पहले चरण में पहचाने गए <Source> एलिमेंट के लिए दी गई वैल्यू की जांच करें.

    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
    

रिज़ॉल्यूशन

पक्का करें कि JSONThreatProtection नीति के <Source> एलिमेंट में सेट किया गया वैरिएबल, request, response या message पर सेट हो. साथ ही, यह भी पक्का करें कि वह उस फ़्लो में मौजूद हो जहां नीति लागू होती है.

ऊपर दी गई JSONThreatProtection नीति के उदाहरण को ठीक करने के लिए, request वैरिएबल का इस्तेमाल करने के लिए <Source> एलिमेंट में बदलाव किया जा सकता है, क्योंकि यह अनुरोध फ़्लो में मौजूद है:

<?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>

NonMessageVariable

गड़बड़ी कोड

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"
        }
    }
}

वजह

यह गड़बड़ी तब होती है, जब JSONThreatProtection नीति में <Source> एलिमेंट को किसी ऐसे वैरिएबल पर सेट किया गया हो जो message टाइप का न हो.

मैसेज टाइप वैरिएबल, सभी एचटीटीपी अनुरोधों और जवाबों को दिखाते हैं. पहले से मौजूद Apigee Edge फ़्लो वैरिएबल का अनुरोध, जवाब, और मैसेज, मैसेज टाइप का होता है. मैसेज वैरिएबल के बारे में ज़्यादा जानने के लिए, वैरिएबल का रेफ़रंस देखें.

संक्रमण की जांच

  1. गड़बड़ी के मैसेज से, JSON ट्रिगर सुरक्षा की नीति के नाम और सोर्स वैरिएबल के नाम की पहचान करें. उदाहरण के लिए, गड़बड़ी के इस मैसेज में, नीति का नाम JSON-Threat-Protection-1और सोर्स वैरिएबल message.content है:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. JSONThreatProtection नीति के <Source> एलिमेंट की जांच करें (पहले चरण में इसकी पहचान की गई है).

    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 का मैसेज टाइप नहीं किया जा सकता, इसलिए आपको यह गड़बड़ी मिलती है:

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

रिज़ॉल्यूशन

पक्का करें कि JSONThreatProtection नीति में मौजूद <Source> एलिमेंट, मैसेज टाइप के उस फ़्लो वैरिएबल पर सेट हो जो उस फ़्लो में मौजूद है जहां नीति लागू होती है.

इस नीति को ठीक करने के लिए, <Source> एलिमेंट में बदलाव किया जा सकता है, ताकि मैसेज टाइप वाला वैरिएबल तय किया जा सके. उदाहरण के लिए, नहीं हो पाने वाले JSON फ़िल्टर प्रोटेक्शन में, <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>