ฉันต้องเข้าสู่ระบบ URL ที่เชื่อมโยงไปยังเว็บไซต์ของฉันใน Java Servlet
ฉันต้องเข้าสู่ระบบ URL ที่เชื่อมโยงไปยังเว็บไซต์ของฉันใน Java Servlet
คำตอบ:
มันมีอยู่ในHTTPreferer
ส่วนหัว คุณสามารถรับมันใน servlet ดังนี้:
String referrer = request.getHeader("referer"); // Yes, with the legendary misspelling.
อย่างไรก็ตามคุณต้องตระหนักว่านี่เป็นค่าที่ลูกค้าควบคุมและสามารถปลอมแปลงเป็นสิ่งที่แตกต่างอย่างสิ้นเชิงหรือถูกลบออกไป คุณไม่ควรใช้มันสำหรับกระบวนการทางธุรกิจที่สำคัญใด ๆ ในแบ็กเอนด์ แต่สำหรับการควบคุมงานนำเสนอเท่านั้น (เช่นการซ่อน / แสดง / เปลี่ยนบางส่วนเลย์เอาต์ที่บริสุทธิ์) และ / หรือสถิติ
สำหรับความสนใจภูมิหลังเกี่ยวกับการสะกดคำผิดที่สามารถพบได้ในวิกิพีเดีย
null
สามารถ
ที่จริงแล้วมันคือ:
request.getHeader("Referer")
หรือดียิ่งขึ้นและมั่นใจ 100%
request.getHeader(HttpHeaders.REFERER)
โดยที่ HttpHeaders อยู่com.google.common.net.HttpHeaders
getHeader(String name)
(อ้างถึง):"The header name is case insensitive."
org.apache.http.HttpHeaders
URL request.getRequestURL()
ที่จะถูกส่งผ่านในคำขอ:
หากคุณหมายถึงเว็บไซต์อื่นที่เชื่อมโยงกับคุณ คุณต้องการจับผู้อ้างอิง HTTP ซึ่งคุณสามารถทำได้โดยโทร:
request.getHeader("referer");
ตามที่ได้กล่าวมาทั้งหมดก็คือ
request.getHeader("referer");
ฉันต้องการเพิ่มรายละเอียดเพิ่มเติมเกี่ยวกับด้านความปลอดภัยของส่วนหัวอ้างอิงในทางตรงกันข้ามกับคำตอบที่ยอมรับ ในชีตชีต Open Web Application Security Project ( OWASP ) ภายใต้เอกสารการป้องกันการข้ามคำขอไซต์ (CSRF) Cheat ชีทกล่าวถึงความสำคัญของส่วนหัวอ้างอิง
สำคัญกว่าสำหรับการตรวจสอบ Same Origin ที่แนะนำนี้ไม่สามารถตั้งค่าส่วนหัวคำขอ HTTP ได้เนื่องจาก JavaScript อยู่ในรายการส่วนหัว 'ต้องห้าม' เฉพาะเบราว์เซอร์เท่านั้นที่สามารถตั้งค่าสำหรับส่วนหัวเหล่านี้ทำให้พวกเขาเชื่อถือได้มากขึ้นเพราะแม้แต่ช่องโหว่ XSS ก็ยังไม่สามารถใช้เพื่อแก้ไขได้
การตรวจสอบแหล่งที่มาที่แนะนำที่นี่ขึ้นอยู่กับส่วนหัวที่ได้รับการป้องกันทั้งสามเหล่านี้: แหล่งกำเนิดผู้อ้างอิงและโฮสต์ทำให้การป้องกัน CSRF ค่อนข้างแข็งแกร่งด้วยตัวเอง
คุณสามารถดูรายชื่อส่วนหัวของพระราชวังต้องห้ามที่นี่ ตัวแทนผู้ใช้ (เช่นเบราว์เซอร์) มีการควบคุมส่วนหัวอย่างเต็มที่ไม่ใช่ผู้ใช้