ช่องโหว่ เพียงแค่ใส่ target=“_blank”

พอดีว่าอ่านเจอบทความนี้ The target=”_blank” vulnerability by example รู้สึกช็อคขึ้นมาทันทีว่ามันง่ายๆขนาดนี้เลยหรอ?

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

<a href=”/new-link”>Open new link</a>

และถ้าอยากให้เปิดแท็ปใหม่ ก็เพียงใส่ target=“_blank” ลงไปแบบนี้

<a href="/new-link" target="_blank">Open new link</a>

ทีนี้ปัญหามันคือว่า เราสามารถเปลี่ยน url ต้นทางได้ โดยมีเงื่อนไขว่า url ต้นทาง ใส่ target=“_blank” แต่ไม่ได้ใส่ rel=“noopener” ตัว link url ให่ที่กดเปิด สามารถเปลี่ยน url ต้นทางได้ง่ายๆเลยแบบนี้

if (window.opener) {
window.opener.location = "http://devahoy.com/";
}

ซึ่งจริงๆ แทบทุกเว็บไซต์ยังไม่ได้แก้ไขช่องโหว่นี้เลย ไม่เชื่อลองกด ลิงค์นี้ ดูก็ได้ ซึ่งลิงค์ข้างล่างนี้ ผมให้มันเปิดแท็ปใหม่ พร้อมกับให้แท็ปนี้ redirect ไปเว็บ http://devahoy.com