คุณสามารถส่งผู้ใช้ / รหัสผ่านสำหรับการตรวจสอบสิทธิ์พื้นฐาน HTTP ในพารามิเตอร์ URL ได้หรือไม่


153

ฉันเชื่อว่ามันเป็นไปไม่ได้ แต่มีคนที่ฉันรู้ว่ามันใช้งานได้ ฉันไม่รู้ด้วยซ้ำว่าต้องลองพารามิเตอร์อะไรและฉันไม่พบเอกสารนี้เลย

ฉันลองhttp://myserver.com/~user=username&password=mypasswordแต่ไม่ได้ผล

คุณยืนยันได้หรือไม่ว่าในความเป็นจริงเป็นไปไม่ได้ที่จะส่งผู้ใช้ / ผ่านผ่านพารามิเตอร์ HTTP (GET หรือ POST)



@sam - อะไรนะ URL ที่สมบูรณ์จะมีลักษณะอย่างไร
ripper234

4
ทั้งหมดในข้อมูลจำเพาะietf.org/rfc/rfc1738.txt (3.1)
Smudge

@sam - ขออภัยฉันไม่สามารถแยกความคิดเห็นของคุณด้วยเหตุผลบางอย่าง
ripper234

คำตอบ:


199

เป็นไปไม่ได้ที่จะส่งชื่อผู้ใช้และรหัสผ่านผ่านพารามิเตอร์การสืบค้นใน HTTP auth มาตรฐาน แต่คุณใช้รูปแบบ URL พิเศษเช่นนี้: http://username:password@example.com/- ส่งข้อมูลประจำตัวในส่วนหัว HTTP "การอนุญาต" มาตรฐาน

เป็นไปได้ว่าใครก็ตามที่คุณกำลังพูดถึงกำลังคิดถึงโมดูลหรือรหัสที่กำหนดเองซึ่งดูพารามิเตอร์การสืบค้นและตรวจสอบข้อมูลรับรอง นี่ไม่ใช่การรับรองความถูกต้อง HTTP มาตรฐาน แต่เป็นสิ่งเฉพาะแอปพลิเคชัน


1
ขอบคุณนี่คือสิ่งที่ฉันกำลังมองหา ... มันไม่สำคัญว่ามันเป็นพารามิเตอร์ GET เพียงแค่ว่าฉันสามารถสร้างมันเป็น URL
ripper234

42
FYI http://username:password@example.comรูปแบบไม่ได้รับการสนับสนุนจากIEหรือChromeอีกต่อไปจะไม่แปลกใจถ้าคนอื่น ๆ ตามหลังชุดสูทหากพวกเขายังไม่ได้ทำ
TJ Crowder

11
ใช้งานได้จริงใน Chrome IE เท่านั้นที่เป็นเด็กเหลือขอใจแตก
Damien Overeem ツ

1
@DamienOver ชม Chrome รุ่นใดบ้าง ฉันใช้ mac os x 37 และดูเหมือนว่าจะไม่เหมาะกับฉัน
Chris DaMour

11
ฉันได้เรียนรู้ตั้งแต่แรกว่า Chrome ปิดการใช้งานเป็นระยะเวลาหนึ่ง แต่เปิดใช้งานคุณลักษณะนี้อีกครั้งในภายหลัง ฉันยังได้เรียนรู้ว่า Safari จะโยนข้อผิดพลาดฟิชชิ่งเมื่อใช้เป็นลิงก์ประเภทนี้โดยทั่วไปเวลาในการตรวจสอบความถูกต้องของ HTTP ที่อ้างอิง URL นั้นมากกว่า ..
Damien Overeem ツ

18

ไม่แนะนำให้ส่งพารามิเตอร์การตรวจสอบสิทธิ์พื้นฐานใน URL

มีฟิลด์ส่วนหัวการอนุญาตเพื่อจุดประสงค์นี้ตรวจสอบได้ที่นี่: รายการส่วนหัว http

วิธีใช้งานเขียนไว้ที่นี่: การตรวจสอบสิทธิ์การเข้าถึงพื้นฐาน

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

อ่านบทที่ 4.1 ใน RFC 2617 - การตรวจสอบความถูกต้อง HTTPสำหรับรายละเอียดเพิ่มเติมว่าทำไมไม่ใช้การตรวจสอบสิทธิ์พื้นฐาน


ผ่านพารามิเตอร์การตรวจสอบในสตริงแบบสอบถาม

เมื่อใช้ OAuth หรือบริการตรวจสอบสิทธิ์อื่น ๆ คุณมักจะสามารถส่งโทเค็นการเข้าถึงของคุณในสตริงการสืบค้นแทนที่จะเป็นในส่วนหัวการอนุญาตดังนั้นสิ่งที่ต้องการ:

GET https://www.example.com/api/v1/users/1?access_token=1234567890abcdefghijklmnopqrstuvwxyzABCD

และจะมีการเข้ารหัสส่วนหัวการอนุญาตไปยัง URL อย่างไร
womble

2
แบบฟอร์มที่คุณระบุไม่ได้ถูกยกเลิกหรือไม่
womble

2
คำถามที่คุณตอบ "มีเป็นข้อมูลส่วนหัวของการอนุญาตเพื่อการนี้" ถูกถามถึงวิธีการใส่พารามิเตอร์รับรองความถูกต้องใน URL หากคุณไม่สามารถเข้ารหัสฟิลด์ส่วนหัว HTTP ลงใน URL (ซึ่งคุณไม่สามารถทำได้) คำตอบของคุณคือไม่ใช่ลำดับ
womble

คุณสามารถอ้างอิงที่มาตรฐาน URI บอกว่าการผ่านพารามิเตอร์การรับรองความถูกต้องเบื้องต้นใน URI นั้นเลิกใช้แล้วหรือไม่ RFC 2396 บอกเพียงว่าเป็น "ไม่แนะนำ" เนื่องจากรายละเอียดการรับรองความถูกต้องในข้อความล้วนเป็นในหลาย ๆ กรณีไม่ใช่ความคิดที่ดี (ซึ่งฉันเห็นด้วย) ในขณะที่ RFC 7235 ไม่พูดถึง ไม่มีสเปคที่ฉันสามารถค้นหาบอกได้ว่ามันเลิกใช้แล้ว
โกหกไรอัน

1
@ ร่วงโรย: ฉันต้องขออภัยคุณถูกต้องแน่นอน คำใบ้ของคุณว่าข้อมูลจำเพาะถูก "แก้ไข" กระตุ้นให้ฉันตรวจสอบเพิ่มเติม (RFC ไม่เคยถูกแก้ไขเมื่อมีการเผยแพร่ / หมายเลข) ฉันเพิ่งพบว่า RFC 2396 ได้ถูกแทนที่โดยRFC 3986ซึ่งฉันไม่สามารถหาได้ก่อนหน้านี้ RFC 3986 ไม่พูดถึงการเลิกใช้ชื่อผู้ใช้: ไวยากรณ์รหัสผ่าน:Use of the format "user:password" in the userinfo field is deprecated.
Lie Ryan

17

http: // ชื่อผู้ใช้: password@example.comจะใช้งานได้กับ FireFox, Chrome, Safari แต่ไม่ใช่สำหรับ IE

ฐานความรู้ของ Microsoft


2
ความสามารถนี้ถูกลบออกจาก Chrome 19+ ดูcode.google.com/p/chromium/issues/detail?id=123150
Moshe Katz

4
จากการอ่านรายงานข้อผิดพลาดของฉันมันได้รับการเพิ่มกลับเข้าไปใน Chrome 20 แน่นอนฉันคาดหวังที่จะเห็นหลายคนยังคงบ่นเกี่ยวกับเรื่องนี้ถ้ามันไม่ได้
womble

ตอนนี้ผมขอมันสำหรับ Internet Explorer: connect.microsoft.com/IE/feedback/details/873575/... กรณีการใช้งานแตกต่างกันเล็กน้อย แต่แก้ไขปัญหาเดียวกัน;)
SimonSimCity

@Diago หากรหัสผ่านมี '@' รหัสนั้นจะไม่ทำงาน มันทำให้เกิดข้อผิดพลาดร้ายแรงทุกคนสามารถบอกฉันได้ว่าเราจะให้ชื่อผู้ใช้และรหัสผ่านพร้อมกันได้อย่างไร
Ashish Jain

@AshishJain - ฉันจะพยายามหลบหนีในรหัสผ่านเป็น@ %40(ฉันไม่รู้ว่าใช้งานได้หรือไม่และอาจขึ้นอยู่กับเซิร์ฟเวอร์หรือเบราว์เซอร์ / การรวมกันของเซิร์ฟเวอร์)
David Moles

0

เป็นไปได้ (ชัด) เป็นไปได้ที่จะส่งสตริงใด ๆ ในพารามิเตอร์ GET แม้ว่าจะไม่แนะนำให้ส่งการเข้าสู่ระบบและรหัสผ่านที่สามารถทำให้มองเห็นได้สูงโดยเฉพาะอย่างยิ่งถ้ามันไม่ได้อยู่ในคำขอ AJAX

อย่างไรก็ตามคุณจะต้องรหัสหน้าเซิร์ฟเวอร์เพื่อแยกการเข้าสู่ระบบและรหัสผ่านจากนั้นตรวจสอบและใช้พวกเขาในทางที่จำเป็น

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