Server ส่งตัวแปล GET ที่มี http:// ไม่ได้

Server ส่งตัวแปล GET ที่มี http:// ไม่ได้

code ที่ทดสอบครับ

[code]<?php

echo $_GET[url];

?>[/code]

เช่น

abc.com/test.php?url=http://www.xxx.com

จะกลายเป็น 500 Internal Server Error nginx ทันทีครับ

แต่ถ้าเอา http:// จะปกติ

ลอง https:// ก็ใช้ได้

เวลาส่งค่าตัวแปลทุกอย่างถ้าขึ้นต้นด้วย http:// จะเป็นปัญหาทันที

แต่ถ้าอยู่ใน Sub domain จะสามารถทำงานได้ปกติ

ต้องตั้งค่า php หรือ server อะไรยังไงครับ


ตอนนี้ทำได้แล้วคือ แปลงระหัสเป็น http%3A%2F%2F

2 Likes

เพราะว่าที่ถูกตรง เวลาส่งพวกนี้ใน url ควรทำเป็น url encode ก่อนนะครับ (เช่น เว้นวรรคกลายเป็น %20) อะไรงี้ ไม่งั้นก่อปัญหาแน่นอน

เข้ารหัสค่าต่างๆเป็น base64_encode(), base64_decode() ก็ได้ครับ ปกติ joomla, wordpress ก็ใช้พวกนี้ แต่คำสั่งพวกนี้ต้องใช้อย่างระวัง ไม่งั้นอาจจะเป็นช่องให้โดน hack ได้