Saat tautan ini ( http://a//%%30%30
) diklik di Google Chrome, Chrome merusak dan menutup semua tab dan instance.
Tetapi, dalam beberapa kasus saya hanya perlu mengarahkan kursor ke tautan, dan tab macet.
Apa yang terjadi ketika saya mengarahkan kursor ke tautan ini? Maksud saya, apa yang dilakukan Chrome saat tautan melayang?
google-chrome
crash
LINQ
sumber
sumber
Jawaban:
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, sepertihttp://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:
sumber
URL canonicalizer
, yang tampaknya mulai berjalan segera setelah Anda mengarahkan tautan, mungkin untuk menampilkan tautan di bilah status browser? Saya tidak bisa memberikan jawaban tertentu kepada Anda, namun ketika URL ditulis dalam HTML, mungkin ditulis dalam bentuk seperti/home
atau../../home
, tetapi browser perlu menerjemahkan URL ini ke sesuatu dengan protokol dan domain juga, sepertihttp://superuser.com/home
, jadi mungkin penanganan fungsionalitas itulah yang akhirnya mogok, karena menerima input yang tidak terduga?Seperti yang dikatakan Fabio Turati,
Namun, dari pos dan komentar Anda, saya pikir Anda lebih peduli tentang apakah Chrome terhubung ke tautan di latar belakang. Ya , begitu juga browser modern lainnya ( Firefox , Opera ). Anda mungkin ingin menonaktifkan prefetching di preferensi Chrome, atau menginstal uBlock Origin untuk mendapatkan lebih banyak pengaturan privasi.
sumber
Saya ingin memberikan klarifikasi lebih lanjut tentang apa yang sebenarnya terjadi di sini.
Pada dasarnya,% 30 adalah URL-kode 0, dan% 00 adalah URL-kode NULL (yang ditampilkan dalam biner sebagai 0000 0000). Jadi, jika Anda memiliki URL yang memiliki karakter penyandian bersarang yang akan diterjemahkan ke NULL, bug itu terjadi.
Chrome melakukan hal berikut ketika mengkanoniskan URL (sumber: https://code.google.com/p/chromium/issues/detail?id=533361#c13 ):
Jadi URL pertama dianggap valid, tetapi setelah menghapus data pribadi tertentu, itu tidak valid. Namun, setelah data itu dihapus, fungsi yang memanggil kode tertentu itu mengharapkan URL yang valid.
Sebagian alasan mengapa URL ini dianggap tidak valid adalah karena NULL digunakan dalam sejumlah perangkat lunak dan bahasa yang lebih lama untuk menunjukkan akhir suatu string (karena pada dasarnya 8 nol dalam satu baris, yang mudah dideteksi untuk komputer).
sumber