ภาษา PHP เบื้องต้น (5) การป้องกัน XSS

Web Development 12 กันยายน พ.ศ. 2566 372
Home / Articles / 61

สวัสดีครับในบทความนี้ผมจะพามารู้จักกับช่องโหว่ Cross-Site Scripting (XSS) โดยหลักๆ คือการ ที่ผู้ไม่ประสงค์ดีแทรกโค้ด Javascript เข้าไปทำงาน ในเว็บไซต์ ซึ่งเป็นการแทรก <script></script> หรือ <body onload=""> และ attributes อื่นๆ เช่น onmouseover onerror เป็นต้น

ความอันตรายของมัน ก็คือ มันสามารถเข้าถึงข้อมูล Cookie ภายใน Web Browser ของผู้ใช้ได้ และอาจส่งข้อมูลดังกล่าวออกไปภายนอก สามารถเปลี่ยนแปลงหน้าเว็บทั้งเว็บ หรือข้อมูลบางส่วนได้

ประเภทของ XSS

หากเว็บไซต์รับ Input จากผู้ใช้ผ่าน GET parameter หรือผ่าน HTML Form มาแสดงบนเว็บไซต์ แต่ไม่ได้เก็บข้อมูลดังกล่าวลงในฐานข้อมูล จำเป็นต้องแทรกโค้ดไปด้วยเท่านั้น เช่น ?name=<script>alert();</script> แบบนี้จะเรียกว่า "Reflected XSS"

หากเว็บไซต์รับ Input จากผู้ใช้ผ่าน GET parameter หรือผ่าน HTML Form มาเก็บลงในฐานข้อมูล และดึงข้อมูลจากฐานข้อมูล มาแสดงบนเว็บไซต์โดยสาธารณะ และบังเอิญว่ามีผู้ไม่หวังดีใส่ <script>...</script> เข้าไป โค้ดดังกล่าวก็จะถูกดึงมาทำงานทุกครั้งที่เรียกข้อมูลดังกล่าวออกมาจากฐานข้อมูล แบบนี้เรียกว่า "Stored XSS"

การป้องกัน XSS

ในการป้องกันการถูก XSS บน PHP สามารถทำได้ง่ายๆ โดยได้เลือกใช้ฟังก์ชั่นใดก็ได้ จากสองฟังก์ชั่นนี้ นั่นก็คือ htmlentities() หรือ htmlspecialchars() สองฟังก์ชั่นนี้แตกต่างกันไม่มาก และสามารถนำมาใช้ป้องกัน XSS ได้เช่นเดียวกัน

วิธีการใช้ก็คือการนำฟังก์ชั่นมาครอบส่วนที่กำลังจะแสดงข้อมูลเอาไว้ เช่น

$name = $_GET['name'];
echo htmlentities($name);

อ้างอิง:

owasp.org/www-community/attacks/xss/

Profile Picture.
  • Name (Pen name): Sunny Jirakit (Sunny420x)
  • Study: Bachelor Degree of Computer Science from Chiang Mai Rajabhat University
  • Personality: Architect (INTJ-T)
  • Experience: JavaScript,  Angular.js, React.js, Next.js  Express.js, Unity C#, Socket.io