HttpServletRequest - cara mendapatkan URL pengarah?

144

Saya perlu mencatat URL yang terhubung ke situs saya di Java Servlet.

shane
sumber
Apakah saya mengerti Anda dengan benar bahwa jika saya menemukan situs Anda di google dan membuka tautannya, maka Anda login 'google.com'?
Roman

Jawaban:

310

Ini tersedia di header HTTPreferer . Anda bisa mendapatkannya di servlet sebagai berikut:

String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.

Namun, Anda perlu menyadari bahwa ini adalah nilai yang dikendalikan klien dan karenanya dapat dipalsukan untuk sesuatu yang sama sekali berbeda atau bahkan dihilangkan. Jadi, berapa pun nilainya, Anda tidak boleh menggunakannya untuk proses bisnis penting apa pun di backend, tetapi hanya untuk kontrol presentasi (misalnya menyembunyikan / menampilkan / mengubah bagian tata letak murni tertentu) dan / atau statistik.

Bagi yang berminat, latar belakang tentang kesalahan mengeja dapat ditemukan di Wikipedia .

BalusC
sumber
2
apakah itu membuat perbedaan "referer" & "Referer"?
ante.sabo
7
@ante: tidak, pencarian tajuk tidak peka huruf besar-kecil.
BalusC
2
Perhatikan bahwa sembarang header bisa null.
rds
@ BalusC Bagaimana jika saya membutuhkan dua url sebelumnya? Apakah mungkin?
Angel Cuenca
26

Sebenarnya ini :, request.getHeader("Referer")atau bahkan lebih baik, dan untuk menjadi 100% yakin request.getHeader(HttpHeaders.REFERER), di mana HttpHeaders beradacom.google.common.net.HttpHeaders

wpodgorski
sumber
11
Dari dokumentasi Java EE API untuk metode getHeader(String name)(kutipan):"The header name is case insensitive."
informatik01
7
tetap memilih untuk referensi HttpHeaders. Apache HTTP adalah satu lagi yang bagus:org.apache.http.HttpHeaders
Barett
16

URL yang lulus dalam permintaan: request.getRequestURL().

Jika Anda maksudkan situs lain yang menaut ke Anda? Anda ingin menangkap Pengarah HTTP, yang dapat Anda lakukan dengan menelepon:

request.getHeader("referer");
Chris K
sumber
6

Seperti yang telah disebutkan semua

request.getHeader("referer");

Saya ingin menambahkan beberapa detail tentang aspek keamanan header referer berbeda dengan jawaban yang diterima. Dalam lembar cheat Proyek Keamanan Aplikasi Web Terbuka ( OWASP ), di bawah Lembar Penipuan Penipuan Permintaan Situs (CSRF) disebutkan tentang pentingnya header referensi .

Lebih penting lagi untuk pemeriksaan Same Origin yang direkomendasikan ini, sejumlah header permintaan HTTP tidak dapat ditetapkan oleh JavaScript karena mereka berada di daftar header 'terlarang'. Hanya browser itu sendiri yang dapat menetapkan nilai untuk header ini, membuatnya lebih dapat dipercaya karena bahkan kerentanan XSS tidak dapat digunakan untuk memodifikasinya.

Sumber Asal cek yang direkomendasikan di sini bergantung pada tiga dari header yang dilindungi ini: Origin, Referer, dan Host, menjadikannya pertahanan CSRF yang cukup kuat.

Anda dapat merujuk daftar tajuk Terlarang di sini . Agen pengguna (yaitu: browser) memiliki kontrol penuh atas tajuk ini, bukan pengguna.

Don D
sumber