<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="id">
	<id>https://wiki.unissula.ac.id/index.php?action=history&amp;feed=atom&amp;title=Injeksi_SQL</id>
	<title>Injeksi SQL - Riwayat revisi</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.unissula.ac.id/index.php?action=history&amp;feed=atom&amp;title=Injeksi_SQL"/>
	<link rel="alternate" type="text/html" href="https://wiki.unissula.ac.id/index.php?title=Injeksi_SQL&amp;action=history"/>
	<updated>2026-09-16T04:21:34Z</updated>
	<subtitle>Riwayat revisi halaman ini di wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.unissula.ac.id/index.php?title=Injeksi_SQL&amp;diff=4921&amp;oldid=prev</id>
		<title>Maintenance script: Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi</title>
		<link rel="alternate" type="text/html" href="https://wiki.unissula.ac.id/index.php?title=Injeksi_SQL&amp;diff=4921&amp;oldid=prev"/>
		<updated>2026-08-24T03:56:49Z</updated>

		<summary type="html">&lt;p&gt;Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;id&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Revisi sebelumnya&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revisi per 24 Agustus 2026 03.56&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l162&quot;&gt;Baris 162:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Baris 162:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [http://www.windowsitpro.com/Article/ArticleID/46379/46379.html Avoid SQL injection]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [http://www.windowsitpro.com/Article/ArticleID/46379/46379.html Avoid SQL injection]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [[b:en:Programming:PHP:SQL Injection|PHP and SQL Injections]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [[b:en:Programming:PHP:SQL Injection|PHP and SQL Injections]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [http://ferruh.mavituna.com/makale/sql-injection-cheatsheet/ SQL Injection Cheat Sheet]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [http://ferruh.mavituna.com/makale/sql-injection-cheatsheet/ SQL Injection Cheat Sheet]  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [http://www.webapptest.org/ms-access-sql-injection-cheat-sheet-EN.html MS Access SQL Injection Cheat Sheet]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*  [http://www.webapptest.org/ms-access-sql-injection-cheat-sheet-EN.html MS Access SQL Injection Cheat Sheet]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Sumber dan atribusi ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Sumber dan atribusi ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Injeksi+SQL&amp;amp;oldid=28764725 Wikipedia bahasa Indonesia], revisi 28764725 (2026-01-01T01:24:36Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Injeksi+SQL&amp;amp;oldid=28764725 Wikipedia bahasa Indonesia], revisi 28764725 (2026-01-01T01:24:36Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;!-- WIKI_UNISSULA_PRESENTATION_V4 --&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
	<entry>
		<id>https://wiki.unissula.ac.id/index.php?title=Injeksi_SQL&amp;diff=4521&amp;oldid=prev</id>
		<title>Maintenance script: Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 28764725; atribusi sumber disertakan.</title>
		<link rel="alternate" type="text/html" href="https://wiki.unissula.ac.id/index.php?title=Injeksi_SQL&amp;diff=4521&amp;oldid=prev"/>
		<updated>2026-08-24T03:17:10Z</updated>

		<summary type="html">&lt;p&gt;Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 28764725; atribusi sumber disertakan.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Halaman baru&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Suntik SQL&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;&amp;#039;) atau &amp;#039;&amp;#039;&amp;#039;injeksi SQL&amp;#039;&amp;#039;&amp;#039; adalah sebuah teknik yang menyalahgunakan sebuah [[celah keamanan]] yang terjadi dalam lapisan [[pangkalan data]] sebuah [[aplikasi]]. Celah ini terjadi ketika masukan pengguna tidak disaring secara benar dari [[karakter-karakter pelolos]] berbentuk untaian yang diimbuhkan dalam pernyataan [[SQL]] atau masukan pengguna tidak bertipe kuat dan karenanya dijalankan tidak sesuai harapan. Ini sebenarnya adalah sebuah contoh dari sebuah kategori celah keamanan yang lebih umum yang dapat terjadi setiap kali sebuah bahasa pemrograman atau skrip diimbuhkan di dalam bahasa yang lain.&lt;br /&gt;
&lt;br /&gt;
== Bentuk-bentuk celah keamanan suntik SQL ==&lt;br /&gt;
=== Karakter-karakter pelolos yang tidak disaring dengan benar ===&lt;br /&gt;
Bentuk suntik SQL ini terjadi ketika masukan pengguna tidak disaring dari [[karakter-karakter pelolos]] dan kemudian diteruskan ke dalam sebuah pernyataan [[SQL]]. Ini menimbulkan bakal untuk memanipulasi pernyataan-pernyataan yang dilakukan pada basis data oleh pengguna akhir aplikasi.&lt;br /&gt;
&lt;br /&gt;
Baris kode berikut menggambarkan celah keamanan ini:&lt;br /&gt;
&lt;br /&gt;
 pernyataan:= &amp;quot;SELECT * FROM pengguna WHERE nama = &amp;#039;&amp;quot; + namaPengguna + &amp;quot;&amp;#039;;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Jika variabel &amp;quot;namaPengguna&amp;quot; dirangkai sedemikian rupa oleh pengguna yang bermaksud buruk, pernyataan SQL tersebut bisa melakukan lebih daripada yang pengarangnya maksudkan. Sebagai contoh, mengeset variabel &amp;quot;namaPengguna&amp;quot; sebagai&lt;br /&gt;
&lt;br /&gt;
 a&amp;#039; or &amp;#039;t&amp;#039;=&amp;#039;t&lt;br /&gt;
&lt;br /&gt;
menjadikan pernyataan SQL ini oleh bahasa yang memuatnya:&lt;br /&gt;
&lt;br /&gt;
 SELECT * FROM pengguna WHERE nama = &amp;#039;a&amp;#039; or &amp;#039;t&amp;#039;=&amp;#039;t&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Jika kode ini akan digunakan dalam sebuah tata cara untuk melakukan [[autentikasi|penyahihan diri]], maka contoh ini dapat dipakai untuk memaksakan pemilihan sebuah nama pengguna yang sah karena evuluasi &amp;#039;t&amp;#039;=&amp;#039;t&amp;#039; akan selalu bernilai benar.&lt;br /&gt;
&lt;br /&gt;
Secara teori, perintah [[SQL]] sah apapun bisa disuntik melalui metode ini, termasuk menjalankan banyak pernyataan. Nilai &amp;quot;namaPengguna&amp;quot; berikut ini pada pernyataan di atas akan menyebabkan dihapusnya tabel &amp;quot;pengguna&amp;quot; dan juga pengambilan semua data dari tabel &amp;quot;data&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 a&amp;#039;;DROP TABLE pengguna; SELECT * FROM data WHERE nama LIKE &amp;#039;%&lt;br /&gt;
&lt;br /&gt;
Masukan ini menjadikan pernyataan akhir SQL sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 SELECT * FROM pengguna WHERE nama = &amp;#039;a&amp;#039;;DROP TABLE pengguna; SELECT * FROM data WHERE nama LIKE &amp;#039;%&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
=== Penanganan jenis yang tidak benar ===&lt;br /&gt;
Bentuk suntik SQL ini terjadi ketika sebuah unsur masukan pengguna tidak berjenis-kuat atau tidak diperiksa batasan-batasan [[jenis data|jenisnya]]. Ini dapat terjadi ketika sebuah unsur numerik akan digunakan dalam sebuah pernyataan SQL, tetapi pemrogram tidak melakukan pemeriksaan untuk memastikan bahwa masukan pengguna adalah numerik. Sebagai contoh:&lt;br /&gt;
&lt;br /&gt;
 pernyataan:= &amp;quot;SELECT * FROM data WHERE id = &amp;quot; + variabel_a + &amp;quot;;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Terlihat jelas dari pernyataan ini pengarang memaksudkan variabel_a menjadi sebuah nomor yang berhubungan dengan unsur &amp;quot;id&amp;quot;. Namun begitu, jika pada kenyataannya itu adalah sebuah [[untaian]], maka pengguna akhir dapat memanipulasi pernyataan tersebut sesukanya, dan karena itu mengabaikan kebutuhan akan karakter-karakter pelolos. Sebagai contoh, menyetel variabel_a sebagai&lt;br /&gt;
&lt;br /&gt;
 1;DROP TABLE pengguna&lt;br /&gt;
&lt;br /&gt;
akan menghapus tabel &amp;quot;pengguna&amp;quot; dari pangkalan data karena hasil akhir SQL-nya akan menjadi sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 SELECT * FROM data WHERE id = 1;DROP TABLE pengguna;&lt;br /&gt;
&lt;br /&gt;
=== Celah keamanan dalam peladen pangkalan data ===&lt;br /&gt;
Terkadang celah-celah keamanan dapat berada dalam [[perangkat lunak]] [[peladen]] pangkalan data itu sendiri, seperti yang terjadi pada fungsi-fungsi &amp;lt;code&amp;gt;real_escape_chars()&amp;lt;/code&amp;gt; di peladen [[MySQL]].&lt;br /&gt;
&lt;br /&gt;
== Mengamankan aplikasi terhadap injeksi SQL ==&lt;br /&gt;
=== Perbaikan aplikasi ===&lt;br /&gt;
Injeksi SQL dapat dengan mudah diatasi dalam kebanyakan [[bahasa pemrograman]] yang menargetkan aplikasi web atau menawarkan fungsi. Dalam [http://search.cpan.org/search?query=dbi DBI] di [[Perl]], metode &amp;lt;code&amp;gt;DBI::quote&amp;lt;/code&amp;gt; meloloskan karakter-karakter khusus (anggaplah variabel &amp;lt;code&amp;gt;$sql&amp;lt;/code&amp;gt; menyimpan referensi ke sebuah objek DBI):&lt;br /&gt;
&lt;br /&gt;
 $kueri = $sql-&amp;gt;prepare&lt;br /&gt;
   (&lt;br /&gt;
       &amp;quot;select * from pengguna where nama = &amp;quot;&lt;br /&gt;
     .&lt;br /&gt;
       $sql-&amp;gt;quote($nama_pengguna)&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
Namun begitu, secara umum ini bukan jalan yang terbaik dalam menghadapi masalah tersebut. DBI mengizinkan penggunaan placeholder, yang memperbolehkan Anda untuk mengikat data ke sebuah pernyataan secara terpisah dari pendefinisian pernyataan SQL tersebut. Untuk sistem basis data yang tidak secara asli mendukung placeholder, DBI menirukannya dengan menggunakan fungsi &amp;lt;code&amp;gt;DBI::quote&amp;lt;/code&amp;gt; secara otomatis pada nilai-nilai. Banyak sistem basis data yang mendukung pengikatan nilai secara terpisah melalui API mereka; DBI akan menggunakan dukungan placeholder asli tersebut dalam hal ini. Sebagai contoh:&lt;br /&gt;
&lt;br /&gt;
 $kueri = $sql-&amp;gt;prepare(&amp;quot;select * from pengguna where nama = ?&amp;quot;);&lt;br /&gt;
 $kueri-&amp;gt;execute($nama_pengguna);&lt;br /&gt;
&lt;br /&gt;
Keuntungannya adalah Anda tidak perlu mengingat untuk menggunakan &amp;lt;code&amp;gt;DBI::quote&amp;lt;/code&amp;gt; kepada setiap nilai. Nilai-nilai akan diikat secara terpisah, atau dikutip secara benar, tergantung pada dukungan yang ditawarkan oleh [[SMBD]] tertentu yang Anda gunakan. Anda kemudian terhindari dari masalah dasar injeksi SQL di mana nilai-nilai diinterpretasi sebagai SQL.&lt;br /&gt;
&lt;br /&gt;
Bagi sistem basis data yang mendukung placeholder secara asli, sering kali ada keuntungan kinerja yang nyata untuk menggunakan [[placeholder]], karena basis data dapat menyimpan [[Tembolok (komputer)|cache]] dari sebuah perwakilan pernyataan yang terkompilasi dan menggunakannya secara berulang di antara pelaksanaan-pelaksanaan dengan nilai-nilai ikatan yang berbeda. Placeholder kadang-kadang juga disebut sebagai &amp;quot;variabel pengikat&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Dalam [[PHP]], terdapat beberapa fungsi bawaan yang berbeda untuk digunakan pada SMBD-SMBD yang berbeda untuk meloloskan nilai-nilai yang cocok untuk diimbuhkan dalam pernyataan-pernyataan SQL harfiah. Untuk [[MySQL]], yang serupa dengan ini adalah fungsi bawaan &amp;lt;code&amp;gt;mysql_real_escape_string&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
 $hasil_kueri = mysql_query&lt;br /&gt;
   (&lt;br /&gt;
       &amp;quot;select * from pengguna where nama = &amp;#039;&amp;quot;&lt;br /&gt;
     .&lt;br /&gt;
       mysql_real_escape_string($nama_pengguna)&lt;br /&gt;
     .&lt;br /&gt;
       &amp;quot;&amp;#039;&amp;quot;&lt;br /&gt;
   );&lt;br /&gt;
&lt;br /&gt;
Antarmuka asli untuk sebuah [[SMBD]] tertentu dapat juga menawarkan sebuah metode untuk melakukan pengikatan placeholder secara terpisah, misalnya [http://php.net/manual/en/function.mysqli-stmt-bind-param.php mysql_stmt_bind_param]  atau [http://php.net/manual/en/function.oci-bind-by-name.php oci_bind_by_name]. Selain itu, sebuah pustaka abstraksi basis data dapat digunakan untuk menirukan placeholder dalam cara yang mirip dengan DBI dari Perl. Sebuah contoh dari beberapa pustaka yang ada ialah [http://adodb.sourceforge.net/ ADOdb].&lt;br /&gt;
&lt;br /&gt;
Dalam bahasa pemrograman [[Java]], yang serupa adalah kelas PreparedStatement.&lt;br /&gt;
&lt;br /&gt;
Daripada&lt;br /&gt;
&lt;br /&gt;
 Connection con = (peroleh koneksi)&lt;br /&gt;
 Statement stmt = con.createStatement();&lt;br /&gt;
 ResultSet rset = stmt.executeQuery(&amp;quot;SELECT * FROM pengguna WHERE nama = &amp;#039;&amp;quot; + userName + &amp;quot;&amp;#039;;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
gunakan yang berikut&lt;br /&gt;
&lt;br /&gt;
 Connection con = (peroleh koneksi)&lt;br /&gt;
 PreparedStatement pstmt = con.prepareStatement(&amp;quot;SELECT * FROM pengguna WHERE nama = ?&amp;quot;);&lt;br /&gt;
 pstmt.setString(1, namaPengguna);&lt;br /&gt;
 ResultSet rset = pstmt.executeQuery();&lt;br /&gt;
&lt;br /&gt;
Dalam bahasa pemrograman &amp;quot;[[C sharp|C#]]&amp;quot; [[Microsoft .NET|.NET]] atau [[Mono (perangkat lunak)|Mono]], yang serupa adalah objek-objek ADO.NET SqlCommand (untuk [[Microsoft SQL Server]]) atau OracleCommand (untuk server basis data Oracle). Contoh di bawah ini memperlihatkan bagaimana mencegah serangan injeksi menggunakan objek SqlCommand. Kode untuk penyedia ADO.NET lainnya sangat mirip, tetapi dapat sedikit berbeda tergantung pada implementasi khusus yang dibuat oleh vendor penyedia tersebut.&lt;br /&gt;
&lt;br /&gt;
Daripada&lt;br /&gt;
&lt;br /&gt;
 using( SqlConnection con = (peroleh koneksi) ) {&lt;br /&gt;
   con.Open();&lt;br /&gt;
   using( SqlCommand cmd = new SqlCommand(&amp;quot;SELECT * FROM pengguna WHERE nama = &amp;#039;&amp;quot; + namaPengguna + &amp;quot;&amp;#039;&amp;quot;, con) ) {&lt;br /&gt;
     using( SqlDataReader rdr = cmd.ExecuteReader() ) {&lt;br /&gt;
       ...&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
gunakan yang berikut&lt;br /&gt;
&lt;br /&gt;
 using( SqlConnection con = (peroleh koneksi) ) {&lt;br /&gt;
   con.Open();&lt;br /&gt;
   using( SqlCommand cmd = new SqlCommand(&amp;quot;SELECT * FROM users WHERE name = @namaPengguna&amp;quot;, con) ) {&lt;br /&gt;
&lt;br /&gt;
     cmd.Parameters.AddWithValue(&amp;quot;@namaPengguna&amp;quot;, namaPengguna);&lt;br /&gt;
&lt;br /&gt;
     using( SqlDataReader rdr = cmd.ExecuteReader() ) {&lt;br /&gt;
       ...&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Perbaikan basis data ===&lt;br /&gt;
Mengatur hak-hak keamanan pada basis data ke kebutuhan yang paling minim adalah sebuah perbaikan yang sederhana. Tidak banyak aplikasi yang memerlukan pengguna untuk memiliki hak menghapus sebuah tabel atau basis data.&lt;br /&gt;
&lt;br /&gt;
Kebanyakan basis data juga menawaran kemampuan untuk menyiapkan pernyataan-pernyataan SQL pada lapisan basis data melalui [[stored procedure]]. Daripada menggunakan sebuah [[lapisan aplikasi]] untuk merangkai SQL secara dinamis, stored procedure membungkus prosedur-prosedur basis data pakai-ulang yang dipanggil dengan parameter-parameter [[tipe data|bertipe]]. Ini menyediakan beberapa keuntungan keamanan dengan membuat masukan-masukan menjadi parameter dan mewajibkan tipe pada mereka, masukan pengguna secara efektif tersaring. Sebagai tambahan, kebanyakan basis data mengizinkan stored procedure untuk berjalan di bawah hak-hak keamanan yang berbeda daripada pengguna basis data. Misalnya, sebuah aplikasi akan memiliki akses untuk menjalankan sebuah stored procedure, tetapi tidak memiliki akses ke tabel-tabel dasarnya. Ini membatasi kemampuan aplikasi untuk melakukan sesuatu yang di luar aksi-aksi yang dituliskan di dalam stored procedure.&lt;br /&gt;
&lt;br /&gt;
Yang juga penting untuk dicatat adalah metode kueri standar dari pustaka client [[C (bahasa pemrograman)|C]] [[MySQL]] tidak akan mengizinkan lebih daripada sebuah kueri dalam sebuah masukan, mencegah serangan banyak-pernyataan yang dipaparkan di atas. Namun begitu, masukan pengguna baik-baik yang mengandung karakter-karakter pelolos (misalnya tanda kutip tunggal) tetap dapat menyebabkan aplikasi tidak berjalan karena [[Sintaksis|sintaks]] SQL yang buruk. Bahkan beberapa serangan juga mungkin terjadi, sebagai contoh misalkan sebuah situs web yang memperlihatkan sebuah daftar barang untuk sebuah nama pengguna yang dikenal. Kueri yang dijalankan adalah:&lt;br /&gt;
&lt;br /&gt;
 SELECT * from barang where namapengguna=&amp;#039;$namapengguna&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
Seorang penyerang dapat memakai nama pengguna yang dirangkai secara khusus untuk mengetahui semua barang milik semua pengguna:&lt;br /&gt;
&lt;br /&gt;
 $namapengguna = &amp;quot;&amp;#039; or namapengguna is not null or namapengguna=&amp;#039;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
menghasilkan pernyataan SQL sebagai berikut:&lt;br /&gt;
&lt;br /&gt;
 SELECT * from barang where namapengguna=&amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt; or namapengguna is not null or namapengguna=&amp;lt;nowiki&amp;gt;&amp;#039;&amp;#039;&amp;lt;/nowiki&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Ingatlah, walaupun begitu, bahwa meloloskan atau menghapus tanda kutip tidak melenyapkan risiko injeksi SQL sepenuhnya. Misalkan kueri Anda tampak seperti ini:&lt;br /&gt;
&lt;br /&gt;
 SELECT * from barang where idpengguna=$idpengguna;&lt;br /&gt;
&lt;br /&gt;
Dengan anggapan bahwa $idpengguna merupakan nilai numerik tetapi dibiarkan lolos tanpa diperiksa, idpengguna yang dirangkai khusus ini akan, sekali lagi, memperlihatkan semua barang milik semua pengguna:&lt;br /&gt;
&lt;br /&gt;
 $idpengguna = &amp;quot;33 or idpengguna is not null or userid=44&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Yang seperti dapat Anda lihat, tidak mengandung tanda kutip sama sekali dan akan menghasilkan kueri ini:&lt;br /&gt;
&lt;br /&gt;
 SELECT * from barang where idpengguna=33 or idpengguna is not null or idpengguna=44;&lt;br /&gt;
&lt;br /&gt;
Pertahanan yang terbaik, daripada membuat daftar hitam masukan buruk yang diketahui, adalah hanya mengizinkan masukan baik yang diketahui, atau, dengan kata lain, membuat daftar putih. Misalnya, jika Anda ingin bertahan terhadap serangan ini, Anda dapat memeriksa variabel idpengguna untuk memastikan bahwa isinya numerik seperti berikut:&lt;br /&gt;
&lt;br /&gt;
 if(!ctype_digit($idpengguna)){ die(&amp;quot;Karakter-karakter yang tidak sah dalam idpengguna.&amp;quot;); }&lt;br /&gt;
&lt;br /&gt;
== Lihat pula ==&lt;br /&gt;
* [[Injeksi kode]]&lt;br /&gt;
&lt;br /&gt;
== Pranala luar ==&lt;br /&gt;
*  &amp;quot;[http://www.owasp.org/images/7/74/Advanced_SQL_Injection.ppt Advanced SQL Injection] &amp;quot; oleh Victor Chapela&lt;br /&gt;
*  &amp;quot;[http://citeseer.ist.psu.edu/641328.html SQLrand: Preventing SQL Injection Attacks]&amp;quot; oleh Stephen W. Boyd dan Angelos D. Keromytis&lt;br /&gt;
*  &amp;quot;[http://www.cgisecurity.com/questions/sql.shtml What is SQL Injection?]&amp;quot; oleh CGISecurity.com&lt;br /&gt;
*  &amp;quot;[http://www.cgisecurity.com/questions/blindsql.shtml What is Blind SQL Injection?]&amp;quot; oleh CGISecurity.com&lt;br /&gt;
*  &amp;quot;[http://www.webappsec.org/projects/threat/classes/sql_injection.shtml SQL Injection WASC Threat Classification Entry]&amp;quot; oleh The Web Application Security Consortium&lt;br /&gt;
*  [http://www.windowsitpro.com/Article/ArticleID/46379/46379.html Avoid SQL injection]&lt;br /&gt;
*  [[b:en:Programming:PHP:SQL Injection|PHP and SQL Injections]]&lt;br /&gt;
*  [http://ferruh.mavituna.com/makale/sql-injection-cheatsheet/ SQL Injection Cheat Sheet]&lt;br /&gt;
*  [http://www.webapptest.org/ms-access-sql-injection-cheat-sheet-EN.html MS Access SQL Injection Cheat Sheet]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sumber dan atribusi ==&lt;br /&gt;
&lt;br /&gt;
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Injeksi+SQL&amp;amp;oldid=28764725 Wikipedia bahasa Indonesia], revisi 28764725 (2026-01-01T01:24:36Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.&lt;/div&gt;</summary>
		<author><name>Maintenance script</name></author>
	</entry>
</feed>