Bisakah Anda melewati pengguna / pass untuk HTTP Basic Authentication dalam parameter URL?

153

Saya percaya ini tidak mungkin, tetapi seseorang yang saya kenal bersikeras bahwa itu berhasil. Saya bahkan tidak tahu parameter apa yang harus dicoba, dan saya belum menemukan ini didokumentasikan di mana pun.

Saya mencoba http://myserver.com/~user=username&password=mypassword tetapi tidak berhasil.

Bisakah Anda mengkonfirmasi bahwa itu sebenarnya tidak mungkin untuk melewati pengguna / lulus melalui parameter HTTP (GET atau POST)?

ripper234
sumber
@ Sam - apa? Seperti apa bentuk URL lengkapnya?
ripper234
4
Semua dalam spec ietf.org/rfc/rfc1738.txt (3.1)
Smudge
@sam - Maaf, saya baru saja gagal menguraikan komentar Anda karena suatu alasan.
ripper234

Jawaban:

200

Memang tidak mungkin untuk meneruskan nama pengguna dan kata sandi melalui parameter kueri dalam autentikasi HTTP standar. Alih-alih, Anda menggunakan format URL khusus, seperti ini: http://username:[email protected]/- ini mengirimkan kredensial di tajuk "Otorisasi" HTTP standar.

Mungkin saja siapa pun yang Anda ajak bicara memikirkan modul atau kode khusus yang melihat parameter kueri dan memverifikasi kredensial. Ini bukan standar HTTP auth, meskipun, ini adalah hal yang khusus untuk aplikasi.

womble
sumber
1
Terima kasih, ini hanya apa yang saya cari ... itu tidak penting bahwa itu MENDAPATKAN parameter, hanya saja saya bisa memasukkannya ke dalam URL.
ripper234
42
FYI, http://username:[email protected]format tidak lagi didukung oleh IE atau Chrome , tidak akan terkejut jika orang lain mengikuti jika mereka belum melakukannya.
TJ Crowder
11
Sebenarnya berfungsi dengan baik di Chrome. Hanya IE yang menjadi anak nakal manja.
Damien Overeem ツ
1
@DamienOvereem versi chrome yang Anda pakai? Saya menggunakan mac os x 37 dan sepertinya tidak berfungsi untuk saya
Chris DaMour
11
Saya telah mengetahui bahwa Chrome menonaktifkannya untuk sementara waktu, tetapi mengaktifkan kembali fitur ini nanti. Saya juga mengetahui bahwa Safari akan melakukan kesalahan phising ketika menjalankan jenis tautan ini .. Pada dasarnya waktu otentikasi http berbasis url berakhir ..
Damien Overeem ツ
18

Melewati parameter otentikasi dasar di URL tidak disarankan

Ada bidang tajuk Otorisasi untuk tujuan ini, periksa di sini: daftar tajuk http

Cara menggunakannya ditulis di sini: Otentikasi akses dasar

Di sana Anda juga dapat membaca bahwa meskipun masih didukung oleh beberapa browser, solusi yang disarankan untuk menambahkan kredensial otorisasi Dasar di url tidak disarankan.

Baca juga bab 4.1 dalam RFC 2617 - Otentikasi HTTP untuk detail lebih lanjut tentang mengapa TIDAK menggunakan Otentikasi Dasar.


Melewati parameter otentikasi dalam string kueri

Saat menggunakan OAuth atau layanan autentikasi lainnya, Anda seringkali dapat mengirim token akses Anda dalam string kueri alih-alih dalam header otorisasi, jadi sesuatu seperti:

GET https://www.example.com/api/v1/users/1?access_token=1234567890abcdefghijklmnopqrstuvwxyzABCD
Melayu
sumber
Dan bagaimana cara mengenkripsi tajuk Otorisasi ke dalam URL?
womble
2
Bukankah itu formulir yang Anda nyatakan sudah usang?
womble
2
Pertanyaan yang Anda jawab dengan "Ada bidang tajuk Otorisasi untuk tujuan ini" menanyakan bagaimana cara memasukkan parameter otentikasi ke dalam URL . Jika Anda tidak bisa menyandikan bidang header HTTP ke URL (yang tidak bisa), jawaban Anda adalah non sequitur.
womble
Bisakah Anda menyebutkan di mana dalam standar URI mengatakan bahwa melewati parameter otentikasi dasar di URI sudah usang? RFC 2396 hanya mengatakan bahwa itu "TIDAK DIANJURKAN" karena rincian otentikasi dalam teks biasa, dalam banyak keadaan, bukan ide yang baik (yang saya setujui), sementara RFC 7235 tidak menyebutkan apa pun. Tidak ada dalam spesifikasi saya dapat mencari mengatakan bahwa itu sudah usang.
Kebohongan Ryan
1
@Wilt: Saya harus minta maaf, Anda memang benar. Petunjuk Anda bahwa spek "diubah" menghasut saya untuk menyelidiki lebih lanjut (RFC tidak pernah dimodifikasi setelah dipublikasikan / diberi nomor). Saya baru saja menemukan bahwa RFC 2396 sebenarnya telah digantikan oleh RFC 3986 , yang tidak dapat saya temukan sebelumnya. RFC 3986 tidak menyebutkan penghentian nama pengguna: sintaks kata sandi:Use of the format "user:password" in the userinfo field is deprecated.
Lie Ryan
17

http: // username: [email protected] akan berfungsi untuk FireFox, Chrome, Safari TAPI bukan untuk IE.

Basis Pengetahuan Microsoft

Girish Kumar
sumber
2
Kemampuan ini telah dihapus dari Chrome 19+. Lihat code.google.com/p/chromium/issues/detail?id=123150
Moshe Katz
4
Dengan membaca laporan bug itu, ia ditambahkan kembali ke Chrome 20. Tentu saja, saya berharap akan melihat banyak terus mengeluh tentang hal itu jika tidak.
womble
Sekarang saya memintanya untuk Internet Explorer: connect.microsoft.com/IE/feedback/details/873575/… . Kasus penggunaan yang sedikit berbeda, tetapi membahas masalah yang sama;)
SimonSimCity
@Diago jika kata sandi berisi '@' maka itu tidak berfungsi. itu memberikan kesalahan fatal, adakah yang bisa memberi tahu saya bagaimana kami bisa memberikan nama pengguna & kata sandi sekaligus
Ashish Jain
@AshishJain - Saya akan mencoba melarikan diri @di kata sandi sebagai %40. (Saya tidak tahu apakah itu berhasil, dan mungkin tergantung pada kombinasi server atau browser / server.)
David Moles
0

Sangat mungkin untuk mengirim string apa pun dalam parameter GET, meskipun tidak disarankan untuk mengirim login dan kata sandi karena dapat membuatnya sangat terlihat, terutama jika itu tidak ada dalam permintaan AJAX.

Namun Anda harus, kemudian kode halaman server untuk mengekstrak login dan kata sandi dan kemudian memvalidasi dan menggunakannya dengan cara apa pun yang diperlukan.

Steve Smith
sumber