Escape / Unescape ข้อความ
เตรียมข้อความให้ใส่ในโค้ดได้อย่างปลอดภัย ไม่ว่าจะเป็น JSON, SQL หรือคำสั่ง Shell
ผลลัพธ์จะแสดงที่นี่JSON ใช้ backslash นำหน้า และเปลี่ยนอักขระควบคุมเป็นรูปแบบ \u ตามมาตรฐาน RFC 8259
ประมวลผลในเบราว์เซอร์ของคุณทั้งหมด ข้อความไม่ถูกส่งขึ้นเซิร์ฟเวอร์
เกี่ยวกับเครื่องมือนี้
เครื่องมือ Escape / Unescape ข้อความ เตรียมข้อความให้นำไปวางในโค้ดได้อย่างปลอดภัย ไม่ว่าปลายทางจะเป็น JSON, JavaScript, SQL, คำสั่ง Shell, regular expression หรือไฟล์ CSV
เหตุผลที่ต้องแยกตามปลายทาง เพราะ แต่ละที่มีกฎไม่เหมือนกันเลย SQL ใช้การพิมพ์เครื่องหมายคำพูดซ้ำสองครั้ง ส่วน JSON ใช้ backslash และภายในเครื่องหมายคำพูดเดี่ยวของ shell กลับไม่มีอักขระพิเศษใด ๆ เลย เครื่องมือที่ escape ทุกอย่างเหมือนกันหมดจึงให้ผลผิดอย่างน้อยหนึ่งกรณีเสมอ
ความผิดพลาดตรงนี้ไม่ใช่แค่เรื่องความสวยงาม เครื่องหมายคำพูดที่ไม่ได้ escape ในคำสั่ง SQL คือช่องโหว่ SQL injection และจุดเดียวที่ไม่ได้ escape ใน regular expression ทำให้มันจับคู่กับอักขระอะไรก็ได้แทนที่จะเป็นจุดจริง ๆ
โหมด JavaScript ยัง แยกคำว่า </script> ออกจากกัน ให้อัตโนมัติ เพราะถ้าข้อความนั้นถูกวางในแท็ก script เบราว์เซอร์จะปิดแท็กทันทีตรงนั้น ซึ่งเป็นช่องโหว่ XSS ที่พบบ่อยที่สุดอย่างหนึ่ง ทุกอย่างทำงานในเบราว์เซอร์ ข้อความไม่ถูกส่งออก
วิธีใช้งาน
- 1เลือกว่าจะ "ใส่ escape" หรือ "ถอด escape"
- 2เลือกว่าข้อความนี้จะไปอยู่ในอะไร เช่น JSON, SQL หรือคำสั่ง Shell
- 3วางข้อความลงในช่อง ผลลัพธ์จะแสดงทันที
- 4คัดลอกช่อง "พร้อมวางลงในโค้ด" ถ้าต้องการเครื่องหมายคำพูดครอบมาให้เลย
คำถามที่พบบ่อย
- ทำไม SQL ถึงใช้เครื่องหมายคำพูดซ้ำสองครั้ง ไม่ใช่ backslash
- เพราะมาตรฐาน SQL กำหนดให้ escape เครื่องหมายคำพูดเดี่ยวด้วยการพิมพ์ซ้ำ (O''Brien) ส่วน backslash ไม่ใช่อักขระ escape ในมาตรฐาน การใช้ backslash จึงอาจใช้ไม่ได้หรือได้ผลไม่ตรงกันในแต่ละฐานข้อมูล
- การ escape ป้องกัน SQL injection ได้จริงไหม
- ช่วยได้ แต่ไม่ใช่วิธีที่ถูกต้องที่สุด วิธีที่ปลอดภัยกว่ามากคือใช้ prepared statement หรือ parameterized query ซึ่งแยกข้อมูลออกจากคำสั่งตั้งแต่ต้น เครื่องมือนี้เหมาะกับการเตรียมค่าคงที่หรือดูว่าค่าที่ถูก escape แล้วหน้าตาเป็นอย่างไร
- ทำไมโหมด JavaScript ถึงแยกคำว่า </script> ออกจากกัน
- เพราะถ้าข้อความมีคำว่า </script> อยู่ แล้วนำไปวางในแท็ก script เบราว์เซอร์จะปิดแท็กตรงนั้นทันที ทำให้โค้ดที่เหลือหลุดออกมาเป็น HTML ซึ่งเป็นช่องโหว่ XSS ที่พบบ่อย
- ทำไมโหมด Shell แทบไม่เปลี่ยนอะไรเลย
- เพราะภายในเครื่องหมายคำพูดเดี่ยวของ shell ไม่มีอักขระใดมีความหมายพิเศษเลย ทั้ง $ ` และ * จึงไม่ต้อง escape มีแค่ตัวเครื่องหมายคำพูดเดี่ยวเองที่ต้องใช้วิธีปิด-ใส่-เปิดใหม่
- ข้อความภาษาไทยต้อง escape ไหม
- ไม่ต้อง อักษรไทยไม่ใช่อักขระพิเศษในรูปแบบใดเลย เครื่องมือจึงปล่อยไว้ตามเดิมทุกโหมด