Kerusakan ini disebabkan oleh bug yang baru-baru ini ditemukan di Chrome - dan browser WebKit lainnya (!) * - yang secara khusus terkait dengan salah satu %%30%30
, %0%30
atau %%300
sebagai bagian dari URL, yang secara internal semua akhirnya mewakili simbol yang sama: null . Anda dapat membaca lebih lanjut tentang bug di sini .
Ini bukan bug yang memengaruhi sebagian besar tautan, jadi Anda biasanya tidak perlu khawatir melayang di atas tautan.
Catatan:
* Browser WebKit lainnya termasuk Safari, Opera, Steam Browser, Midori, S60 (Symbian), Browser Blackberry dan browser Playstation 3 - tetapi tidak Firefox, Internet Explorer atau Edge.
Sunting: Bug ini sekarang telah diperbaiki di Chrome 45.0.2454.101 seperti yang ditunjukkan Deltik .
Lebih banyak tentang apa yang terjadi
Masalahnya adalah berkaitan dengan canonicalizer URL , yang berjalan segera setelah Anda hover atas link - mungkin untuk menampilkan link di status bar browser, dan untuk prefetching halaman web sehingga beban lebih cepat setelah diklik.
Adapun peran URL canonicalizer:
Ketika sebuah URL ditulis HTML
, itu dapat ditulis dalam bentuk seperti /home
atau ../../home
, tetapi browser perlu menerjemahkan URL ini ke sesuatu dengan protokol dan domain juga, seperti http://superuser.com/home
. Lebih jauh lagi, URL dapat berisi URL Escapes yang perlu diterjemahkan , dan lolos ini adalah persen dikodekan , seperti %%30%30
. (Daftar URL yang lebih lengkap lolos di sini ).
Fungsionalitas yang menangani terjemahan URL ini adalah yang akhirnya mogok, karena menerima masukan yang tidak diharapkan / ditangani oleh pengembang.
Berikut ringkasan perubahan kode yang memperbaiki masalah:
Benar menangani lolos bersarang bermasalah di jalur URL.
Khususnya, jika tidak keluar dalam input mengarah ke URL output yang berisi urutan baru yang lolos, misalnya mengonversi input "%% 30% 30" menjadi "% 00", keluar dari '%' sebagai "% 25" untuk memastikan output urutan tidak diperlakukan sebagai urutan melarikan diri baru yang valid.
Ini memastikan bahwa kanonikkan URL yang sama untuk kedua kalinya tidak akan mengubahnya, yang penting untuk menghindari kerusakan dan bug lain di berbagai tempat di debug dan rilis build.