Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menghalang Pengekodan URL daripada Mengubah Slash Berkod Peratusan dalam Permintaan GET?

Bagaimanakah Saya Boleh Menghalang Pengekodan URL daripada Mengubah Slash Berkod Peratusan dalam Permintaan GET?

Linda Hamilton
Lepaskan: 2025-01-05 03:38:43
asal
638 orang telah melayarinya

How Can I Prevent URL Encoding from Modifying a Percent-Encoded Slash in a GET Request?

Mengatasi Dilema Pengekodan URL Slash semasa Permintaan GET

Dalam percubaan untuk menghantar permintaan HTTP GET ke URL yang mengandungi peratusan yang dikodkan slash (/), seperti "http://example.com//," pendekatan biasa ialah menggunakan kelas WebClient sebagai berikut:

using (WebClient webClient = new WebClient())
{
  webClient.DownloadData("http://example.com/%2F");
}
Salin selepas log masuk

Walau bagaimanapun, kaedah ini menghasilkan hasil yang tidak dijangka. Watak slash akan berubah menjadi slash tambahan semasa penghantaran, yang membawa kepada permintaan berikut dihantar:

GET // HTTP/1.1
Host: example.com
Connection: Keep-Alive
Salin selepas log masuk

Isu ini timbul apabila menggunakan OCSP melalui HTTP/GET, yang memerlukan penghantaran / sebenar bukan '/ ' untuk memastikan pematuhan protokol.

Penyelesaian Berpotensi

Walaupun tidak ideal, coretan kod berikut membentangkan penyelesaian untuk isu ini:

Uri uri = new Uri("http://example.com/%2F");
ForceCanonicalPathAndQuery(uri);
using (WebClient webClient = new WebClient())
{
  webClient.DownloadData(uri);
}

void ForceCanonicalPathAndQuery(Uri uri){
  string paq = uri.PathAndQuery; // need to access PathAndQuery
  FieldInfo flagsFieldInfo = typeof(Uri).GetField("m_Flags", BindingFlags.Instance | BindingFlags.NonPublic);
  ulong flags = (ulong) flagsFieldInfo.GetValue(uri);
  flags &= ~((ulong) 0x30); // Flags.PathNotCanonical|Flags.QueryNotCanonical
  flagsFieldInfo.SetValue(uri, flags);
}
Salin selepas log masuk

Penyelesaian ini melibatkan pengubahsuaian bendera dalaman objek Uri untuk memaksa CanonicalPathAndQuery, memastikan bahawa aksara slash dikekalkan semasa penghantaran.

Penafian

Adalah penting untuk ambil perhatian bahawa pendekatan ini tidak dijamin serasi dengan versi rangka kerja akan datang. Sentiasa teruskan dengan berhati-hati apabila mengubah suai gelagat kelas dalaman.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghalang Pengekodan URL daripada Mengubah Slash Berkod Peratusan dalam Permintaan GET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan