หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
วิธีหนึ่งที่ใช้บ่อยที่สุดในการใช้เว็บแอปพลิเคชันคือการฝังฟังก์ชันการทำงานของเว็บแอปพลิเคชันไว้ในเว็บไซต์อื่น โดยปกติเว็บไซต์อื่นจะมีอยู่แล้ว แต่คุณต้องการเพิ่มความสามารถและเพิ่มฟังก์ชันใหม่ที่ทำงานกับข้อมูลของคุณที่แสดงผ่านแอปพลิเคชัน Power Pages
ในสถานการณ์นี้ เป็นการง่ายกว่าที่จะฝังฟังก์ชันการทำงานของไซต์ Power Pages ของคุณ แทนที่จะสร้างตั้งแต่เริ่มต้น บทความนี้อธิบายขั้นตอนในการฝังแอปพลิเคชัน Power Pages ในเว็บไซต์อื่นโดยใช้ iframe
ขั้นตอนที่ 1 เปิดใช้งานไซต์สำหรับ iframe
Iframe ถูกปิดใช้งานบนไซต์ Power Pages ใหม่ตามค่าเริ่มต้น เพื่อให้แน่ใจว่าไม่มีใครสามารถฝังเว็บไซต์ของคุณแบบภายนอกเพื่อพยายาม โจมตีแบบ "clickjacking"
ตั้งค่าส่วนหัวของการตอบกลับ HTTP คุณสามารถเลือกได้ทั้งคำสั่ง Content-Security-Policy (CSP) frame-ancestors (แนะนำ) หรือ X-Frame-Options
หมายเหตุ
Content-Security-Policy frame-ancestors ได้แทนที่ X-Frame-Options และเป็นวิธีการที่อธิบายไว้ในบทความนี้
ตั้งค่าไซต์เพื่อเปิดใช้งานส่วนหัว HTTP HTTP/Content-Security-Policy ข้อมูลเพิ่มเติม: ตั้งค่าส่วนหัว HTTP ในพอร์ทัล
ทำตามไวยากรณ์ที่อธิบายไว้ใน CSP: frame-ancestors เพื่อตั้งค่า
ตัวอย่างเช่น เพื่อเปิดใช้งานไซต์ Power Pages ที่สามารถฝังโดยใช้ iframe ในเว็บไซต์
www.contoso.comการตั้งค่าจะมีลักษณะดังนี้:Content-Security-Policy: frame-ancestors 'self' <https://www.contoso.com>;หมายเหตุ
สตริง
'self'มีความสำคัญ หากไม่มี ไซต์ Power Pages ไม่สามารถฝังหน้าของตนเองได้ ซึ่งโดยทั่วไปจำเป็นในสถานการณ์ต่างๆ เช่น เมนูแบบป็อปอัพโมดอลสำหรับฟอร์มพื้นฐานสิ่งสำคัญคือต้องจำกัดความสามารถในการฝังไซต์ Power Pages ใน iframe ไปยังไซต์เฉพาะ แทนที่จะใช้อักขระตัวแทน (*)
CSP ประกอบด้วยคำสั่งมากมายที่มีค่าขึ้นอยู่กับปัจจัยต่างๆ (เช่น จากตำแหน่งที่โหลดสคริปต์) บทความนี้ไม่ครอบคลุมข้อมูลนั้นเนื่องจากเป็นการใช้งานเฉพาะ อย่างไรก็ตาม เราขอแนะนำให้คุณทดสอบการตั้งค่านี้บนไซต์ที่ไม่ใช่การทำงานจริงก่อน ดูข้อผิดพลาดของคอนโซลเบราว์เซอร์เพื่อระบุปัญหาที่คุณต้องแก้ไข และปรับการตั้งค่า
ตั้งค่า SameSite ค่าเริ่มต้นเป็น ไม่มี สำหรับคุกกี้ของไซต์ Power Pages
แอตทริบิวต์ SameSite สำหรับคุกกี้มีประโยชน์ในการรักษาความปลอดภัยให้กับไซต์จากการโจมตี cross-site request forgery (CSRF) อย่างไรก็ตาม นี่ยังหมายความว่าไซต์ไม่สามารถฝังใน iframe ได้ในสถานการณ์ เช่น เมื่อไซต์ต้องมีการตรวจสอบสิทธิ์ผู้ใช้หรือมีส่วนประกอบแบบไดนามิก เช่น ฟอร์มหรือรายการ
ดังนั้น ในการฝังไซต์ Power Pages ใน iframe คุณต้องเปลี่ยนแอตทริบิวต์คุกกี้ SameSite สำหรับไซต์ Power Pages ของคุณเป็น ไม่มี เป็นค่าเริ่มต้น ข้อมูลเพิ่มเติม: การเปลี่ยนแปลงโหมด SameSite
หมายเหตุ
การทำเครื่องหมายคุกกี้ SameSite เป็น ไม่มี ไม่ทำให้ไซต์ Power Pages ของคุณเสี่ยงต่อการโจมตี CSRF เนื่องจาก Power Pages ใช้โทเค็นต่อต้าน CSRF เพื่อป้องกันการโจมตีเหล่านี้
ขั้นตอนที่ 2 ออกแบบไซต์ Power Pages ของคุณ
หลังจากคุณทำตามขั้นตอนก่อนหน้านี้แล้ว สิ่งที่คุณต้องทำเพื่อฝังประสบการณ์ไซต์ Power Pages ของคุณคือใช้ แท็ก HTML iframe เพื่อฝังทั้งไซต์หรือหน้าเฉพาะตามต้องการ
เราขอแนะนำให้ชื่อโดเมน Power Pages เป็นชื่อในระดับเดียวกันหรือชื่อรองของชื่อโดเมนของไซต์ที่คุณฝังไซต์ไว้ใน iframe ตัวอย่างเช่น หากเว็บไซต์รากของคุณคือ www.contoso.com ชื่อโดเมนของไซต์ Power Pages ควรเป็น portal.contoso.com นี่เป็นสิ่งสำคัญเพื่อให้แน่ใจว่าคุกกี้ที่ใช้โดยไซต์ Power Pages จะไม่ถูกจัดประเภทเป็น คุกกี้ของบุคคลที่สามและถูกบล็อกโดยเบราว์เซอร์ (บล็อก) มิฉะนั้น ฟังก์ชัน เช่น Captcha และการเปลี่ยนเส้นทางฟอร์มพื้นฐาน/ฟอร์มแบบหลายขั้นตอนอาจทำงานไม่ถูกต้อง ในการตั้งค่าชื่อโดเมนแบบกำหนดเองบนไซต์ Power Pages ของคุณ ไปที่ เพิ่มชื่อโดเมนที่กำหนดเอง
ขั้นตอนที่ 3 ส่วนหัวและส่วนท้ายของชื่อเรียก
คุณสามารถปรับเปลี่ยนลักษณะที่ปรากฏของส่วนหัวและส่วนท้ายได้หรือไม่ปรากฏเลยบนหน้าไซต์ Power Pages ที่ฝัง
เก็บส่วนหัวและส่วนท้ายของไซต์ที่ฝังไว้ไม่ให้แสดง
เป็นเรื่องปกติสำหรับไซต์หลักที่คุณต้องการฝังไซต์ Power Pages เพื่อให้มีส่วนหัวและส่วนท้ายอยู่แล้ว ในสถานการณ์ดังกล่าว คุณอาจไม่ต้องการแสดงส่วนหัวและส่วนท้ายของไซต์ที่ฝัง พิจารณาสถานการณ์ต่อไปนี้:
เมือไซต์ Power Pages ทั้งหมดถูกฝังใน iframe
ลบเนื้อหาของส่วนหัวและส่วนท้ายของคุณโดยอัปเดตเทมเพลตเว็บส่วนหัวและส่วนท้ายที่เกี่ยวข้องเมื่อหน้าไซต์ Power Pages เฉพาะถูกฝังใน iframe
โดยทั่วไป คุณไม่ต้องการแสดงส่วนหัวหรือส่วนท้ายของไซต์เมื่อคุณฝังหน้าเฉพาะในเว็บไซต์ อย่างไรก็ตาม คุณยังคงต้องการให้ส่วนหัวและส่วนท้ายพร้อมใช้งานเมื่อผู้ใช้ไปที่ไซต์โดยตรง คุณสามารถทำสิ่งนี้ได้โดยการแก้ไขส่วนหัวและส่วนท้ายเพื่อแสดงผลแบบไดนามิกตามเนื้อหาของหน้า
เพิ่มรหัสเงื่อนไขในส่วนหัวและส่วนท้าย
เทมเพลตเว็บส่วนหัวและส่วนท้ายรองรับการแก้ไข/ปรับปรุงตามคำสั่งแบบไม่ตายตัว ดังนั้นคุณสามารถเพิ่มโค้ดแบบมีเงื่อนไขเพื่อแสดงคุณสมบัติบางอย่างได้
ตัวอย่างเช่น โค้ดต่อไปนี้จะแสดงแถบค้นหาในส่วนหัว หากหน้านั้นเป็นหน้าอื่นที่ไม่ใช่หน้าค้นหา
สำคัญ
เนื่องจากส่วนหัวเป็นองค์ประกอบทั่วไปของทุกหน้า page.id จะได้รับแคชตามค่าเริ่มต้นสำหรับหน้าแรกที่ผู้ใช้เปิดขึ้น ดังนั้น รหัสนี้จึงใช้ แท็กทดแทน เพื่อให้แน่ใจว่าองค์ประกอบเหล่านี้จะไม่ถูกแคชและจะได้รับการประเมินตามหน้าปัจจุบันเสมอ
{% substitution %}
{% assign current_page = page.id %}
{% assign sr_page = sitemarkers[Search].id %}
{% if current_page == sr_page %}
{% assign section_class = section-landing-search %}
<section class=page_section section-landing-{{ current_page }} {{ section_class | h }} color-inverse\>
<div class=container\>
<div class=row \>
<div class=col-md-12 text-center\>
{% if current_page == sr_page %}
<h1 class=section-landing-heading\>{% editable snippets 'Search/Title' default:resx["Discover_Contoso"] %}\</h1\>
{% include 'Search' %}
{% endif %}
</div\>
</div\>
</div\>
</section\>
{% endif %}
{% endsubstitution %}
นอกจากการเพิ่มโค้ดแบบมีเงื่อนไขในส่วนหัวและส่วนท้ายแล้ว คุณยังสามารถพิจารณาวิธีการต่อไปนี้ได้อีกด้วย อย่างไรก็ตาม เราไม่แนะนำวิธีใดวิธีหนึ่ง ทั้งสองมีข้อจำกัด และไม่รองรับการทำงานเต็มรูปแบบ
- สำหรับสถานการณ์แบบอ่านอย่างเดียวที่ไม่มีรายการหรือฟอร์มใดๆ ให้ปิดใช้งานส่วนหัวและส่วนท้ายจากเทมเพลตของคุณ
- ใช้เทมเพลตการเขียนซ้ำแบบพิเศษ (
~/Areas/Portal/Pages/Form.aspx)