HttpServletRequest - วิธีรับ URL อ้างอิง?


144

ฉันต้องเข้าสู่ระบบ URL ที่เชื่อมโยงไปยังเว็บไซต์ของฉันใน Java Servlet


ฉันเข้าใจคุณถูกต้องหรือไม่หากฉันพบเว็บไซต์ของคุณใน google และเปิดลิงก์จากนั้นคุณบันทึก 'google.com' หรือไม่
โรมัน

คำตอบ:


310

มันมีอยู่ในHTTPrefererส่วนหัว คุณสามารถรับมันใน servlet ดังนี้:

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

อย่างไรก็ตามคุณต้องตระหนักว่านี่เป็นค่าที่ลูกค้าควบคุมและสามารถปลอมแปลงเป็นสิ่งที่แตกต่างอย่างสิ้นเชิงหรือถูกลบออกไป คุณไม่ควรใช้มันสำหรับกระบวนการทางธุรกิจที่สำคัญใด ๆ ในแบ็กเอนด์ แต่สำหรับการควบคุมงานนำเสนอเท่านั้น (เช่นการซ่อน / แสดง / เปลี่ยนบางส่วนเลย์เอาต์ที่บริสุทธิ์) และ / หรือสถิติ

สำหรับความสนใจภูมิหลังเกี่ยวกับการสะกดคำผิดที่สามารถพบได้ในวิกิพีเดีย


2
มันสร้างความแตกต่าง "อ้างอิง" & "อ้างอิง"?
ante.sabo

7
@ante: ไม่การค้นหาส่วนหัวไม่ตรงตามตัวพิมพ์ใหญ่ - เล็ก
BalusC

2
โปรดสังเกตว่าส่วนหัวใด ๆ nullสามารถ
rds

@BalusC จะทำอย่างไรถ้าฉันต้องการ URL ก่อนหน้านี้สองรายการ มันเป็นไปได้ ?
Angel Cuenca

26

ที่จริงแล้วมันคือ: request.getHeader("Referer")หรือดียิ่งขึ้นและมั่นใจ 100% request.getHeader(HttpHeaders.REFERER)โดยที่ HttpHeaders อยู่com.google.common.net.HttpHeaders


11
จากเอกสาร Java EE API สำหรับวิธีการgetHeader(String name)(อ้างถึง):"The header name is case insensitive."
informatik01

7
โหวตขึ้นแล้วสำหรับการอ้างอิง HttpHeaders Apache HTTP เป็นอีกหนึ่งดี:org.apache.http.HttpHeaders
Barett

16

URL request.getRequestURL()ที่จะถูกส่งผ่านในคำขอ:

หากคุณหมายถึงเว็บไซต์อื่นที่เชื่อมโยงกับคุณ คุณต้องการจับผู้อ้างอิง HTTP ซึ่งคุณสามารถทำได้โดยโทร:

request.getHeader("referer");

6

ตามที่ได้กล่าวมาทั้งหมดก็คือ

request.getHeader("referer");

ฉันต้องการเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับด้านความปลอดภัยของส่วนหัวอ้างอิงในทางตรงกันข้ามกับคำตอบที่ยอมรับ ในชีตชีต Open Web Application Security Project ( OWASP ) ภายใต้เอกสารการป้องกันการข้ามคำขอไซต์ (CSRF) Cheat ชีทกล่าวถึงความสำคัญของส่วนหัวอ้างอิง

สำคัญกว่าสำหรับการตรวจสอบ Same Origin ที่แนะนำนี้ไม่สามารถตั้งค่าส่วนหัวคำขอ HTTP ได้เนื่องจาก JavaScript อยู่ในรายการส่วนหัว 'ต้องห้าม' เฉพาะเบราว์เซอร์เท่านั้นที่สามารถตั้งค่าสำหรับส่วนหัวเหล่านี้ทำให้พวกเขาเชื่อถือได้มากขึ้นเพราะแม้แต่ช่องโหว่ XSS ก็ยังไม่สามารถใช้เพื่อแก้ไขได้

การตรวจสอบแหล่งที่มาที่แนะนำที่นี่ขึ้นอยู่กับส่วนหัวที่ได้รับการป้องกันทั้งสามเหล่านี้: แหล่งกำเนิดผู้อ้างอิงและโฮสต์ทำให้การป้องกัน CSRF ค่อนข้างแข็งแกร่งด้วยตัวเอง

คุณสามารถดูรายชื่อส่วนหัวของพระราชวังต้องห้ามที่นี่ ตัวแทนผู้ใช้ (เช่นเบราว์เซอร์) มีการควบคุมส่วนหัวอย่างเต็มที่ไม่ใช่ผู้ใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.