อะไรคือความซื่อสัตย์และคุณลักษณะของผู้ผสมข้ามพันธุ์?


362

Bootstrapcdn เพิ่งเปลี่ยนลิงค์ของพวกเขา ตอนนี้ดูเหมือนว่านี้:

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" 
rel="stylesheet" 
integrity="sha256-MfvZlkHCEqatNoGiOXveE8FIwMzZg4W85qfrfIFBfYc= sha512-dTfge/zgoMYpP7QbHy4gWMEGsbsdZeCXz7irItjcC3sPUFtf0kuFbDz/ixG7ArTxmDjLXDmezHubeNikyKGVyQ==" 
crossorigin="anonymous">

ทำอะไรintegrityและcrossoriginแอตทริบิวต์เฉลี่ย? พวกเขามีผลต่อการโหลดสไตล์ชีทอย่างไร

คำตอบ:


237

ทั้งสองแอ็ตทริบิวต์ถูกเพิ่มเข้ากับ Bootstrap CDN เพื่อนำSubresource Integrityมาใช้

Subresource Integrity กำหนดกลไกที่ตัวแทนผู้ใช้อาจตรวจสอบว่าทรัพยากรที่นำมาได้รับการจัดส่งโดยไม่ต้องจัดการที่ไม่คาดคิดการอ้างอิง

แอ็ตทริบิวต์ Integrityคือการอนุญาตให้เบราว์เซอร์ตรวจสอบซอร์สไฟล์เพื่อให้แน่ใจว่าโค้ดจะไม่ถูกโหลดถ้ามีการจัดการซอร์ส

แอตทริบิวต์ Crossoriginจะปรากฏขึ้นเมื่อมีการโหลดคำขอโดยใช้ 'CORS' ซึ่งขณะนี้เป็นข้อกำหนดของการตรวจสอบ SRI เมื่อไม่ได้โหลดจาก 'แหล่งกำเนิดเดียวกัน' ข้อมูลเพิ่มเติมเกี่ยวกับ crossorigin

รายละเอียดเพิ่มเติมเกี่ยวกับการใช้ Bootstrap CDNs


2
เพิ่งใช้เครื่องมือตรวจสอบ HTML w3c และได้รับข้อความนี้เมื่อใช้แอตทริบิวต์ "integrity":Attribute integrity not allowed on element link at this point.
Tomas Gonzalez

9
@TomasGonzalez ฉันคิดว่าคุณสามารถสรุปได้อย่างปลอดภัยว่าเครื่องมือ w3c ยังไม่ได้รับการอัปเดตเพื่อรวมการสนับสนุน SRI ไว้ด้วย
Josh_at_Savings_Champion

5
FYI: ยื่นข้อผิดพลาดกับตัวตรวจสอบด้วยเช่นกัน: github.com/validator/validator/issues/151
jonathanKingston

72
ผู้ดูแลของ W3C HTML Checker (aka validator) ที่นี่ ใช่ขอโทษผู้ตรวจสอบยังไม่ได้รู้อะไรเกี่ยวกับintegrityคุณลักษณะ แต่ฉันจะเพิ่มการสนับสนุนให้มันเร็ว ๆ นี้ตามที่ร้องขอในgithub.com/validator/validator/issues/151 ดังนั้นคุณอาจต้องการสมัครสมาชิกเพื่อรับการแจ้งเตือนเมื่อมีปัญหา
sideshowbarker

7
OnlineWebCheck.comรองรับintegrityคุณสมบัติ (ฉันเป็นผู้ดูแลของตัวตรวจสอบนั้น)
Albert Wiersch

112

integrity - กำหนดค่าแฮชของทรัพยากร (เช่นการตรวจสอบ) ที่จะต้องมีการจับคู่เพื่อให้เบราว์เซอร์ดำเนินการ แฮชทำให้แน่ใจว่าไฟล์นั้นไม่มีการแก้ไขและมีข้อมูลที่คาดไว้ วิธีนี้เบราว์เซอร์จะไม่โหลดทรัพยากร (เช่นที่เป็นอันตราย) ที่แตกต่างกัน ลองนึกภาพสถานการณ์ที่ไฟล์ JavaScript ของคุณถูกแฮ็คบน CDN และไม่มีทางรู้ได้ แอตทริบิวต์ integrity ป้องกันการโหลดเนื้อหาที่ไม่ตรงกัน

SRI ที่ไม่ถูกต้องจะถูกบล็อก (เครื่องมือสำหรับนักพัฒนาของ Chrome) โดยไม่คำนึงถึงการข้ามจุด ด้านล่างกรณีที่ไม่ใช่ CORS เมื่อแอตทริบิวต์ integrity ไม่ตรงกัน:

ป้อนคำอธิบายรูปภาพที่นี่

ความสมบูรณ์สามารถคำนวณได้โดยใช้: https://www.srihash.org/ หรือพิมพ์ลงในคอนโซล ( ลิงก์ ):

openssl dgst -sha384 -binary FILENAME.js | openssl base64 -A

crossorigin - กำหนดตัวเลือกที่ใช้เมื่อโหลดทรัพยากรจากเซิร์ฟเวอร์ในแหล่งกำเนิดอื่น (ดู CORS (การแบ่งปันทรัพยากรข้ามแหล่ง) ที่นี่: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS ) มันเปลี่ยนคำขอ HTTP ที่ส่งโดยเบราว์เซอร์ได้อย่างมีประสิทธิภาพ หากมีการเพิ่มแอตทริบิวต์“ crossorigin” จะส่งผลให้มีการเพิ่มจุดกำเนิด: <ORIGIN>คู่คีย์ - ค่าลงในคำขอ HTTP ดังที่แสดงด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

crossoriginสามารถตั้งค่าเป็น "ไม่ระบุชื่อ" หรือ "ใช้ข้อมูลรับรอง" ทั้งสองอย่างจะส่งผลให้เพิ่มที่มา:ลงในคำขอ หลังอย่างไรก็ตามจะให้แน่ใจว่ามีการตรวจสอบข้อมูลประจำตัว ไม่มีแอตทริบิวต์ crossorigin ในแท็กจะส่งคำขอโดยไม่มีจุดเริ่มต้น: คู่คีย์ - ค่า

นี่เป็นกรณีเมื่อร้องขอ“ use-credentials” จาก CDN:

<script 
        src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"
        integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" 
        crossorigin="use-credentials"></script>

เบราว์เซอร์สามารถยกเลิกการร้องขอได้หากตั้งค่าไขว้ไม่ถูกต้อง

ป้อนคำอธิบายรูปภาพที่นี่

ลิงค์
- https://www.w3.org/TR/cors/
- https://tools.ietf.org/html/rfc6454
- https://developer.mozilla.org/en-US/docs/Web/HTML / ธาตุ / การเชื่อมโยง

บล็อก
- https://frederik-braun.com/using-subresource-integrity.html
- https://web-security.guru/en/web-security/subresource-integrity


6
คำตอบที่มีประโยชน์มาก!
Emiel Koning

4
ขอบคุณสำหรับคำตอบ. ฉันรักรายละเอียดทางเทคนิค!
Anh Tran

เราจะบอกได้อย่างไรว่าความสมบูรณ์ของไฟล์นั้นยังไม่ถูกจัดการ? คำแนะนำใด ๆ?
vadi taslim

@ yon.fun: โปรดอย่าแนะนำการแก้ไขเพื่อเพิ่มลิงก์ของคุณเอง เราค่อนข้างอ่อนไหวต่อสแปมที่เป็นไปได้ที่นี่แม้ว่าเนื้อหาของคุณจะมีค่าก็ตาม
halfer

1

ในทางเทคนิคแล้วคุณสมบัติ Integrityช่วยในการตรวจสอบความถูกต้องของแหล่งข้อมูล นั่นคืออนุญาตให้เบราว์เซอร์ตรวจสอบหมายเลขในไฟล์ต้นฉบับที่ถูกต้องด้วยจำนวนเงินที่ร้องขอโดยไฟล์ต้นฉบับที่อยู่บนเซิร์ฟเวอร์ CDN

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

แอตทริบิวต์ Crossoriginช่วยให้นักพัฒนาเพิ่มประสิทธิภาพอัตราประสิทธิภาพ CDN ในเวลาเดียวกันปกป้องรหัสเว็บไซต์จากสคริปต์ที่เป็นอันตราย

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

ที่มา: https://yon.fun/what-is-link-integrity-and-crossorigin/

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