Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mencapai Padanan Corak Literal dalam Ungkapan SEPERTI PostgreSQL dengan Input Pengguna Tidak Sah?

Bagaimanakah Saya Boleh Mencapai Padanan Corak Literal dalam Ungkapan SEPERTI PostgreSQL dengan Input Pengguna Tidak Sah?

Linda Hamilton
Linda Hamiltonasal
2024-11-21 05:00:12525semak imbas

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

Pemadanan Corak Literal dalam PostgreSQL Like Expressions for Unvalidated User Input

Apabila memadankan input pengguna dengan corak LIKE dalam PostgreSQL, adalah penting untuk melarikan diri aksara corak khas seperti "_" dan "%" untuk memastikan padanan literal. PostgreSQL memerlukan aksara ini untuk dipetik menggunakan garis miring ke belakang () atau aksara melarikan diri tersuai yang ditakrifkan dengan klausa ESCAPE.

Sebagai contoh, untuk memadankan "merompak" secara literal, anda perlu melepaskan sebarang input pengguna yang mengandungi garis bawah atau tanda peratus. Walau bagaimanapun, terdapat kemungkinan perangkap di sini: jika input pengguna anda juga mengandungi garis miring ke belakang, ia juga perlu dilepaskan. Ini boleh menjadi rumit dan membawa kepada pepijat.

Penyelesaian Sebelah Pelayan

Untuk mengendalikan perkara ini dengan elegan, anda boleh memanfaatkan fungsi replace() PostgreSQL untuk menggantikan aksara khas dengan aksaranya. versi melarikan diri. Pendekatan ini mempunyai beberapa kelebihan:

  • Ia dilakukan pada pelayan, menghapuskan keperluan untuk pengendalian pihak pelanggan.
  • Ia melepaskan semua aksara yang diperlukan, memastikan konsistensi.
  • Ia berfungsi dengan lancar walaupun apabila input pengguna mengandungi aksara khas sebagai tambahan kepada garis bawah dan tanda peratus.

Sebagai contoh, untuk mencari "merompak" secara literal, anda boleh menggunakan pertanyaan berikut:

SELECT * FROM users WHERE name LIKE replace(replace(replace(,'^','^^'),'%','^%'),'_','^_') ||'%' ESCAPE '^'

Dalam pertanyaan ini:

  • $1 ialah pemegang tempat untuk input pengguna.
  • ganti($1,'^','^^') terlepas dari sebarang karet aksara (^) dalam rentetan input.
  • replace(replace($1,'^','^^'),'%','^%') terlepas daripada sebarang tanda peratus (%) dalam input rentetan.
  • ganti(ganti(ganti($1,'^','^^'),'%','^%'),'_','^_') terlepas daripada garis bawah (_ ) dalam rentetan input.
  • ||'%' menambahkan tanda peratus mengekor pada rentetan carian untuk pemadanan awalan.
  • ESCAPE '^' menentukan "^" sebagai aksara melarikan diri, membenarkan anda untuk melarikan diri daripada mana-mana tiga watak istimewa.

Kesimpulan

Dengan menggunakan penggantian bahagian pelayan dan watak melarikan diri tersuai, anda boleh memastikan padanan corak literal dalam ungkapan SUKA PostgreSQL untuk input pengguna yang tidak sah. Pendekatan ini mantap, mengelakkan kelemahan suntikan dan memudahkan kod.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Padanan Corak Literal dalam Ungkapan SEPERTI PostgreSQL dengan Input Pengguna Tidak Sah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn