Sumber: MSDN
Lingkup aplikasi
BLOG Yunzhongcheng
:
ASP.NET versi 1.1
ASP.NET versi 2.0
Ringkasan:
Teks ini terutama memperkenalkan cara memverifikasi masukan pengguna untuk mencegah serangan injeksi. Sangat penting untuk memverifikasi masukan pengguna. Hampir semua serangan tingkat program berisi metode masukan berbahaya.
Anda harus memverifikasi termasuk bidang, parameter string kueri, Cookie, dan pengguna lain item input digunakan untuk melindungi program Anda dari serangan injeksi. Anda harus berasumsi bahwa semua input pengguna berbahaya dan memastikan bahwa semua input pengguna diverifikasi di sisi server. Menggunakan validasi berbasis klien dapat mengurangi jumlah kunjungan halaman. meningkatkan kinerja, dan meningkatkan pengalaman pengguna, namun jangan hanya mengandalkan hal ini, karena validasi sisi klien dapat dengan mudah ditipu oleh peretas.
Untuk memvalidasi konten masukan, Anda harus menentukan aturan masukan yang dapat diterima untuk setiap kolom masukan adalah membuat batasan berdasarkan panjang, rentang, format, dan jenis kolom input. Gunakan daftar batasan karakter yang dapat diterima alih-alih daftar karakter ilegal untuk membatasi input. Menggunakan batasan daftar karakter ilegal tidak baik karena Anda hampir tidak mungkin untuk memfilter semua masukan berbahaya.
Jika Anda perlu menerima masukan karakter HTML, yang terbaik adalah menggunakan metode seperti HtmlEncode untuk mengkodekannya dengan aman sebelum menampilkannya.
Konten:
Ikhtisar
Tujuan
Langkah-demi-Langkah Umpan Implementasi
Langkah 1. Menggunakan ASP . Verifikasi permintaan .NET.
Langkah 2. Gunakan masukan batasan hak.
Langkah 3. Enkode masukan yang tidak aman.
Langkah
4.
Gunakan parameter perintah untuk pernyataan Sql
--------------------------------------------------- ------------------------------
Tujuan:
Batasi panjang, rentang, format, dan jenis string masukan.
Gunakan validasi permintaan untuk mencegah serangan injeksi saat mengembangkan program ASP.NET.
Gunakan kontrol validasi ASP.NET untuk validasi input.
Enkode keluaran yang tidak aman.
Cegah serangan injeksi menggunakan pola set parameter perintah.
Cegah detail kesalahan dikembalikan ke klien.
Ikhtisar:
Anda harus memvalidasi semua masukan yang tidak tepercaya dalam aplikasi Anda. Anda harus berasumsi bahwa semua masukan pengguna tidak valid. Pengguna dapat memberikan bidang formulir, string kueri, cookie klien, dan nilai lingkungan browser dalam aplikasi seperti string Proksi pengguna dan Alamat IP, dll.
Validasi masukan yang lemah biasanya memberikan peluang untuk serangan injeksi. Berikut ini adalah metode serangan umum yang menggunakan validasi masukan yang lemah atau tanpa validasi masukan.
Injeksi SQL. Jika Anda menggunakan nilai input pengguna untuk membuat pernyataan SQL secara dinamis, database dapat mengeksekusi pernyataan SQL yang menyinggung dan berbahaya.
Skrip lintas situs. Serangan skrip lintas situs mengeksploitasi kerentanan validasi halaman web untuk memasukkan skrip sisi klien. Kode-kode ini kemudian dikirim ke komputer klien tepercaya dan ditafsirkan serta dieksekusi oleh browser browser tidak mungkin mengetahui bahwa kode tersebut berbahaya.
Akses file tidak sah. Jika kode Anda menerima masukan dari pemanggil, pengguna jahat dapat melihat operasi file Anda dan mengakses file yang dilindungi atau menggunakan kode Anda untuk memasukkan data ilegal.
Catatan: Serangan injeksi dapat dilakukan dengan menggunakan koneksi HTTP atau HTTPS Secure Socket Layer (SSL). Teknik enkripsi transport tidak dapat digunakan untuk mencegah serangan.
Metode validasi input umum dirangkum di bawah ini , seperti kotak teks dan kolom masukan formulir lainnya, parameter string kueri, cookie, variabel sisi server, dan parameter metode jaringan. Perhatikan bahwa strategi pemfilteran seharusnya hanya mengizinkan masukan yang benar dan menolak masukan ilegal lebih baik daripada memfilter semua Lebih mudah untuk mendeteksi masukan ilegal, tetapi biasanya sulit untuk memasukkan semua masukan ilegal.
Verifikasi konten masukan melalui aspek berikut:
Batasan. Verifikasi bahwa input memiliki jenis, panjang karakter, format, dan rentang yang benar. Kontrol validasi ASP.NET dapat diterapkan untuk membatasi input kontrol server. Ekspresi reguler dan aturan validasi khusus dapat digunakan untuk membatasi input dari sumber lain.
Tolak. Deteksi masukan data berbahaya yang diketahui dan tolak.
Pemfilteran. Terkadang Anda ingin memfilter bagian masukan pengguna yang menimbulkan risiko keamanan. Misalnya, jika aplikasi Anda mengizinkan masukan bentuk bebas, seperti bidang memo, Anda akan mengizinkan tag HTML tertentu yang aman seperti <b>, <i > dan tag HTML lainnya.
Ringkasan Langkah
Lindungi aplikasi ASP.NET Anda dari serangan injeksi dengan mengikuti langkah-langkah berikut:
Langkah 1. Gunakan verifikasi permintaan ASP.NET.
Langkah 2. Batasi masukan.
Langkah 3. Enkode keluaran yang tidak aman.
Langkah 4. Gunakan parameter perintah untuk pernyataan kueri SQL.
Langkah 5. Verifikasi bahwa informasi kesalahan ASP.NET tidak bocor ke klien.
Bab berikut akan membahas langkah-langkah ini secara rinci.
Langkah 1. Gunakan validasi permintaan ASP.NET.
Secara default, validasi permintaan ASP.NET 1.1 dan 2.0 memeriksa apakah data yang dikirim ke server berisi elemen markup HTML dan karakter yang dicadangkan dari memasukkan skrip ke dalam program. Validasi permintaan akan dicocokkan dengan daftar string yang berpotensi mengancam, dan jika pengecualian ditemukan maka akan memunculkan pengecualian bertipe HttpRequestValidationException.
Anda dapat melakukan ini di file web.config Anda dengan < Tambahkan validasiRequest= "false" ke elemen halaman> atau setel ValidateRequest = "false" di elemen @Pages pada halaman terpisah untuk menonaktifkan fitur ini.
Jika Anda ingin menonaktifkan validasi permintaan, Anda dapat menonaktifkannya hanya pada halaman yang Anda perlukan. Misalnya, jika Anda menyertakan kolom pada halaman program yang menerima input dalam format HTML,
pastikan fitur validasi permintaan diaktifkan di file Machine.config
. Fitur validasi permintaan diaktifkan secara default di ASP.NET Anda dapat melakukan ini di file Machine.config.comments. Anda melihat pengaturan default berikut.
<pages validasiRequest = "true" ... />
Pastikan Anda belum mengubah pengaturan default di Machine.config server Anda dan Web aplikasi. file konfigurasi.
Uji validasi permintaan ASP.NET
Anda dapat menguji efek validasi permintaan. Buat halaman ASP.NET dan nonaktifkan validasi permintaan dengan mengatur ValidateRequest = "fasle" sebagai berikut:
<%@ Language="C#" ValidateRequest="false" %>
<html>
<skrip runat="server">
void btnSubmit_Click(Pengirim objek, EventArgs e)
{
// Jika ValidateRequest salah, maka 'halo' ditampilkan
// Jika ValidateRequest benar, maka ASP.NET mengembalikan pengecualian
Respon.Tulis(txtString.Teks);
}
</skrip>
<tubuh>
<form id="form1" runat="server">
<asp:TextBox id="txtString" runat="server"
Text="<script>peringatan('halo');</script>" />
<asp:Tombol id="btnSubmit" runat="server" OnClick="btnSubmit_Click"
Teks="Kirim" />
</bentuk>
</tubuh>
</html>
Saat Anda menjalankan halaman, "Halo" ditampilkan di kotak pesan karena skrip di txtString dijalankan dan diproses oleh browser klien.
Jika Anda menyetel ValidateRequest = "true" atau menghapus atribut halaman ValidateRequest, validasi permintaan ASP .NET. akan menolak input skrip dan memunculkan pesan kesalahan seperti di bawah ini.
Nilai Request.Form yang berpotensi berbahaya terdeteksi dari klien (txtString="<script>alert('hello").
Berhati-hatilah untuk tidak hanya mengandalkan fungsi verifikasi permintaan, namun hanya menggunakannya sebagai metode panduan untuk verifikasi khusus.
Langkah 2. Batasi masukan
Untuk membatasi masukan, gunakan metode berikut:
Gunakan validasi masukan sisi server. Jangan mengandalkan validasi sisi klien, karena validasi sisi klien dapat dengan mudah dilewati. Gunakan validasi sisi klien untuk mengurangi jumlah halaman yang terpental, meningkatkan kinerja, dan meningkatkan pengalaman pengguna.
Validasi panjang, rentang, format, dan jenis masukan. Pastikan konten masukan benar dan memenuhi persyaratan.
Gunakan tipe data yang kuat. Tentukan tipe data seperti Integer atau Double untuk input numerik. Tentukan tipe data String untuk input karakter. Tentukan tipe DateTime untuk input tanggal dan waktu.
Untuk memvalidasi kolom input kontrol HTML dalam formulir, lakukan validasi dalam kode sisi server. Menggunakan tipe ekspresi reguler Regex dapat membantu membatasi input karakter. Bagian berikut menjelaskan cara membatasi variabel tipe input
umum
Untuk memvalidasi kolom string seperti nama, alamat, faks, dan nomor akta kelahiran, gunakan ekspresi reguler.
Membatasi rentang karakter yang dapat diterima.
Aktifkan aturan pemformatan. Misalnya, bidang berbasis pola seperti nomor pajak, kode pos, dan kode pos memerlukan pola karakter tertentu.
Verifikasi panjangnya.
Gunakan kontrol validasi ekspresi reguler (RegularExpresionValidator)
Untuk menggunakan kontrol validasi ekspresi reguler, Anda perlu mengatur nama kontrol yang akan diverifikasi (ControlToValidate), ekspresi validasi (ValidationExpression) dan pesan kesalahan (ErrorMessage). contoh di bawah ini.
<form id = "WebForm" metode = "posting" runat = "server">
<asp:TextBox id="txtName" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator id="nameRegex" runat="server"
ControlToValidate = "Nama txt"
ValidationExpression="^[a-zA-Z'.s]{1,40}$"
ErrorMessage="Nama tidak valid">
</asp:regularexpressionvalidator>
</bentuk>
Dalam kode di atas, ekspresi reguler digunakan untuk membatasi nama masukan menjadi huruf (huruf besar dan kecil diperbolehkan), spasi, elips nama tunggal seperti O'Dell, dan titik. Selain itu, panjang karakter masukan dibatasi hingga 40 karakter Karakter.
Perhatikan bahwa kontrol validasi ekspresi reguler (RegularExpressionValidator) akan secara otomatis menambahkan tanda sisipan (^) dan tanda dolar ($) sebagai pembatas awal dan akhir Menambahkan pembatas hanya untuk membiarkan ekspresi Anda mendapatkan bagian dari data yang Anda inginkan.
Gunakan kelas ekspresi reguler (Kelas Regex)
jika Anda tidak menggunakan kontrol sisi server (artinya Anda tidak dapat menggunakan kontrol validasi), atau Anda memerlukan For lainnya. sumber bidang masukan selain bidang formulir (seperti parameter string kueri dan cookie), Anda dapat menggunakan kelas ekspresi reguler (kelas Regex).
Gunakan kelas ekspresi reguler
untuk mengimpor namespace System.Text.RegularExpressions dengan menambahkan pernyataan dengan menggunakan awalan.
Pastikan ekspresi reguler berisi "^" dan "$" (di awal string, di akhir string).
Panggil metode IsMatch kelas Regex, berikut contoh kodenya.
//Metode instan:
Regex reg = Regex baru(@"^[a-zA-Z'.s]{1,40}$");
Response.Write(reg.IsMatch(txtName.Text));
// Metode statis:
if (!Regex.IsMatch(txtName.Text,@"^[a-zA-Z'.s]{1,40}$"))
{
// Nama tidak cocok dengan ekspresi
}
Jika Anda tidak dapat menyimpan ekspresi reguler yang sering digunakan dalam cache, Anda harus menggunakan metode statis IsMatch untuk meningkatkan kinerja dan mencegah pembuatan objek yang tidak diperlukan.
Memvalidasi bidang numerik
Dalam kebanyakan kasus, Anda harus memvalidasi input dan rentang numerik bidang numerik, gunakan kontrol RangeValidator. RangeValidator mendukung data mata uang, tanggal, bilangan bulat, presisi ganda, dan tipe string.
Untuk menggunakan kontrol RangeValidator, Anda perlu mengatur nama kontrol (ControlToValidate), tipe (Jenis), dan Nilai minimum (Nilai Minimum). ), nilai maksimum (MaximumValue), dan properti pesan kesalahan (ErrorMessage). Berikut contoh kodenya:
<asp:Validator Rentang
ID="RentangValidator1"
Runat="server"
ErrorMessage="Rentang tidak valid. Angka harus antara 0 dan 255."
ControlToValidate = "rangeInput"
Nilai Maksimum = "255"
Nilai Minimum = "0" Tipe = "Bilangan Bulat" />
Jika Anda tidak menggunakan kontrol server, Anda dapat menyelesaikan verifikasi rentang angka dengan mengonversi nilai input menjadi bilangan bulat dan kemudian memvalidasinya. Misalnya, untuk memverifikasi apakah bilangan bulat legal, gunakan metode baru Int32.TryParse yang disediakan oleh ASP.NET 2.0 untuk mengubah nilai input menjadi tipe variabel System.Int32.
Int32 saya;
if (Int32.TryParse(txtInput.Teks, keluar i) == false)
{
//Konversi gagal
}
Jika Anda menggunakan versi ASP.NET yang lebih lama, Anda dapat menggunakan metode Int32.Parse atau Convert.ToInt32 di blok coba/tangkap
dan
menangani FormatException yang muncul ketika konversi gagal
dari HTML Tipe dan rentang tipe integer kotak teks.
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(pengirim objek, EventArgs e)
{
if (Permintaan.RequestType == "POST")
{
ke dalam aku;
if (Int32.TryParse(Request.Form["integerTxt"], keluar i) == true)
{
// TryParse mengembalikan nilai true jika konversi berhasil
jika ((0 <= saya && saya <= 255) == benar)
{
Response.Write("Data yang dimasukkan valid.");
}
kalau tidak
Response.Write("Data yang dimasukkan di luar jangkauan");
}
kalau tidak
Response.Write("Data yang dimasukkan bukan bilangan bulat");
}
}
</skrip>
<html>
<tubuh>
<form id="form1" action="NumericInput.aspx" metode="post">
<div>
Masukkan bilangan bulat antara 0 dan 255:
<masukan nama="integerTxt" type="teks" />
<input nama="Kirim" type="kirim" value="kirim" />
</div>
</bentuk>
</tubuh>
</html>
Memvalidasi Bidang Tanggal
Anda perlu memverifikasi bahwa bidang tanggal memiliki jenis yang benar. Dalam kebanyakan kasus, Anda juga perlu memverifikasi rentangnya, seperti memverifikasi apakah bidang tersebut berada di masa depan atau di masa lalu untuk menangkap nilai input tanggal, dan jika Anda ingin nilai berada dalam rentang tertentu, Anda dapat menggunakan kontrol validasi rentang (RangeValidator) dan mengatur tipe yang diizinkan ke tipe Tanggal dengan mengatur momen awal. Jika Anda perlu menggunakan waktu hari ini sebagai referensi untuk memverifikasi, seperti memverifikasi apakah suatu waktu berada di masa depan atau di masa lalu, Anda dapat menggunakan kontrol validasi CustomValidator.
Menggunakan kontrol CustomValidator untuk memvalidasi tanggal memerlukan pengaturan properti ControlToValidate dan ErrorMessage, dan menentukan metode logika validasi kustom dalam kejadian OnServerValidate.
<%@ Halaman Language="C#" %>
<script runat="server">
void ValidateDateInFuture(sumber objek, argumen ServerValidateEventArgs)
{
DateTime dt;
// Periksa tanggal yang valid dan tanggalnya di masa depan
if ((DateTime.TryParse(args.Value, out dt) == false) ||
(dt <= TanggalWaktu.Hari Ini))
{
args.IsValid = salah;
}
}
</skrip>
<html>
<tubuh>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" Runat="server"
Text="Tanggal Mendatang:"></asp:Label>
<asp:TextBox ID="futureDatetxt" Runat="server"></asp:TextBox>
<asp:Validator Khusus
ID="Validator Khusus1" Runat="server"
ErrorMessage="Tanggal tidak valid. Masukkan tanggal di masa depan."
ControlToValidate="tanggal masa depantxt"
OnServerValidate="ValidateDateInFuture">
</asp:Validator Khusus>
<br />
<asp:Button ID="submitBtn" Runat="server" Text="Kirim" />
</div>
</bentuk>
</tubuh>
</html>
Perhatikan bahwa kode di atas menggunakan metode DateTime.TryParse yang merupakan metode baru yang disediakan oleh ASP.NET 2.0.
Untuk memfilter kolom teks bebas
untuk memfilter masukan, Anda perlu memastikan bahwa masukan yang tidak aman tidak diperlakukan sebagai kode memungkinkan pengguna untuk Data dalam database bersama tidak dapat dibaca. Anda harus memfilter data terlebih dahulu agar tidak berbahaya saat dikeluarkan. Gunakan metode HttpUtility.HtmlEncode untuk mengkodekan nilai masukan terlebih
dahulu
Tambahkan bidang berikut ke elemen halaman @Page ValidateRequest = "false" untuk menonaktifkan validasi permintaan ASP.NET. Gunakan metode HtmlEncode untuk menyandikan string input. Gunakan objek StringBuilder dan panggil metode Ganti untuk mengganti HTML dalam karakter. Kode berikut memberikan Berikut adalah contoh dari pendekatan ini. Halaman ini menonaktifkan validasi permintaan ASP.NET dengan mengatur ValidateRequest = "fasle". Pengkodean HTML-nya memungkinkan penggunaan tag <b> dan <i> untuk menampilkan format teks sederhana .
<%@ Halaman Language="C#" ValidateRequest="false"%>
<script runat="server">
void submitBtn_Click(pengirim objek, EventArgs e)
{
// Mengkodekan masukan string
StringBuilder sb = StringBuilder baru(
HttpUtility.HtmlEncode(htmlInputTxt.Teks));
// Izinkan dan <i> secara selektif
sb.Ganti("<b>", "<b>");
sb.Ganti("</b>", "");
sb.Ganti("<i>", "<i>");
sb.Ganti("</i>", "");
Respon.Write(sb.ToString());
}
</skrip>
<html>
<tubuh>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="htmlInputTxt" Runat="server"
TextMode="MultiLine" Lebar="318px"
Tinggi="168px"></asp:Kotak Teks>
<asp:Tombol ID="submitBtn" Runat="server"
Text="Kirim" OnClick="kirimBtn_Click" />
</div>
</bentuk>
</tubuh>
</html>
Validasi nilai string kueri
Validasi panjang, rentang, format, dan tipe string kueri. Biasanya, Anda menggunakan ekspresi reguler gabungan untuk menyelesaikan tugas berikut:
Membatasi nilai input Tetapkan pemeriksaan rentang eksplisit Tentukan jenis input dan konversikan ke ASP.NET platform Tipe berikut, menangani pengecualian apa pun yang disebabkan oleh konversi tipe. Contoh kode berikut menunjukkan penggunaan kelas Regex untuk memvalidasi string nama yang diteruskan dalam string kueri.
void Page_Load(pengirim objek, EventArgs e)
{
if (!System.Text.RegularExpressions.Regex.IsMatch(
Permintaan.QueryString["Nama"], @"^[a-zA-Z'.s]{1,40}$"))
Response.Write("Parameter nama tidak valid");
kalau tidak
Response.Write("Nama adalah " + Permintaan.QueryString["Nama"]);
}
Validasi Nilai Cookie
Nilai yang disimpan dalam cookie seperti string kueri dapat denganmudah
diubah oleh pengguna. Juga validasi panjang, rentang, format, dan jenis nilai ini.
Validasi file dan alamat URL
nama, Alamat file, atau jalur penyimpanan file, Anda perlu memverifikasi bahwa formatnya benar dan menunjuk ke lokasi yang valid sesuai dengan situasi aktual program Anda. Jika verifikasi ini gagal, program Anda mungkin salah diminta untuk mengakses file.
Verifikasi jalur file
untuk mencegah program Anda dieksploitasi oleh pengguna untuk mengakses file, cegah program tersebut menerima file atau jalur file yang dimasukkan oleh kode yang ditulis
pengguna Metode .IO.Path.GetFileName untuk mendapatkan nama lengkap file. Jika Anda harus Menerima jalur file input dan menggunakan System.IO.Path.GetFullPath untuk mendapatkan jalur file lengkap .
Jika Anda menggunakan metode MapPath untuk memetakan direktori virtual yang disediakan ke direktori fisik di server, gunakan versi metode Request.MapPath yang kelebihan beban dengan parameter bool untuk mencegah pemetaan lintas aplikasi.
mencoba
{
string mappedPath = Permintaan.MapPath( inputPath.Teks,
Permintaan.ApplicationPath, salah);
}
menangkap(HttpException)
{
// Upaya pemetaan lintas aplikasi
}
Parameter false terakhir akan mencegah pemetaan lintas aplikasi. Ini berarti bahwa pengguna tidak diperbolehkan menggunakan sintaks "..." untuk menyediakan jalur ilegal yang tidak berada dalam direktori virtual yang Anda tentukan.
Jika Anda menggunakan kontrol server, Anda dapat menggunakan metode Control.MapPathSecure untuk mendapatkan alamat direktori sebenarnya yang sesuai dengan direktori virtual.
Metode Control.MapPathSecure memunculkan HttpException saat mengakses file yang tidak sah. Untuk informasi selengkapnya, lihat pengenalan metode Control.MapPathSecure dalam dokumentasi .NET Framework.
Menggunakan keamanan akses kode untuk membatasi input dan output file
Administrator dapat membatasi kemampuan program untuk membaca dan menulis file ke direktori virtual tempatnya berada dengan mengatur kredibilitasnya ke "sedang". Mekanisme keamanan kode .NET memastikan bahwa program tidak memiliki hak akses file apa pun di luar direktori virtual tempatnya berada.
Untuk mengatur tingkat kepercayaan suatu aplikasi ke "medium", Anda dapat menambahkan:
< tingkat kepercayaan = "Medium" />
Verifikasi URL
Anda dapat menggunakan ekspresi reguler seperti berikut untuk mencocokkan URL.
^(?:http|https|ftp)://[a-zA-Z0-9 .-]+(?::d {1,5})?(?:[A-Za-z0-9.;:@&=+$,? /]|%u[0-9A-Fa- f]{4}|%[0-9A-Fa-f]{2})*$
Ini hanya membatasi format input dan tidak memverifikasi apakah format tersebut dapat diterima dalam aplikasi dalam cakupan aplikasi Anda itu valid dalam konteks aplikasi Anda. Misalnya, apakah aplikasi Anda berkomunikasi dengan server yang Anda tentukan?
Langkah 3. Encode kode yang tidak aman
Jika Anda memasukkan teks ke dalam halaman web, gunakan metode HttpUtility.HtmlEncode untuk mengkodekannya. Jika teks berasal dari input pengguna, database, atau file lokal, pastikan untuk selalu melakukan hal ini.
Demikian pula, jika Anda menulis URL yang berisi karakter tidak aman karena berasal dari Untuk konten input pengguna, database, dll., gunakan Metode HttpUtility.UrlEncode untuk menyandikan.
Untuk
mencegah pengkodean sebelum menyimpan data, yang dapatmerusak
data yang disimpan, pastikan untuk menyandikannya sebagai langkah selanjutnya saat menampilkannya
dengan string tekstual khusus untuk mewakili simbol-simbol ini dan mencegah browser menafsirkannya sebagai tag HTML. Misalnya, "<" diganti dengan <
<%@ Halaman Bahasa="C#" ValidateRequest="false" %>
<skrip runat="server">
void submitBtn_Click(pengirim objek, EventArgs e)
{
Respon.Write(HttpUtility.HtmlEncode(inputTxt.Text));
}
</skrip>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<tubuh>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="inputTxt" Runat="server"
TextMode="MultiLine" Lebar="382px" Tinggi="152px">
</asp:Kotak Teks>
<asp:Button ID="submitBtn" Runat="server" Text="Kirim"
OnClick="kirimBtn_Click" />
</div>
</bentuk>
</tubuh>
</html>
Untuk melihat efek pengkodean HTML, silakan buat direktori virtual dan masukkan file-file tersebut ke dalamnya, jalankan halaman ini, masukkan beberapa kode HTML di kotak teks, dan klik tombol kirim. Misalnya, input berikut ditampilkan seperti biasa teks.
Jalankan skrip dan ucapkan hello <script>alert('hello');</script>
Jika Anda menghapus panggilan ke metode HtmlEncode dan cukup memasukkan konten teks, browser akan mengeksekusi kode dan memunculkan kotak prompt.
Menggunakan metode UrlEncode tidak aman Mengkodekan alamat URL
Jika Anda perlu mendapatkan parameter URL dengan bagian input pengguna, yang mungkin membawa risiko keamanan tertentu, gunakan metode HttpUtility.UrlEncode untuk mengkodekan string alamat
. ;
Langkah 4. Pernyataan SQL menggunakan metode parameter perintah.
Untuk menghindari serangan injeksi, silakan gunakan metode parameter SQL. Koleksi Parameter menyediakan deteksi tipe dan deteksi panjang nilai teks, dan database tidak akan mengeksekusi kode yang terkandung di dalamnya. Keuntungan tambahan menggunakan metode set parameter adalah Anda dapat secara ketat membatasi jenis dan panjang input jika jenis input berada di luar jangkauan pengecualian akan dipicu.
Saat memanggil prosedur tersimpan, gunakan set parameter
di bawah. Cuplikan kode menunjukkan contoh penggunaan set parameter saat memanggil prosedur tersimpan.
SqlDataAdapter myCommand = SqlDataAdapter baru("AuthorLogin",
koneksi saya);
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
SqlParameter parm = myCommand.SelectCommand.Parameters.Add(
"@LoginId", SqlDbType.VarChar, 11);
parm.Value = Login.Teks;
Gunakan kumpulan parameter saat membuat pernyataan SQL Anda sendiri.
Jika Anda tidak dapat menggunakan prosedur tersimpan, Anda masih dapat menggunakan kumpulan parameter, lihat kode di bawah.
SqlDataAdapter myCommand = SqlDataAdapter baru(
"PILIH au_lname, au_fname DARI Penulis WHERE au_id = @au_id", myConnection);
SQLParameter parm = myCommand.SelectCommand.Parameters.Add(
"@au_id" ,SqlDbType.VarChar, 11);
Parm.Value = Login.Teks;
Untuk informasi lebih lanjut tentang cara mencegah serangan injeksi SQL, lihat Cara: Melindungi Dari Injeksi SQL di ASP.NET.
Langkah 5. Untuk memverifikasi bahwa pesan kesalahan ASP.NET tidak dikembalikan ke klien,
Anda dapat menggunakan elemen <customErrors> . Untuk mengkonfigurasi klien, pesan kesalahan umum harus dikembalikan ke klien melalui mekanisme deteksi kesalahan program.
Harap konfirmasi bahwa Anda telah mengubah atribut mode di web.configmenjadi
"remoteOnly", berikut adalah contohnya
"remoteOnly">
Setelah menginstal program ASP.NET, Anda dapat menentukan halaman pesan kesalahan klien sebagai berikut.
<customErrors mode = "on" defaultRedirect = "YourErrorPage.htm">
Untuk sumber tambahan, silakan lihat topik terkait:
Cara menggunakan ekspresi reguler untuk membatasi input di ASP.NET.
Mencegah serangan injeksi SQL
dan mencegah serangan skrip lintas situs.
PS: Saya akhirnya selesai membacanya, capek sekali. Butuh waktu hampir tiga hari. Sebenarnya kalimat-kalimat ini sangat sederhana jika dilihat. Ini pertama kalinya saya melakukan terjemahan. Mohon maaf jika terjemahannya kurang bagus, terima kasih.