首頁 >後端開發 >Golang >如何使用未經驗證的使用者輸入在 PostgreSQL LIKE 表達式中實作文字模式比對?

如何使用未經驗證的使用者輸入在 PostgreSQL LIKE 表達式中實作文字模式比對?

Linda Hamilton
Linda Hamilton原創
2024-11-21 05:00:12525瀏覽

How Can I Achieve Literal Pattern Matching in PostgreSQL LIKE Expressions with Unvalidated User Input?

PostgreSQL 中未驗證使用者輸入的LIKE 表達式的文字模式比對

將使用者輸入與PostgreSQL 中的LIKE 模式進行比對時,必須轉義特殊模式字元(例如“_”和“%”)可確保字面匹配。 PostgreSQL 要求使用反斜線 () 或使用 ESCAPE 子句定義的自訂轉義字元來引用這些字元。

例如,要按字面匹配“rob”,您需要轉義任何包含下劃線或百分號。但是,這裡存在一個潛在的陷阱:如果您的使用者輸入也包含反斜杠,則它們也需要轉義。這可能會變得複雜並導致錯誤。

伺服器端解決方案

為了優雅地處理這個問題,您可以利用 PostgreSQL 的 Replace() 函數將特殊字元替換為它們的值逃脫版本。這種方法有幾個優點:

  • 它在伺服器上執行,無需客戶端處理。
  • 它轉義所有必要的字符,確保一致性。
  • 即使使用者輸入除下劃線和百分號之外還包含特殊字符,它也可以無縫工作。

例如,要按字面搜尋“rob”,您可以使用以下查詢:

在此查詢中:

  • $1 是使用者輸入的佔位符。
  • replace($1,'^','^^') 轉義任何插入符號輸入字串中的字元 (^)。
  • replace(replace($1,'^','^^'),'%','^%') 對輸入中的任何百分號(%) 進行轉義string.
  • replace(replace(replace($1,'^','^^'),'%','^%'),'_','^_') 轉義任何下劃線(_ ) 在輸入字符串中。
  • ||'%' 將尾隨百分號附加到搜尋字串以進行前綴匹配。
  • ESCAPE '^' 指定“^”作為轉義字符,允許您可以轉義三個特殊字符中的任何一個。

結論

透過使用伺服器端替換和自訂轉義字符,您可以確保文字模式匹配在PostgreSQL 中,LIKE 表達式用於未經驗證的使用者輸入。這種方法非常穩健,避免了注入漏洞,並簡化了程式碼。

以上是如何使用未經驗證的使用者輸入在 PostgreSQL LIKE 表達式中實作文字模式比對?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn