นโยบาย RegularExpressionProtection

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

อะไร

ดึงข้อมูลจากข้อความ (เช่น เส้นทาง URI, พารามิเตอร์การค้นหา, ส่วนหัว, พารามิเตอร์แบบฟอร์ม, ตัวแปร, เพย์โหลด XML หรือเพย์โหลด JSON) และประเมินเนื้อหานั้นเทียบกับนิพจน์ทั่วไปที่กำหนดไว้ล่วงหน้า หากนิพจน์ทั่วไปที่ระบุมีค่าเป็นจริง ข้อความนั้นถือเป็นภัยคุกคามและจะถูกปฏิเสธ

วิดีโอ

ดูวิดีโอต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบายการป้องกันนิพจน์ทั่วไป

วิดีโอ คำอธิบาย
การป้องกันการโจมตีด้วยการแทรก SQL (Edge ใหม่) ป้องกันการโจมตีด้วยการแทรก SQL โดยใช้นโยบายการป้องกันนิพจน์ทั่วไปใน UI ของประสบการณ์ Edge ใหม่
การป้องกันการโจมตีด้วยการแทรก SQL (คลาสสิก Edge) ป้องกันการโจมตีด้วยการแทรก SQL โดยใช้นโยบายการป้องกันนิพจน์ทั่วไปใน UI ของ Edge แบบคลาสสิก

ลองฟัง

GitHub

ตัวอย่างการป้องกันนิพจน์ทั่วไปใน GitHub จะแสดงวิธีดักจับการโจมตีโดยการแทรก SQL ที่อาจเกิดขึ้นผ่านพารามิเตอร์การค้นหา นอกจากนี้ ตัวอย่างยังแสดงให้เห็นถึงแนวทางปฏิบัติที่ดีในการตั้งสถานะข้อผิดพลาด 400 โดยทั่วไปเพื่อป้องกันไม่ให้แฮ็กเกอร์ได้รับข้อมูลที่เป็นประโยชน์จากการตอบสนอง

JavaScript มีการป้องกันการโจมตี

<RegularExpressionProtection name="JsonPathRegExProtection">
    <DisplayName>Regular Expression Protection 1</DisplayName>
    <Source>request</Source>
    <JSONPayload escapeSlashCharacter="true">
       <JSONPath>
          <Expression>$.</Expression>
          <Pattern>&lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*\/\s*script\s*&gt;
          </Pattern>
          <Pattern>n\s*\\\\\s*slash</Pattern>
          <Pattern>n\s*\/\s*slash</Pattern>
          <Pattern>n\s*\\"\s*quotes</Pattern>
          <Pattern>n\s*\\b\s*space</Pattern>
          <Pattern>n\s*\\f\s*forwardfeed</Pattern>
          <Pattern>n\s*\\n\s*newline</Pattern>
          <Pattern>n\s*\\r\s*carria</Pattern>
          <Pattern>n\s*\\t\s*tab</Pattern>
          <Pattern>n\s*\\uFFFF\s*hex</Pattern>
       </JSONPath>
    </JSONPayload>
 </RegularExpressionProtection>

ตัวอย่างด้านบนแสดงให้เห็นวิธีใช้นโยบาย regularExpressionProtection เพื่อประเมินเพย์โหลด JSON สำหรับ JavaScript ที่มีการโจมตี กล่าวอย่างเจาะจงคือ ระบบจะประเมินเนื้อหาที่ดึงข้อมูลโดย <JSONPath>/<Expression> เทียบกับนิพจน์ทั่วไปใน <JSONPath>/<Pattern>

หากนิพจน์ทั่วไปใน <JSONPath>/<Pattern> มีอักขระที่สงวนไว้ใน XML (", &, ', < หรือ .) คุณต้องเข้ารหัส XML ก่อนที่จะรวมไว้ในไฟล์การกำหนดค่า XML ของนโยบาย เช่น ในตัวอย่างข้างต้น นิพจน์ทั่วไป <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*> ได้รับการเข้ารหัส XML เป็น &lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*\/\s*script\s*&gt;

นอกจากนี้ หากนิพจน์ทั่วไปมีเครื่องหมายทับ (/) คุณต้องกำหนดเป็นอักขระหลีกโดยตั้งค่าแอตทริบิวต์ <JSONPayload> escapeSlashCharacter เป็น true

การจับคู่ที่ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่

เป็นกรณีการใช้งานทั่วไปในการจับคู่ที่ไม่คำนึงถึงตัวพิมพ์เล็กหรือใหญ่ นี่คือตัวอย่างของวิธีที่คุณสามารถทำได้ในนิพจน์ทั่วไปโดยใช้โครงสร้าง (?i) ตัวอย่างเช่น DELETE, delete และ Delete จะประเมินค่าเป็นจริง

<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>

เกี่ยวกับนโยบายการป้องกันนิพจน์ทั่วไป

Apigee Edge ช่วยให้คุณกำหนดค่านิพจน์ทั่วไปที่ประเมินได้เทียบกับการรับส่งข้อมูล API ระหว่างรันไทม์เพื่อระบุภัยคุกคามระดับเนื้อหาทั่วไปที่เกิดขึ้นตามรูปแบบบางอย่าง

นิพจน์ทั่วไปหรือเรียกสั้นๆ ว่า regex คือชุดของสตริงที่ระบุรูปแบบในสตริง นิพจน์ทั่วไปช่วยให้เนื้อหาได้รับการประเมินแบบเป็นโปรแกรมสำหรับรูปแบบ คุณใช้นิพจน์ทั่วไปได้ เช่น ในการประเมินอีเมลเพื่อให้แน่ใจว่ามีโครงสร้างที่ถูกต้อง ดูข้อมูลเพิ่มเติมที่นิพจน์ทั่วไปในบทแนะนำ Java

การใช้งาน RegularExpressionProtection ที่ใช้มากที่สุดคือการประเมินเพย์โหลด JSON และ XML สำหรับเนื้อหาที่เป็นอันตราย

นิพจน์ทั่วไปกำจัดการโจมตีตามเนื้อหาทั้งหมดไม่ได้ และควรรวมกลไกหลายรายการเข้าด้วยกันเพื่อเปิดใช้การป้องกันในเชิงลึก ส่วนนี้จะอธิบายรูปแบบที่แนะนำบางประการสำหรับการยกเว้นเนื้อหา

ตัวอย่างรูปแบบการยกเว้น

นิพจน์ทั่วไปต้องเข้ารหัส XML ในไฟล์การกำหนดค่า XML ของนโยบาย

ชื่อ นิพจน์ทั่วไป
การแทรก SQL
[\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))
การแทรกรวมฝั่งเซิร์ฟเวอร์
<!--#(include|exec|echo|config|printenv)\s+.*

XML ที่เข้ารหัส:

&lt;!--#(include|exec|echo|config|printenv)\s+.*
การแทรกไวยากรณ์แบบย่อ XPath
(/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+
การแทรกไวยากรณ์แบบขยาย XPath
/?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling))
การแทรก JavaScript
<\s*script\b[^>]*>[^<]+<\s*/\s*script\s*>

XML ที่เข้ารหัส:

&lt;\s*script\b[^&gt;]*&gt;[^&lt;]+&lt;\s*/\s*script\s*&gt;
การแทรกข้อยกเว้นของ Java
.*?Exception in thread.*

ตั้งค่าส่วนหัว Content-Type ในคำขอด้วยเพย์โหลด XML หรือ JSON

เพย์โหลดของนโยบายการป้องกันนิพจน์ทั่วไปอาจมีองค์ประกอบต่อไปนี้

  • องค์ประกอบ <XMLPayload>: ระบุว่าต้องดึงข้อมูลจากเพย์โหลด XML และประเมินกับนิพจน์ทั่วไปที่ระบุ

    หากคุณใช้ <XMLPayload> ในนโยบาย ส่วนหัว Content-Type ของคำขอต้องเป็นประเภทเนื้อหา XML เช่น application/xml หรือ text/xml

  • องค์ประกอบ <JSONPayload>: ระบุว่าต้องดึงข้อมูลจากเพย์โหลด JSON และประเมินเทียบกับนิพจน์ทั่วไปที่ระบุ

    หากใช้ <JSONPayload> ในนโยบาย ส่วนหัว Content-Type ของคำขอต้องเป็นประเภทเนื้อหา JSON เช่น application/json

โดยทั่วไปคุณต้องออกแบบ API ให้ยอมรับ XML หรือ JSON อย่างไรก็ตาม อาจมีสถานการณ์ที่ API ยอมรับทั้ง 2 อย่าง จากนั้นคุณสามารถกำหนดนโยบายการป้องกันนิพจน์ทั่วไปที่ใช้ทั้งองค์ประกอบ <XMLPayload> และ <JSONPayload> ระบบจะเลือกใช้องค์ประกอบเพียงรายการเดียวสำหรับคำขอหนึ่งๆ โดยอิงตามค่าของส่วนหัว Content-Type

การอ้างอิงองค์ประกอบ

การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย regularExpressionProtection

<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
   <DisplayName>Regular Expression Protection 1</DisplayName>
   <Source>response</Source>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <URIPath>
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </URIPath>
   <QueryParam name="a-query-param">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </QueryParam>
   <Header name="a-header">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </Header>
   <FormParam name="a-form-param">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </FormParam>
   <Variable name="request.content">
     <Pattern>REGEX PATTERN</Pattern>
     <Pattern>REGEX PATTERN</Pattern>
   </Variable>
   <XMLPayload>
     <Namespaces>
       <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     </Namespaces>
     <XPath>
       <Expression>/apigee:Greeting/apigee:User</Expression>
       <Type>string</Type>
       <Pattern>REGEX PATTERN</Pattern>
       <Pattern>REGEX PATTERN</Pattern>
     </XPath>
   </XMLPayload>
   <JSONPayload>
     <JSONPath>
       <Expression>$.store.book[*].author</Expression>
       <Pattern>REGEX PATTERN</Pattern>
       <Pattern>REGEX PATTERN</Pattern>
     </JSONPath>
    </JSONPayload>
</RegularExpressionProtection>

แอตทริบิวต์ <regularExpressionProtection>

<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">

ตารางต่อไปนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
name

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name มีตัวอักษร ตัวเลข ช่องว่าง ขีดกลาง ขีดล่าง และจุด ค่านี้ต้องมีอักขระไม่เกิน 255 ตัว

(ไม่บังคับ) ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป

ไม่มีข้อมูล จำเป็น
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งถือเป็นเรื่องปกติสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้การดำเนินการโฟลว์ดำเนินต่อไปได้แม้ว่านโยบายจะล้มเหลวก็ตาม

false ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย ระบบจะไม่บังคับใช้นโยบายแม้ว่าจะยังแนบอยู่กับขั้นตอนก็ตาม

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

false เลิกใช้

องค์ประกอบ <DisplayName>

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มีข้อมูล

หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ name ของนโยบาย

การมีบุคคลอยู่ ไม่บังคับ
Type สตริง

องค์ประกอบ <Source>

ระบุข้อความที่ต้องการดึงข้อมูล

หากละเว้นองค์ประกอบ <Source> ค่าเริ่มต้นจะเป็น message เช่น <Source>message</Source> เมื่อตั้งค่าเป็น message นโยบายจะใช้ข้อความคำขอเป็นแหล่งที่มาเมื่อแนบไปกับโฟลว์คำขอ ในทำนองเดียวกัน นโยบายจะใช้ข้อความตอบกลับเมื่อแนบไปกับขั้นตอนการตอบกลับด้วย

หากข้อความต้นฉบับแก้ไขไม่ได้ หรือแก้ไขเป็นประเภทที่ไม่ใช่ข้อความ นโยบายจะแสดงข้อผิดพลาด

<Source>response</Source>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: สตริง

องค์ประกอบ < ignoreUnresolvedVariable>

กำหนดว่านโยบายจะแสดงผลข้อผิดพลาดหรือไม่เมื่อตรวจพบตัวแปรที่แก้ไขไม่ได้

หากตั้งค่าเป็น false (ค่าเริ่มต้น) นโยบายจะแสดงผลข้อผิดพลาดเมื่อพบตัวแปรที่แก้ไขไม่ได้ หากตั้งค่าเป็น true ระบบจะถือว่าตัวแปรที่ยังไม่ได้แก้ไขเป็นสตริงว่างเปล่า (Null)

<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
ค่าเริ่มต้น: false
สถานที่ตั้ง: ไม่บังคับ
ประเภท: บูลีน

อีลิเมนต์ <URIPath>

ระบุว่าต้องดึงข้อมูลจากเส้นทาง URI คำขอและประเมินเทียบกับนิพจน์ทั่วไปที่ให้ไว้ คุณต้องระบุองค์ประกอบ <Pattern> อย่างน้อย 1 รายการที่ระบุรูปแบบนิพจน์ทั่วไปให้ตรงกัน

<URIPath>
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</URIPath>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: ไม่มีข้อมูล

องค์ประกอบ <QueryParam>

ระบุว่าต้องดึงข้อมูลจากพารามิเตอร์การค้นหาของคำขอและประเมินเทียบกับนิพจน์ทั่วไปที่ระบุ คุณต้องระบุองค์ประกอบ <Pattern> อย่างน้อย 1 รายการที่ระบุรูปแบบนิพจน์ทั่วไปให้ตรงกัน

<QueryParam name="a-query-param">
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</QueryParam>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: ไม่มีข้อมูล

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ชื่อ ชื่อของพารามิเตอร์การค้นหาคำขอซึ่งต้องแยกข้อมูลออกมาเพื่อการประเมินกับนิพจน์ทั่วไปที่ระบุ ไม่มีข้อมูล จำเป็น

องค์ประกอบ <Header>

ระบุว่าต้องดึงข้อมูลจากส่วนหัวของคำขอและคำตอบและประเมินเทียบกับนิพจน์ทั่วไปที่ระบุ คุณต้องระบุองค์ประกอบ <Pattern> อย่างน้อย 1 รายการที่ระบุรูปแบบนิพจน์ทั่วไปให้ตรงกัน

<Header name="a-header">
  <Pattern>REGEX PATTERN</Pattern>
  <Pattern>REGEX PATTERN</Pattern>
</Header>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: ไม่มีข้อมูล

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ชื่อ

ชื่อของส่วนหัวคำขอและการตอบกลับที่ต้องดึงข้อมูลมาประเมินกับนิพจน์ทั่วไปที่ระบุ

ไม่มีข้อมูล จำเป็น

องค์ประกอบ <FormParam>

ระบุว่าต้องดึงข้อมูลจากพารามิเตอร์ของแบบฟอร์มคําขอและประเมินเทียบกับนิพจน์ทั่วไปที่ระบุ คุณต้องระบุองค์ประกอบ <Pattern> อย่างน้อย 1 รายการที่ระบุรูปแบบนิพจน์ทั่วไปให้ตรงกัน

<FormParam name="a-form-param">
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>     
</FormParam>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: ไม่มีข้อมูล

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ชื่อ

ชื่อของพารามิเตอร์แบบฟอร์มคำขอที่ต้องดึงข้อมูลสำหรับการประเมินกับนิพจน์ทั่วไปที่ระบุ

ไม่มีข้อมูล จำเป็น

องค์ประกอบ <Variable>

ระบุว่าต้องดึงข้อมูลจากตัวแปรที่ระบุและประเมินเทียบกับนิพจน์ทั่วไปที่ให้ไว้

<Variable name="request.content">
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</Variable>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: ไม่มีข้อมูล

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
ชื่อ

ชื่อของตัวแปรที่ต้องดึงข้อมูลสำหรับประเมินกับนิพจน์ทั่วไปที่ระบุ

ไม่มีข้อมูล จำเป็น

องค์ประกอบ <XMLPayload>

ระบุว่าต้องดึงข้อมูลจากเพย์โหลด XML และประเมินกับนิพจน์ทั่วไปที่ระบุ

<XMLPayload>
   <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
   </Namespaces>
   <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
   </XPath>
</XMLPayload>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: ไม่มีข้อมูล

องค์ประกอบ <XMLPayload>/<Namespaces>

ระบุเนมสเปซที่จะใช้ในการประเมิน XPath

<XMLPayload>
   <Namespaces>
      <Namespace prefix="apigee">http://www.apigee.com</Namespace>
   </Namespaces>
   <XPath>
      <Expression>/apigee:Greeting/apigee:User</Expression>
      <Type>string</Type>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
   </XPath>
</XMLPayload>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: สตริง

องค์ประกอบ <XMLPayload>/<Namespaces>/<Namespace>

ระบุเนมสเปซแต่ละรายการที่จะใช้ในการประเมิน XPath
<Namespaces>
   <Namespace prefix="apigee">http://www.apigee.com</Namespace>
</Namespaces>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: สตริง

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
คำนำหน้า

ระบุคำนำหน้าเพื่อช่วยให้มีคุณสมบัติตามเนมสเปซที่ระบุ

ไม่มีข้อมูล จำเป็น

องค์ประกอบ <XMLPayload>/<XPath>

ระบุ XPath ที่จะประเมิน
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: ไม่มีข้อมูล

องค์ประกอบ <XMLPayload>/<XPath>/<Expression>

ระบุนิพจน์ XPath ที่กำหนดไว้สำหรับตัวแปร รองรับเฉพาะนิพจน์ XPath 1.0 เท่านั้น ตัวอย่างเช่น <Expression>/company/employee[@age>=$request.header.age]</Expression> จะดึงข้อมูลรายละเอียดสำหรับพนักงานซึ่งมีอายุมากกว่าหรือเท่ากับค่าที่ระบุใน request.header.age
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: สตริง

องค์ประกอบ <XMLPayload>/<XPath>/<Type>

ระบุประเภทข้อมูล
<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
ค่าเริ่มต้น: สตริง
สถานที่ตั้ง: ไม่บังคับ
ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้

สตริง ค่าที่ถูกต้อง ได้แก่ string, boolean, int, long, float, double และ nodeset

องค์ประกอบ <XMLPayload>/<XPath>/<Pattern>

กำหนดรูปแบบนิพจน์ทั่วไป หากนิพจน์ทั่วไปในองค์ประกอบ <Pattern> มีอักขระที่สงวนไว้ใน XML (", &, ', < หรือ .) คุณต้องเข้ารหัส XML ก่อนที่จะใส่นิพจน์ดังกล่าว

<XPath>
   <Expression>/apigee:Greeting/apigee:User</Expression>
   <Type>string</Type>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</XPath>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: จำเป็น
ประเภท: สตริง

องค์ประกอบ <JSONPayload>

ระบุว่าต้องดึงข้อมูลจากเพย์โหลด JSON และประเมินกับนิพจน์ทั่วไปที่ระบุ

<JSONPayload>
   <JSONPath>
      <Expression>$.store.book[*].author</Expression>
      <Pattern>REGEX PATTERN</Pattern>
      <Pattern>REGEX PATTERN</Pattern>
   </JSONPath>
</JSONPayload>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: ไม่มีข้อมูล

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
escapeSlashCharacter

ตั้งค่าเป็น true เพื่อหลีกอักขระเครื่องหมายทับ (/) ในนิพจน์ทั่วไปใน <JSONPath>/<Pattern>

จริง ไม่บังคับ

องค์ประกอบ <JSONPayload>/<JSONPath>/<Expression>

ระบุนิพจน์ JSONPath ที่กําหนดไว้สําหรับตัวแปร

<JSONPath>
   <Expression>$.store.book[*].author</Expression>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</JSONPath>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: สตริง

องค์ประกอบ <JSONPayload>/<JSONPath>/<Pattern>

กำหนดรูปแบบนิพจน์ทั่วไป หากนิพจน์ทั่วไปในองค์ประกอบ <Pattern> มีอักขระที่สงวนไว้ใน XML (", &, ', < หรือ .) คุณต้องเข้ารหัส XML ก่อนที่จะใส่นิพจน์ดังกล่าว

<JSONPath>
   <Expression>$.store.book[*].author</Expression>
   <Pattern>REGEX PATTERN</Pattern>
   <Pattern>REGEX PATTERN</Pattern>
</JSONPath>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: จำเป็น
ประเภท: สตริง

การอ้างอิงข้อผิดพลาด

ส่วนนี้อธิบายรหัสข้อผิดพลาดและข้อความที่แสดงผลและตัวแปรความผิดพลาดที่ Edge กำหนดเมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบ หากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด หากต้องการบันทึกข้อผิดพลาดและเพิ่มข้อผิดพลาดที่กำหนดเอง ให้ตั้งค่าแอตทริบิวต์ continueOnError="true" ในองค์ประกอบรูทของนโยบาย ดูข้อมูลเพิ่มเติมได้ที่ สิ่งที่คุณจำเป็นต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด

ข้อผิดพลาดที่แสดงผลจากนโยบาย Edge มีรูปแบบที่สอดคล้องกันตามที่อธิบายไว้ในข้อมูลอ้างอิงรหัสข้อผิดพลาด

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน

รหัสข้อผิดพลาด ข้อความ
ExecutionFailed เรียกใช้ regularExpressionProtection StepDefinition {0} ไม่สำเร็จ สาเหตุ: {1}
InstantiationFailed ไม่สามารถสร้างอินสแตนซ์ regularExpressionProtection StepDefinition {0}
NonMessageVariable ตัวแปร {0} ไม่แปลค่าเป็นข้อความ
SourceMessageNotAvailable ไม่มีข้อความ {0} สำหรับ regularExpressionProtection StepDefinition {1}
ThreatDetected ภัยคุกคามของนิพจน์ทั่วไปที่ตรวจพบใน {0}: นิพจน์ทั่วไป: {1} อินพุต: {2}
VariableResolutionFailed แก้ไขตัวแปร {0} ไม่สำเร็จ

ข้อผิดพลาดในการทำให้ใช้งานได้

รหัสข้อผิดพลาด ข้อความ แก้ไข
CannotBeConvertedToNodeset regularExpressionProtection {0}: ผลลัพธ์ของ xpath {1} แปลงเป็นชุดโหนดไม่ได้ บริบท {2}
DuplicatePrefix regularExpressionProtection {0}: คำนำหน้าซ้ำ {1}
EmptyJSONPathExpression regularExpressionProtection {0}: นิพจน์ JSONPath ว่างเปล่า
EmptyXPathExpression regularExpressionProtection {0}: นิพจน์ XPath ว่างเปล่า
InvalidRegularExpression regularExpressionProtection {0}: นิพจน์ทั่วไปไม่ถูกต้อง {1}, บริบท {2}
JSONPathCompilationFailed regularExpressionProtection {0}: คอมไพล์ jsonpath {1} ไม่สำเร็จ บริบท {2}
NONEmptyPrefixMappedToEmptyURI regularExpressionProtection {0}: คำนำหน้าที่ไม่ว่างเปล่า {1} แมปกับ URI ที่ว่างเปล่าไม่ได้
NoPatternsToEnforce regularExpressionProtection {0}: ไม่มีรูปแบบที่จะบังคับใช้ใน {1}
NothingToEnforce RegularExpressionProtection {0}: ต้องมี URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload อย่างน้อย 1 รายการ
XPathCompilationFailed regularExpressionProtection {0}: คอมไพล์ xpath ไม่สำเร็จ {1} บริบท {2}

ตัวแปรของข้อผิดพลาด

ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบาย

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของความผิดพลาดตามที่ระบุไว้ในตารางด้านบน fault.name Matches "ThreatDetected"
regularexpressionprotection.policy_name.failed policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด regularexpressionprotection.Regular-Expressions-Protection-1.failed = true

สคีมา

หัวข้อที่เกี่ยวข้อง

นโยบายป้องกันภัยคุกคามของ JSON

นโยบายป้องกันภัยคุกคามของ XML