March 21, 2012

PHP: รับข้อมูลจาก form

ในครั้งก่อน ๆ จะเป็นการทำงานเฉพาะส่วนของ PHP ไม่มีการรับค่าจากผู้ใช้ ส่วนอันนี้จะพูดถึงการรับค่าจากผู้ใช้ผ่าน <form> ของ HTML กันบ้าง

การส่งค่าจาก <form> จะส่งมายังเซิฟเวอร์ได้ 2 แบบคือ
  • get: ข้อมูลจะถูกส่งผ่าน URL ทำให้มองเห็นได้ทุกคน และจำกัดปริมาณการส่ง
  • post: ข้อมูลที่ส่งจะมองไม่เห็น (ง่าย ๆ) และ (เกือบ) ไม่จำกัดปริมาณการส่ง (ขึ้นอยู่กับค่า post_max_size ในไฟล์ php.ini)
จะส่งค่าแบบใดนั้น ขึ้นอยู่กับข้อมูลที่จะส่ง ถ้าไม่เป็นความลับ หรือต้องการให้มีการคัดลอก URL แล้วเอาไปใช้ได้โดยไม่จำเป็นต้องกรอกข้อมูลอีกก็ใช้ get ไป แต่ถ้าข้อมูลนั้นเป็นความลับ หรือมีปริมาณมาก ๆ ก็ส่งผ่าน post โดยกำหนดค่า method ส่วน action คือไฟล์ .php ที่จะให้ประมวลผลข้อมูลจาก <form> อันนี้ ส่วนการนำค่ามาใช้งานนั้นจะใช้ผ่าน $_GET สำหรับ get และใช้ $_POST สำหรับ post ซึ่งเป็น associative array มี key เป็น name ของ <input> อันนั้น ๆ

ทั้ง $_GET และ $_POST ถือเป็นตัวแปรแบบ superglobal ที่เรียกใช้ได้ทุกที่ตลอดเวลา แตกต่างจากตัวแปรแบบ global ตรงที่ไม่ต้องใส่ global นำก่อนจะใช้งาน นอกจากนี้ยังมี $_REQUEST ที่เก็บค่าทั้งของ $_POST, $_GET และ $_COOKIE ไว้ด้วยกัน แต่เสี่ยงที่จะถูกโจมตี จึงไม่แนะนำให้ใช้

และสิ่งสำคัญอีกอย่างคือ ควรจะตรวจสอบความถูกต้อง (validation) ของค่าที่ได้จากผู้ใช้ และ/หรือแปลงค่า (cast) ให้ถูกต้องก่อนจะนำมาใช้งานเสมอ จะเต็มรูปแบบหรือคร่าว ๆ ก็แล้วแต่ความเหมาะสม และหากใช้ค่าที่รับมากับฐานข้อมูล หรือส่งต่อให้ระบบอื่น ๆ ควรจะเรียกใช้ฟังชั่น string escape ที่เกี่ยวข้องเสียก่อนทุกครั้ง ซึ่งจะป้องกันการโจมตีได้ระดับหนึ่ง

3 comments:

  1. โทษน่ะครับ คือ ตัว blog อ่านยากมากครับ
    พื้นหลังบวกกับตัวอักษรสีขาวบนพื้นดำ มันทำให้สายตาล้าอ่ะครับ (เอ๊ะ หรือผมเป็นคนเดียว - -')
    ขอติเท่านี้ครับ ส่วนเนื้อหาที่เขียนนี่ เอาสิบเต็มไปเลย ฮา

    ReplyDelete
    Replies
    1. ตอนแรกตั้งใจจะให้ได้อารมณ์ Terminal ครับเลยอยากจะใช้พื้นสีเข้ม ตัวอักษรสีอ่อน

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

      ป.ล. คำแนะนำ ติ (ชม) ไม่ใช่เรื่องผิด ไม่จำเป็นต้องขอโทษหรอกครับ : )

      Delete
  2. เนื้อหาเน้นไปด้านความปลอดภัยด้วยก็ดีนะครับ ผมเห็นคนพูดถึงเรื่องความปลอดภัยบ่อย แต่ก็มักจะพูดแค่คร่าว ๆ กลายเป็นว่า เหมือนไม่ได้อะไรเลย

    ขอบคุณมากครับ

    ReplyDelete