สวัสดีทุกท่านนะครับ นี่ก็ผ่านมากลางปีหลังของปี 2021 หรือปี 2564 แล้วนะครับ ทุก ๆ ท่าน สบายดีกันไหมครับ แอดวินหวังว่าทุกท่านคงจะสบายดีกันนะครับ ส่วนแอดวินยังสบายดี (มั้ง) ครับ เดินทางผจญภัยตลอดเกือบทุกวัน 555555555555555555555 😷
สำหรับครั้งนี้ แอดวินก็จะมาพูด มาอธิบาย เรื่องของ SOP
SOP ย่อมาจาก Same-origin Policy ซึ่งเป็นกลไกทางด้าน Security หรือด้านความปลอดภัยของเว็บเบราวเซอร์ (Browser) ที่จะจำกัดหรือห้ามไม่ให้ใช้ Origin โต้ตอบหรือโจมตีอีก Origin หนึ่งจากการใช้งานผ่านตัว Document หรือ Script
หรือกล่าวอีกแง่นัยหนึ่งแบบง่าย ๆ ที่ทุก ๆ คนน่าจะพอเข้าใจกัน นั่นก็คือ คื่อ คื้อออออออออออออออออออออออออออออออออ
.
.
.
Policy ที่ป้องกัน Javascript (JS) จากการเข้าถึง Resource ต่าง ๆ ที่เป็นของคนละ Origin หรือคนละเว็บไซต์นั่นเอง
แล้ว Origin นี้มันคืออะไร และจะแยกแยะยังไงนะ ???
แอดวินขอให้เปรียบเทียบ Origin ว่าคือเว็บไซต์หนึ่ง และการที่เว็บไซต์ทั้งสองจะมี Origin เหมือนกันได้จะต้องมีความเหมือนกันทั้ง Protocol, Port และ Domain
งั้นเรามาดูและพิจารณาจากตัวอย่างเพิ่มเติมกันครับ
ที่เว็บไซต์ดาต้าก… เอ้ย ดาต้าฟาร์ม ที่จะเป็น Origin หลักมีรายละเอียดดังนี้
Protocol: https
Domain: datafarm.co.th
Port: 443
วิธีการดูความเหมือนและความแตกต่างกันว่าเว็บไซต์หนึ่ง ๆ จะเป็น Origin เดียวกับเว็บไซต์ดาต้าฟาร์มหรือไม่ ดังนี้
แล้ว SOP จำเป็นไหม ทำไมต้องมี ???
โดยปกติแล้วตอนที่เว็บเบราว์เซอร์ส่งการร้องขอ HTTP (HTTP Request) จาก Origin หนึ่งหรือเว็บไซต์ A ไปยังอีก Origin หนึ่งหรืออีกเว็บไซต์ B พวก Session Cookies หรือสิ่งที่เกี่ยวข้องจะถูกส่งไปเป็นส่วนหนึ่งของการร้องขอ และการตอบกลับจากเว็บไซต์ B จะถูกสร้างภายใน Session นั้น ๆ รวมถึงข้อมูลต่าง ๆ ที่ระบุถึงและเกี่ยวข้องกับ Session นั้น ๆ
หากไม่มี Same-origin Policy หรือ SOP ณ. ขณะที่คนทั่วไปเผลอไปเข้าเว็บไซต์อันตรายของผู้ไม่หวังดีหรือเหล่า Hacker ตัวเว็บไซต์อันตรายนั้นจะสามารถอ่านอีเมลจากผู้ให้บริการ เช่น GMAIL หรือ ข้อความส่วนตัวจาก Facebook เป็นต้น หรือมิเช่นนั้นหลอกขโมยข้อมูลจากผู้ใช้งานแทน
แล้ว SOP จะมีการใช้งานตอนไหน เมื่อไหร่ อย่างไร ???
โดยปกติแล้ว Same-origin Policy หรือ SOP จะควบคุมการเข้าถึงที่โค้ด Javascript ที่มีการโต้ตอบหรือเข้าถึงเนื้อหาของ Domain อื่น ๆ ที่ถูกโหลดเข้ามา ซึ่งการโหลดจะเป็นพวกหน้าเว็บหรือ Resource ต่าง ๆ ของคนละ Domain ที่จะถูกอนุญาตอยู่แล้ว เช่น SOP จะอนุญาตให้โหลดรูปภาพของ Domain อื่น ๆ ผ่านแท็ก <img> SOP จะอนุญาตให้โหลดไฟล์ Video ผ่านแท็ก <video> และนอกจากนี้ SOP จะอนุญาตให้โหลด Javascript ของ Domain อื่น ๆ ผ่านแท็ก <script> ได้ แต่อย่างไรก็ตาม SOP จะไม่อนุญาตให้ Javascript ของหน้าเว็บไซต์หลักไปอ่านหรือเข้าถึงเนื้อหาของ Resource เหล่านั้นของ Domain อื่น ๆ ได้
เป็นยังไงบ้างครับ เมื่ออ่านมาถึงตรงนี้แล้ว ท่านผู้อ่านพอจะเข้าใจหรือเห็นภาพไหมครับ
ถ้าหากท่านผู้อ่านยังไม่เห็นภาพ แอดวินจะพาท่านผู้อ่านเข้าไปสู่ตัวอย่างการโจมตีเพื่อให้เข้าใจได้มากขึ้นถึงกลไกลทางด้าน Security หรือด้านความปลอดภัยของเว็บเบราวเซอร์ (Browser) ที่มีชื่อว่า SOP หรือ Same-origin Policy นั่นเองงงงงงงงงงงงงง
Lab เพื่อความเข้าใจ (รึ เปล่านะ 555+)
- นายเสี่ยตึ๋งดึงดาวท่องโลกยามราตรีผ่านเครือข่ายอินเตอร์เน็ต (อีกแล้วหรอ !!!) แล้วไปเจอเว็บไซต์หน้าสนใจเป็นเว็บชื่อชอบปี้ (Choppy) ที่มีรายการให้เลือกหลากหลายมากมาก แต่ก่อนที่นายเสี่ยตึ๋งดึงดาวจะเลือกซื้อรายการบริการได้นั้น เว็บไซต์ดังกล่าวได้ขอร้องให้นายเสี่ยตึ๋งดึงดาวล็อกอินเข้าระบบ Databank เพื่อที่จะได้สามารถเลือกซื้อและใช้จ่ายบริการได้
- นายเสี่ยตึ๋งดึงดาวด้วยความหลงในสินค้าที่สวยงามและหลากหลายของเว็บไซต์ชอปปี้ (Choppy) จึงกำลังจะกรอกชื่อผู้ใช้งานและรหัสผ่านลงไป และทันใดนั้นเอง ก่อนที่จะกดปุ่ม Login ด้วยความที่ว่านายเสี่ยตึ๋งดึงดาวเคยเป็นแหกเก… เอ้ย แฮกเกอร์รุ่นเก๋า จึงได้เกิดความสงสัยและลอง Debug ดู สุดท้ายก็พบว่าเว็บไซต์ชอบปี้ดังกล่าวเป็นเว็บไซต์หลอกลวงที่ได้มีการฝัง Javascript เพื่อขโมยข้อมูลบัญชีผู้ใช้งานและรหัสผ่าน (Username & Password)
จากโค้ด Javascript หลักการทำงานของมันก็คือว่า พยายามเข้าถึงช่องข้อมูลบัญชีผู้ใช้งานและรหัสผ่านของ Databank.iiio ผ่าน Nightlife.ko และ Log ออกมาผ่าน Console นั่นเอง แต่ในความเป็นจริง ผู้โจมตีคงไม่ได้ทำแค่ Log หรอกนะครับ ผู้โจมตีจะเข้าถึงข้อมูลดังกล่าวและนำส่งไปยังเว็บไซต์หรือระบบของผู้โจมตีเอง
แต่วะฮะฮ่า เว็บไซต์ชอปปี้ไม่สามารถที่จะขโมยข้อมูลบัญชีผู้ใช้งานและรหัสผ่านได้สำเร็จหรอก นั่นก็เพราะว่า SOP ได้ป้องกันเอาไว้นั่นเองตามข้อความ “Permission denied to access property “document” on cross-origin object”
โดยการป้องกันของ SOP ที่เป็นกลไกทางด้าน Security หรือด้านความปลอดภัยของเว็บเบราวเซอร์ จะแสดงข้อความผิดพลาดออกมาที่เป็นการบอกจากเว็บเบราวเซอร์ว่า ไม่อนุญาตให้เว็บไซต์ชอบปี้เข้าถึงข้อมูลหรือ Document ที่เป็นคนละ Origin หรือคนละเว็บไซต์ จึงส่งผลให้เว็บไซต์ชอบปี้ไม่สามารถขโมยข้อมูล Username และ Password ของเว็บไซต์ Databank ผ่าน Javascript ได้นั่นเอง
.
.
.
สุดท้ายนี้ แอดวินขอให้ทุก ๆ ท่านโชคดี ไม่เจ็บป่วย และรอดพ้นจากวิกฤติ Covid-19 หรือโรคโคโรนา หรือเจ้า SARS-CoV-2 ไปด้วยกันนะครับ อิอิ 😷
แอดวินขอตัวลากลับก่อน เดี๋ยวหมูไม่สุก สวัสดีครับ 🙏
อ้าว รี ๆๆๆ เอ้ย ลืม ๆๆๆ สำหรับท่านใดที่อยากศึกษาเพิ่มเติม สามารถเข้าไปดูและศึกษาเพิ่มเติมได้ที่
https://portswigger.net/web-security/cors/same-origin-policy
https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy