Melindungi Android SQL Anda DALAM Klausa
Mencegah suntikan SQL adalah penting apabila membina pertanyaan SQL, terutamanya yang menggunakan klausa IN
. Walaupun kaedah rawQuery
Android menggunakan ruang letak (?), menggantikannya secara langsung dengan data yang disediakan pengguna merupakan risiko keselamatan yang ketara.
Penyelesaian teguh melibatkan parametrisasi klausa IN
. Pendekatan ini menggunakan rentetan pemegang tempat yang dijana, mengelakkan kemasukan langsung input pengguna dalam pertanyaan SQL itu sendiri.
Pendekatan Selamat:
Jana Pemegang Tempat: Cipta rentetan yang mengandungi bilangan ruang letak yang betul (?). Fungsi pembantu seperti makePlaceholders(int len)
menjana rentetan len
yang dipisahkan koma dengan tanda soal. Fungsi ini memastikan rentetan pemegang tempat diformat secara konsisten dan bebas daripada data yang dibekalkan pengguna.
Bina Pertanyaan: Sepadukan rentetan ruang letak yang dijana ke dalam pertanyaan SQL anda:
<code class="language-sql">String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";</code>
Sediakan dan Ikat: Sediakan pertanyaan dan ikat nilai dinamik sebagai tatasusunan:
<code class="language-java">Cursor cursor = mDb.rawQuery(query, names);</code>
Yang penting, bilangan nilai dalam tatasusunan names
mestilah sepadan dengan tepat bilangan ruang letak yang dijana.
Contoh Kod:
Berikut ialah contoh pelaksanaan fungsi makePlaceholders
:
<code class="language-java">public static String makePlaceholders(int len) { StringBuilder sb = new StringBuilder(len * 2 - 1); sb.append("?"); for (int i = 1; i < len; i++) { sb.append(",?"); } return sb.toString(); }</code>
Kaedah ini membina rentetan ruang letak secara dinamik, memastikan pelaksanaan pertanyaan selamat. Dengan menggunakan pertanyaan berparameter, anda mengurangkan kerentanan suntikan SQL dengan berkesan dan melindungi pangkalan data Android anda.
Atas ialah kandungan terperinci Bagaimana untuk Mengukur Klausa SQL IN dengan Selamat dalam Android?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!