php การตรวจสอบที่ไร้รสชาติ การตรวจสอบความถูกต้องและการล้างข้อมูลโดยใช้ PHP การลงทะเบียนกฎการตรวจสอบของคุณเอง

เมื่อสร้างเว็บแอปพลิเคชัน สิ่งสำคัญคือต้องคำนึงถึงความปลอดภัยอย่างจริงจัง โดยเฉพาะอย่างยิ่งเมื่อคุณต้องจัดการกับการรับข้อมูลจากผู้ใช้

กฎความปลอดภัยทั่วไปคือการไม่ไว้วางใจใคร ดังนั้นคุณจึงไม่สามารถพึ่งพาผู้ใช้ให้ป้อนค่าที่ถูกต้องลงในแบบฟอร์มได้ตลอดเวลา ตัวอย่างเช่น แทนที่จะป้อนที่อยู่อีเมลที่ถูกต้องในฟิลด์ ผู้ใช้อาจป้อนที่อยู่ที่ไม่ถูกต้อง หรือแม้แต่ข้อมูลที่เป็นอันตรายบางอย่าง

เมื่อพูดถึงการตรวจสอบข้อมูลผู้ใช้ สามารถทำได้ทั้งบนฝั่งไคลเอ็นต์ (ในเว็บเบราว์เซอร์) หรือบนฝั่งเซิร์ฟเวอร์

ก่อนหน้านี้ การตรวจสอบฝั่งไคลเอ็นต์สามารถทำได้โดยใช้ JavaScript เท่านั้น แต่ทุกอย่างเปลี่ยนไป (หรือเกือบจะเปลี่ยนแปลง) เนื่องจากด้วยความช่วยเหลือของ HTML5 การตรวจสอบความถูกต้องจึงสามารถทำได้ในเบราว์เซอร์ โดยไม่จำเป็นต้องเขียนสคริปต์การตรวจสอบที่ซับซ้อนใน JavaScript

การตรวจสอบแบบฟอร์มโดยใช้ HTML5

HTML5 มีกลไกที่ค่อนข้างแข็งแกร่งโดยพิจารณาจากแอตทริบิวต์ของแท็กต่อไปนี้: ประเภท รูปแบบ และข้อกำหนด ด้วยแอตทริบิวต์ใหม่เหล่านี้ คุณสามารถโอนฟังก์ชันการตรวจสอบข้อมูลบางส่วนไปยังเบราว์เซอร์ได้

มาดูแอตทริบิวต์เหล่านี้เพื่อทำความเข้าใจว่าแอตทริบิวต์เหล่านี้สามารถช่วยตรวจสอบแบบฟอร์มได้อย่างไร

แอตทริบิวต์ประเภท

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

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

ลองเล่นกับค่าฟิลด์อีเมลในการสาธิตด้านล่าง

นอกจากนี้ยังมีประเภทฟิลด์มาตรฐานอื่นๆ เช่น และสำหรับตรวจสอบหมายเลข, URL และหมายเลขโทรศัพท์ ตามลำดับ

หมายเหตุ: รูปแบบหมายเลขโทรศัพท์จะแตกต่างกันไปในแต่ละประเทศ เนื่องจากจำนวนหลักในหมายเลขโทรศัพท์และรูปแบบที่แตกต่างกัน ด้วยเหตุนี้ ข้อมูลจำเพาะจึงไม่ได้กำหนดอัลกอริทึมสำหรับการตรวจสอบหมายเลขโทรศัพท์ ดังนั้นในขณะที่เขียนคุณลักษณะนี้เบราว์เซอร์จึงรองรับได้ไม่ดี

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

คุณลักษณะรูปแบบ

แอตทริบิวต์รูปแบบอาจทำให้นักพัฒนาส่วนหน้าจำนวนมากกระโดดด้วยความยินดี คุณลักษณะนี้ยอมรับนิพจน์ทั่วไป (คล้ายกับรูปแบบนิพจน์ทั่วไปของ JavaScript) ที่จะใช้เพื่อตรวจสอบความถูกต้องของข้อมูลที่ป้อนในฟิลด์

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

ปัจจุบันนิพจน์ทั่วไปรวมอยู่ในภาษาการเขียนโปรแกรมยอดนิยมส่วนใหญ่ เช่นเดียวกับภาษาสคริปต์ ตัวแก้ไข แอปพลิเคชัน ฐานข้อมูล และยูทิลิตี้บรรทัดคำสั่งหลายภาษา

นิพจน์ทั่วไป (RegEX) เป็นเครื่องมือที่มีประสิทธิภาพ กระชับ และยืดหยุ่นสำหรับการจับคู่สตริงข้อความ เช่น อักขระแต่ละตัว คำ หรือรูปแบบอักขระ

ด้วยการส่งนิพจน์ทั่วไปเป็นค่าของแอตทริบิวต์ pattern คุณสามารถระบุค่าที่ยอมรับได้สำหรับฟิลด์อินพุตที่กำหนด รวมทั้งแจ้งให้ผู้ใช้ทราบเกี่ยวกับข้อผิดพลาด

มาดูตัวอย่างการใช้นิพจน์ทั่วไปเพื่อตรวจสอบความถูกต้องของค่าของช่องป้อนข้อมูลกัน

หมายเลขโทรศัพท์

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

ตัวอย่างเช่น ในบางประเทศรูปแบบของหมายเลขโทรศัพท์คือ xxxx-xxx-xxxx และหมายเลขโทรศัพท์จะเป็นดังนี้: 0803-555-8205

นิพจน์ทั่วไปที่รูปแบบนี้ตรงกันคือ: ^\d(4)-\d(3)-\d(4)$ ในโค้ดสามารถเขียนได้ดังนี้:

หมายเลขโทรศัพท์:

ค่าแอตทริบิวต์ที่จำเป็นและตัวอักษรและตัวเลข

นี่คือแอตทริบิวต์บูลีนที่ใช้ระบุว่าต้องกรอกค่าของฟิลด์ที่กำหนดเพื่อส่งแบบฟอร์ม เมื่อคุณเพิ่มแอตทริบิวต์นี้ลงในฟิลด์ เบราว์เซอร์จะต้องให้ผู้ใช้กรอกข้อมูลในฟิลด์นี้ก่อนที่จะส่งแบบฟอร์ม

สิ่งนี้ช่วยให้เราไม่ต้องดำเนินการตรวจสอบฟิลด์โดยใช้ JavaScript ซึ่งสามารถช่วยนักพัฒนาประหยัดเวลาได้

ตัวอย่างเช่น: หรือ (สำหรับความเข้ากันได้ของ XHTML)

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

บทสรุป

การรองรับเบราว์เซอร์สำหรับการตรวจสอบแบบฟอร์มนั้นค่อนข้างดี และสำหรับเบราว์เซอร์รุ่นเก่า คุณสามารถใช้ polyfills ได้

เป็นที่น่าสังเกตว่าการอาศัยการตรวจสอบฝั่งเบราว์เซอร์เพียงอย่างเดียวนั้นเป็นอันตราย เนื่องจากผู้โจมตีหรือบอทสามารถข้ามการตรวจสอบเหล่านี้ได้อย่างง่ายดาย

ไม่ใช่เบราว์เซอร์ทั้งหมดที่รองรับ HTML5 และไม่ใช่ข้อมูลที่ส่งไปยังสคริปต์ของคุณจะมาจากแบบฟอร์มของคุณทั้งหมด ซึ่งหมายความว่าก่อนที่จะยอมรับข้อมูลจากผู้ใช้ในที่สุด จำเป็นต้องตรวจสอบความถูกต้องบนฝั่งเซิร์ฟเวอร์

จำเป็นอย่างยิ่งที่จะต้องมีการตรวจสอบอินพุตในแบบฟอร์มของคุณก่อนที่จะนำข้อมูลการส่งแบบฟอร์มไปประมวลผลต่อไป เมื่อมีหลายฟิลด์ในแบบฟอร์ม สคริปต์ตรวจสอบความถูกต้องของ PHP จะซับซ้อนเกินไป นอกจากนี้ เนื่องจากคุณกำลังทำการตรวจสอบแบบเดียวกันหรือคล้ายกันสำหรับแบบฟอร์มส่วนใหญ่ที่คุณสร้าง ความพยายามซ้ำซ้อนมากเกินไปจึงถูกใช้ไปกับการตรวจสอบความถูกต้องของแบบฟอร์ม

เกี่ยวกับสคริปต์ตรวจสอบแบบฟอร์ม PHP ทั่วไปนี้

สคริปต์ตรวจสอบแบบฟอร์ม PHP ทั่วไปนี้ทำให้การเพิ่มการตรวจสอบแบบฟอร์มของคุณเป็นเรื่องง่ายมาก

เราสร้างและเชื่อมโยงชุด "ตัวอธิบายการตรวจสอบ" กับแต่ละองค์ประกอบในแบบฟอร์ม “ตัวอธิบายการตรวจสอบ” คือสตริงที่ระบุประเภทของการตรวจสอบที่จะดำเนินการ ตัวอย่างเช่น “req” หมายถึงต้องระบุ “alpha” หมายถึงอนุญาตเฉพาะอักขระที่เป็นตัวอักษรและอื่นๆ

แต่ละฟิลด์ในแบบฟอร์มสามารถมีการตรวจสอบความถูกต้องได้ตั้งแต่หนึ่งรายการขึ้นไป ตัวอย่างเช่น ข้อมูลที่ป้อนไม่ควรว่างเปล่า ควรน้อยกว่า 25 ตัวอักษร ควรเป็นตัวอักษรและตัวเลข เป็นต้น

คุณสามารถเชื่อมโยงชุดคำอธิบายการตรวจสอบสำหรับแต่ละฟิลด์อินพุตในแบบฟอร์มได้

ดาวน์โหลดสคริปต์ตรวจสอบแบบฟอร์ม PHP

คุณสามารถดาวน์โหลดสคริปต์ตรวจสอบแบบฟอร์ม PHP ได้ที่ด้านล่างนี้:
ไฟล์ ZIP ประกอบด้วยสคริปต์ตรวจสอบแบบฟอร์ม formvalidator.php เอกสารประกอบ และตัวอย่างการใช้งาน

การใช้สคริปต์ตรวจสอบแบบฟอร์ม PHP
  • รวม formvalidator.php ในสคริปต์ประมวลผลแบบฟอร์มของคุณ
  • need_once "formvalidator.php"
  • สร้างวัตถุ FormValidator และเพิ่มตัวอธิบายการตรวจสอบแบบฟอร์ม
  • $validator = FormValidator ใหม่(); $validator->addValidation("ชื่อ", "req", "กรุณากรอกชื่อ"); $validator->addValidation("Email","email", "ข้อมูลสำหรับอีเมลควรเป็นค่าอีเมลที่ถูกต้อง"); $validator->addValidation("Email", "req", "กรุณากรอกอีเมล์");

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

  • ตรวจสอบแบบฟอร์มโดยการเรียกฟังก์ชัน ValidateForm()
  • if(!$validator->ValidateForm()) ( echo "ข้อผิดพลาดในการตรวจสอบ:"; $error_hash = $validator->GetErrors(); foreach($error_hash as $inpname => $inp_err) ( echo "

    $inpname: $inp_err

    \n"; ) ) ตัวอย่าง

    ตัวอย่างด้านล่างจะทำให้แนวคิดชัดเจนยิ่งขึ้น

    ชื่อ: อีเมล์:

    การเพิ่มการตรวจสอบแบบกำหนดเอง

    หากคุณต้องการเพิ่มการตรวจสอบแบบกำหนดเอง ซึ่งไม่ได้ระบุไว้โดยตัวอธิบายการตรวจสอบ คุณสามารถทำได้ นี่คือขั้นตอน:

  • สร้างคลาสสำหรับการตรวจสอบแบบกำหนดเองและแทนที่ฟังก์ชัน DoValidate()
  • คลาส MyValidator ขยาย CustomValidator ( function DoValidate(&$formars,&$error_hash) ( if(stristr($formars["Comments"],"http://")) ( $error_hash["Comments"]="ไม่อนุญาตให้ใช้ URL ในความคิดเห็น"; return false; ) return true; ) )

  • เพิ่มออบเจ็กต์การตรวจสอบแบบกำหนดเอง
  • $validator = FormValidator ใหม่(); $validator->addValidation("ชื่อ", "req", "กรุณากรอกชื่อ"); $validator->addValidation("Email","email", "ข้อมูลสำหรับอีเมลควรเป็นค่าอีเมลที่ถูกต้อง"); $validator->addValidation("Email", "req", "กรุณากรอกอีเมล์"); $custom_validator = MyValidator ใหม่(); $validator->AddCustomValidator($custom_validator);

    ฟังก์ชันการตรวจสอบแบบกำหนดเองจะถูกเรียกโดยอัตโนมัติหลังจากการตรวจสอบอื่นๆ

    ตารางตัวอธิบายการตรวจสอบ

    นี่คือรายการตัวอธิบายการตรวจสอบทั้งหมด:

    ตัวอธิบายการตรวจสอบการใช้งาน
    คำขอช่องนี้ไม่ควรเว้นว่าง
    แม็กซ์เลน=???ตรวจสอบความยาวข้อมูลที่ป้อนให้สูงสุด ตัวอย่างเช่น หากขนาดสูงสุดที่อนุญาตคือ 25 ให้ระบุตัวอธิบายการตรวจสอบเป็น "maxlen=25"
    มินเลน=???ตรวจสอบความยาวของสตริงที่ป้อนให้เหลือขั้นต่ำที่ต้องการ ตัวอย่าง “มินเลน=5”
    ศิษย์เก่าตรวจสอบข้อมูลว่ามีอักขระอื่นนอกเหนือจากอักขระตัวอักษรหรือตัวเลขหรือไม่
    alnum_sอนุญาตเฉพาะอักขระตัวอักษร ตัวเลข และช่องว่าง
    จำนวนตรวจสอบข้อมูลตัวเลข
    อัลฟ่าตรวจสอบข้อมูลตามตัวอักษร
    อัลฟ่า_sตรวจสอบข้อมูลตามตัวอักษรและเว้นวรรค
    อีเมลช่องนี้เป็นช่องอีเมลและตรวจสอบความถูกต้องของข้อมูล
    lt=???
    น้อยกว่า=???
    ตรวจสอบข้อมูลให้น้อยกว่าค่าที่ส่งผ่าน ใช้ได้กับช่องตัวเลขเท่านั้น
    ตัวอย่าง: หากค่าควรน้อยกว่า 1,000 ให้คำอธิบายการตรวจสอบเป็น “lt=1,000”
    GT=???
    มากกว่า=???
    ตรวจสอบข้อมูลให้มากกว่าค่าที่ส่ง ใช้ได้กับช่องตัวเลขเท่านั้น
    ตัวอย่าง: หากค่าควรมากกว่า 10 ให้คำอธิบายการตรวจสอบเป็น “gt=10”
    regexp=???ตรวจสอบด้วยนิพจน์ทั่วไปว่าค่าควรตรงกับนิพจน์ทั่วไป
    ตัวอย่าง: “regexp=^(1.20)$” อนุญาตให้มีอักขระตัวอักษรได้สูงสุด 20 ตัว
    อย่าเลือก=??ตัวอธิบายการตรวจสอบนี้ใช้สำหรับรายการอินพุตที่เลือก (รายการ) โดยปกติ กล่องรายการที่เลือกจะมีหนึ่งรายการว่า 'เลือกหนึ่งรายการ' ผู้ใช้ควรเลือกตัวเลือกอื่นที่ไม่ใช่ตัวเลือกนี้ หากค่าของตัวเลือกนี้คือ 'เลือกหนึ่ง' คำอธิบายการตรวจสอบควรเป็น "dontselect=Select One"
    อย่าเลือกตัวอธิบายการตรวจสอบนี้ใช้สำหรับกล่องกาเครื่องหมาย ผู้ใช้ไม่ควรเลือกช่องกาเครื่องหมายที่กำหนด ระบุค่าของช่องทำเครื่องหมายแทน ??
    ตัวอย่างเช่นdontselectchk=on
    ควรเลือกตัวอธิบายการตรวจสอบนี้ใช้สำหรับกล่องกาเครื่องหมาย ผู้ใช้ควรเลือกกล่องกาเครื่องหมายที่กำหนด ระบุค่าของช่องทำเครื่องหมายแทน ??
    ตัวอย่างเช่น shouldselchk=on
    อย่าเลือกวิทยุตัวบอกการตรวจสอบนี้ใช้สำหรับปุ่มตัวเลือก ผู้ใช้ไม่ควรเลือกปุ่มตัวเลือกที่กำหนด ระบุค่าของปุ่มตัวเลือกแทน ??
    ตัวอย่างเช่น Dontselectradio=NO
    เลือกวิทยุตัวบอกการตรวจสอบนี้ใช้สำหรับปุ่มตัวเลือก ผู้ใช้ควรเลือกปุ่มตัวเลือกที่กำหนด ระบุค่าของปุ่มตัวเลือกแทน ??
    ตัวอย่างเช่น selectradio=yes
    เซลมิน=??เลือกกล่องกาเครื่องหมายอย่างน้อย n จำนวนจากกลุ่มกล่องกาเครื่องหมาย
    ตัวอย่างเช่น: เซลมิน=3
    โดดเดี่ยวกำหนดให้กลุ่มวิทยุบังคับ ผู้ใช้ควรเลือกอย่างน้อยหนึ่งรายการจากกลุ่มตัวเลือก
    เท่ากัน=???เปรียบเทียบสององค์ประกอบในแบบฟอร์มและตรวจสอบให้แน่ใจว่าค่าเหมือนกัน เช่น 'รหัสผ่าน' และ 'ยืนยันรหัสผ่าน' แทนที่ ??? ด้วยชื่อขององค์ประกอบอินพุตอื่น
    ตัวอย่างเช่น: eqelmnt=confirm_pwd

    เราจะพูดถึงการตรวจสอบความถูกต้องของข้อมูล POST หรือ GET แม้ว่าโดยหลักการแล้ว สิ่งนี้สามารถนำไปใช้กับข้อมูลที่ได้รับโดยวิธีอื่น เช่น คุกกี้ ได้ด้วย เมื่อคุณพัฒนาเว็บแอปพลิเคชันใด ๆ คุณจะต้องเขียนอินเทอร์เฟซสำหรับการโต้ตอบกับผู้ใช้และสร้างรูปแบบต่าง ๆ ตามธรรมชาติเพื่อให้ผู้ใช้ส่งข้อมูลไปยังเซิร์ฟเวอร์ ตัวอย่างเช่น สิ่งเหล่านี้อาจเป็นความคิดเห็น ฉันคิดว่าทุกคนก็ชัดเจนแล้วว่าข้อมูลที่ได้รับต้องได้รับการตรวจสอบว่าสอดคล้องกับประเภท ขนาด และช่วงที่ระบุหรือไม่ ก่อนอื่นสิ่งนี้จำเป็นเพื่อความปลอดภัยของระบบ เว็บไซต์ หรือฐานข้อมูล เนื่องจาก... ข้อมูลที่ส่งอย่างไม่ถูกต้องหรือคำขอที่มีรูปแบบไม่ดีโดยเจตนาสามารถเปิดการเข้าถึงให้กับผู้โจมตีได้

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

    อย่าเชื่อถือข้อมูลที่ได้รับจากผู้ใช้ไม่ว่าจะด้วยข้ออ้างใด ๆ ไม่ว่าในกรณีใด ๆ มันเกิดขึ้นว่าเราขี้เกียจเกินไปที่จะเขียนโค้ดที่ตรวจสอบข้อมูลที่ได้รับอีกครั้ง หรือเราหวังว่าวิธีการตรวจสอบที่มีอยู่จะเพียงพอ ซึ่งเป็นผลมาจากการที่เราให้สัมปทานกับตัวเอง

    การพูดนอกเรื่องเล็กน้อยจากหัวข้อ:
    การทำงานในโครงการ การพัฒนาและเขียนโปรแกรมเว็บไซต์ สคริปต์ และระบบอื่นๆ ใช้เวลาว่างของฉันเกือบทั้งหมด (นอกเหนือจากเวลาทำงาน) กล่าวอีกนัยหนึ่ง ฉันทำงานนี้ตามจำนวนชั่วโมงสูงสุดที่เป็นไปได้ต่อวัน ในบางครั้งมีความจำเป็นต้องทดสอบบางสิ่งบางอย่าง เพื่อความสนุกสนานหรือเพียงเพื่อความอยากรู้อยากเห็น เป็นผลให้ไซต์ที่ทำขึ้นอย่างเร่งรีบโดยใช้เครื่องมือทำเองหรือ CMS เวอร์ชันโบราณ กลายเป็นหนูทดลองในห้องปฏิบัติการที่คล้ายกัน แน่นอนว่าทั้งหมดข้างต้นได้รับผลกระทบจากโค้ดที่เขียนคด ขาดการควบคุมข้อมูล และเต็มไปด้วยข้อบกพร่องต่างๆ ที่จริงแล้ว ในกรณีส่วนใหญ่ ในหนึ่งชั่วโมงของการทดลองบนเว็บไซต์ดังกล่าว ฉันพบช่องโหว่ร้ายแรงหลายประการ และส่วนใหญ่อยู่ในการตรวจสอบความถูกต้องของข้อมูลที่ได้รับไม่เพียงพอ ล่าสุดมักพบสิ่งนี้ในสคริปต์ที่ประมวลผลข้อมูล POST ที่ได้รับจาก JavaScript + Ajax

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

    ตามกฎแล้ว สคริปต์เหล่านี้บางส่วนกลับกลายเป็นว่าเต็มไปด้วยรู โดยที่พวกเขาสามารถสร้างรูที่ใหญ่ขึ้นและทำให้เปลือกของพวกมันท่วมโดยไม่ต้องใช้ความพยายามมากนัก แน่นอนเพื่อวัตถุประสงค์ในการทดลองเท่านั้นและไม่มีอะไรเพิ่มเติม (ฝ่ายบริหารของไซต์ดังกล่าวจะได้รับแจ้งถึงช่องโหว่ที่มีอยู่เสมอ)

    ฉันคิดว่าความสำคัญของการตรวจสอบนั้นชัดเจนสำหรับทุกคน เป็นเวลานานที่ฉันเขียนโค้ดชิ้นเดียวกันในแต่ละครั้ง จากนั้นใช้ฟังก์ชันการตรวจสอบข้อมูลของตัวเอง ซึ่งหลายฟังก์ชันมีความดั้งเดิมมากและตามกฎแล้วจะกระจัดกระจายในส่วนต่างๆ ของไฟล์ (รวมอยู่ด้วย) ในไม่ช้าฉันก็เริ่มทำความคุ้นเคยกับเฟรมเวิร์ก PHP Zend, CI, Kohana ซึ่งแต่ละเฟรมเวิร์กใช้คลาสของตัวเองในการตรวจสอบข้อมูลที่ฉันยืมมาสำหรับโครงการของฉัน ในท้ายที่สุด ฉันตัดสินใจปรับแต่งคลาส CI หนึ่งคลาสให้ตรงกับความต้องการของฉัน แต่กลับกลายเป็นว่าผู้เขียนบล็อกการเขียนโปรแกรมรายหนึ่งได้จัดการเรื่องนี้แล้ว ต่อไป ฉันจะแบ่งปันผลงานของเขา ซึ่งก็คือไลบรารี CodeIgniter ที่ได้รับการดัดแปลง

    ลองดูรหัสต่อไปนี้:

    ดูโค้ด PHP

    need_once "validator.class.php" ; $validator = เครื่องมือตรวจสอบใหม่() ; $validator -> set_rules ("name" , "ชื่อของคุณ" , array ("required" => , "alpha" => ) ) ; $validator -> set_rules ("email" , "Your email" , array ("required" => "Field %s is required" , "valid_email" => ) ) ; if ($validator -> run () ) ( echo "การตรวจสอบความถูกต้องเสร็จสมบูรณ์" ; ) else ( echo $validator -> get_string_errors () ; )

    ดังที่คุณเห็นจากตัวอย่าง ในบรรทัดแรก เราจะรวมไฟล์คลาสไว้ด้วย validator.calss.phpไปที่สคริปต์ของเรา ต่อไป เราจะสร้างอินสแตนซ์ของคลาสและบันทึกวัตถุลงในตัวแปร $ตัวตรวจสอบความถูกต้อง.
    แล้วใช้วิธี $validator->set_rules($ฟิลด์, $label, $rules)ตั้งค่าฟิลด์สำหรับการตรวจสอบ

    วิธีนี้ใช้พารามิเตอร์ 3 ตัว:

  • $ฟิลด์- ชื่อของฟิลด์การตรวจสอบ (ค่าของแอตทริบิวต์ชื่อในแท็ก)
  • $ฉลาก- ชื่อของฟิลด์การตรวจสอบจะถูกแทรกลงในข้อความแสดงข้อผิดพลาด
  • $กฎ- อาร์เรย์ของกฎการตรวจสอบ ซึ่งใช้กฎการตรวจสอบเป็นคีย์ และข้อความแสดงข้อผิดพลาดสำหรับกฎนี้ใช้เป็นค่า
  • หลังจากตั้งค่าฟิลด์สำหรับการตรวจสอบทั้งหมดแล้ว เราจะเปิดตัวเครื่องมือตรวจสอบโดยใช้วิธีการ $ตัวตรวจสอบ->รัน(). หากการตรวจสอบความถูกต้องสำเร็จ วิธีการนี้จะส่งคืนค่า จริงมิฉะนั้นหากมีข้อผิดพลาดก็จะส่งคืน เท็จ.

    มีสามวิธีในการรับข้อความแสดงข้อผิดพลาด:

  • get_string_errors()- ส่งคืนข้อความแสดงข้อผิดพลาดทั้งหมดเป็นสตริง
  • get_array_errors()— ส่งคืนข้อความทั้งหมดเป็นอาร์เรย์ โดยที่ใช้ชื่อฟิลด์เป็นคีย์ และใช้คำอธิบายข้อผิดพลาดสำหรับฟิลด์นี้เป็นค่า
  • form_error($ฟิลด์)- ส่งคืนข้อความแสดงข้อผิดพลาดสำหรับฟิลด์ที่ส่งเป็นพารามิเตอร์ $field
  • ตามค่าเริ่มต้น ข้อความแสดงข้อผิดพลาดจะรวมอยู่ในแท็ก . หากต้องการตั้งค่าการออกแบบของคุณ ให้ใช้วิธีนี้ set_error_delimiters($คำนำหน้า, $ต่อท้าย). ตัวอย่างเช่น:

    ข้อความแสดงข้อผิดพลาดจะปรากฏเป็น กองกับชั้นเรียน "ข้อผิดพลาด"

    อย่างที่คุณเห็นทุกอย่างง่ายมาก

    ดูโค้ด PHP

    $validator -> set_error_delimiters ( " " , " " ) ;

    หากต้องการตั้งกฎการตรวจสอบ คุณสามารถใช้วิธีการนี้ได้ set_rules($ฟิลด์)ส่งผ่านอาเรย์เชื่อมโยงหลายมิติ ลองดูตัวอย่าง:

    ดูโค้ด PHP

    $rules = array ( array ( "field" => "name" , "label" => "ชื่อของคุณ" , "rules" => array ( "required" => "ต้องระบุฟิลด์ %s" , "alpha" = > "ฟิลด์ %s ต้องประกอบด้วยตัวอักษรเท่านั้น" ) , อาร์เรย์ ( "field" => "email" , "label" => "อีเมลของคุณ" , "rules" => array ( "required" => "Field % s is required" , "valid_email" => "ฟิลด์ %s ต้องมีที่อยู่อีเมลที่ถูกต้อง" ) ) ) ; $validator -> set_rules ($กฎ ) ;

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

    ดังนั้นคลาสนี้รองรับกฎการตรวจสอบใดบ้าง

    ฉันนำกฎการตรวจสอบทั่วไปที่ทุกคนพบมาสู่ชั้นเรียนนี้ นี่คือรายการกฎเหล่านี้ทั้งหมด:

    ที่จำเป็นส่งคืน FALSE หากฟิลด์ว่างเปล่า
    จำนวนเต็มส่งกลับ FALSE หากค่าไม่ใช่จำนวนเต็ม
    ลอยส่งกลับ FALSE ถ้าค่าไม่ใช่ค่าตัวเลข
    valid_urlส่งคืน FALSE หากค่าไม่ใช่ URL ที่ถูกต้อง
    valid_emailส่งคืน FALSE หากค่าไม่ใช่ที่อยู่อีเมลที่ถูกต้อง
    valid_ipส่งคืน FALSE หากที่อยู่ IP ไม่ถูกต้อง
    ไม้ขีดส่งคืน FALSE หากองค์ประกอบไม่ตรงกับค่าขององค์ประกอบฟิลด์อื่น
    อัลฟ่าส่งคืน FALSE หากองค์ประกอบมีมากกว่าตัวอักษร
    valid_captchaส่งคืนค่า FALSE หากค่าในฟิลด์เซสชันไม่เท่ากับค่าของฟิลด์แบบฟอร์ม
    valid_dateส่งคืน FALSE หากองค์ประกอบมีวันที่ที่ไม่ถูกต้อง

    กฎเหล่านี้ส่วนใหญ่ใช้ตัวกรองซึ่งมีให้ใช้งานใน PHP 5

    หากคุณต้องการ คุณสามารถขยายชุดกฎสำหรับการตรวจสอบได้ตลอดเวลาโดยการเพิ่มฟังก์ชันที่จำเป็นให้กับคลาส Validator

    หากต้องการรับค่าข้อมูล POST ที่ประมวลผลแล้ว ให้ใช้วิธีการต่อไปนี้:

    ดูโค้ด PHP

    โดยทั่วไปแล้ว วิธีการนี้จะถูกเรียกเพื่อล้างแบบฟอร์มเมื่อประมวลผลแบบฟอร์มสำเร็จ

    สวัสดีตอนเย็นทุกคน (เหมือนตอนกลางคืน - หมายเหตุบรรณาธิการ) วันนี้เราจะปรับปรุงสิ่งนั้นเล็กน้อย ขั้นแรก มาเรียนรู้วิธีการตรวจสอบความถูกต้องของแบบฟอร์มใน PHP และดำเนินการจัดการด้านความปลอดภัย

    ดังนั้น ดูโค้ดด้านล่างและสังเกตการเปลี่ยนแปลงต่อไปนี้และเหตุผลของการเปลี่ยนแปลงต่อไปนี้ ฉันเน้นเส้นใหม่ทั้งหมดด้วยสี

    ชื่อของช่องแบบฟอร์มมีการเปลี่ยนแปลง คุณอาจถามว่าทำไมเราถึงต้องการสิ่งนี้? ง่ายๆ ฉันจะตอบคุณ เท่าที่ฉันรู้ สแปมบอทบางตัวค้นหาไซต์ต่างๆ โดยมองหาแบบฟอร์มและกรอกแบบฟอร์มตามชื่อของฟิลด์เหล่านี้ ตามทฤษฎีแล้วหากไม่พบคู่ที่ตรงกันก็จะกลับบ้านซึ่งเป็นสิ่งที่เราต้องการ แน่นอน ฉันไม่คิดว่าระดับของการป้องกันนี้จะดีเป็นพิเศษ แต่ก็จะไม่ทำร้ายเรา และหากอีเมลขยะลดลง 1 ตัวอักษร นั่นก็จะดี =)

    ตรวจสอบว่าป้อนที่อยู่อีเมลถูกต้องหรือไม่ บรรทัดที่ 17 ใช้โอเปอเรเตอร์ elseif ซึ่งจะถูกตรวจสอบว่าหากส่งคำตอบเชิงบวกกลับมาให้เราหรือไม่ นั่นคือมันบอกว่าที่อยู่อีเมลหายไปเลยนั่นคือไม่ได้ป้อน ที่นี่เราใช้ฟังก์ชัน preg_match ซึ่งช่วยให้เราสามารถเปรียบเทียบที่อยู่ที่ป้อนด้วย การแสดงออกปกติ. บางทีฉันจะเขียนสั้น ๆ เกี่ยวกับนิพจน์ทั่วไปในภายหลัง แต่ตอนนี้ก็คุ้มค่าที่จะรู้ว่านิพจน์ทั่วไปสร้างเทมเพลตประเภทหนึ่งที่ใช้ตรวจสอบสตริงของเรา และหากในกรณีของเราที่อยู่ที่ป้อนไม่ตรงกับนิพจน์ก็จะแสดงข้อผิดพลาดอีกครั้ง ตัวอย่างเช่น ต่อไปนี้เป็นนิพจน์ทั่วไปอีกสองสามรายการ:
    |^[-а-яе\s\.,;:\?!]+$|i– นิพจน์ทั่วไปนี้อนุญาตให้คุณใช้เฉพาะตัวอักษรรัสเซียและอักขระบางตัว เช่น ช่องว่าง จุด จุลภาค ฯลฯ
    #http://[-a-z0-9_.]+[-a-z0-9_:@&?=+,.!/~*’%$]*\.(html?|php)#i– และนิพจน์นี้ช่วยให้คุณตรวจสอบการสะกดที่ถูกต้องของที่อยู่บนอินเทอร์เน็ต

    ต่อไป เราใช้ตัวดำเนินการ else ซึ่งโค้ดสำหรับส่งจดหมายทั้งหมดของเราได้ถูกโอนไปแล้ว คุณสามารถสร้างกฎการยืนยันได้ด้วยตัวเองในปริมาณเท่าใดก็ได้ เพียงเพิ่มกฎใหม่ เช่น สำหรับการตรวจสอบที่อยู่อีเมล แล้วคุณจะพอใจ




    ผู้ติดต่อ:



    อีเมล์ติดต่อ:



    ข้อความ:






    นี่คือวิธีที่คุณสามารถตรวจสอบแบบฟอร์ม PHP ของคุณโดยไม่ต้องพึ่งสิ่งอื่นใดที่ไม่จำเป็น คราวหน้าในการโพสต์หัวข้อแบบฟอร์ม ฉันคิดว่าจะมีการพิจารณาการตรวจสอบความถูกต้องของแบบฟอร์มใน jQuery ด้วย ในระหว่างนี้ฉันกำลังรอความคิดเห็นและความปรารถนาของคุณ ราตรีสวัสดิ์และสวัสดีตอนเช้าทุกคน =)

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

    การตรวจสอบแบบฟอร์ม PHP

    คิดถึงความปลอดภัยเมื่อประมวลผลแบบฟอร์ม PHP!

    หน้าเหล่านี้จะแสดงวิธีการประมวลผลแบบฟอร์ม PHP โดยคำนึงถึงความปลอดภัย การตรวจสอบความถูกต้องของข้อมูลแบบฟอร์มเป็นสิ่งสำคัญในการปกป้องแบบฟอร์มของคุณจากแฮกเกอร์และผู้ส่งอีเมลขยะ!

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

    กฎการตรวจสอบสำหรับแบบฟอร์มข้างต้นมีดังนี้:

    กฎการตรวจสอบภาคสนาม
    ชื่อ ที่จำเป็น. + ต้องมีเฉพาะตัวอักษรและช่องว่างเท่านั้น
    อีเมล ที่จำเป็น. + ต้องมีที่อยู่อีเมลที่ถูกต้อง (มี @ และ .)
    เว็บไซต์ ไม่จำเป็น. หากมี จะต้องมี URL ที่ถูกต้อง
    ความคิดเห็น ไม่จำเป็น. ช่องป้อนข้อมูลหลายบรรทัด (พื้นที่ข้อความ)
    เพศ ที่จำเป็น. ต้องเลือกอย่างใดอย่างหนึ่ง

    ก่อนอื่นเราจะดูโค้ด HTML ธรรมดาสำหรับแบบฟอร์ม:

    ช่องข้อความ

    ช่องชื่อ อีเมล และเว็บไซต์เป็นองค์ประกอบการป้อนข้อความ และช่องความคิดเห็นคือพื้นที่ข้อความ รหัส HTML มีลักษณะดังนี้:

    ชื่อ:
    อีเมล:
    เว็บไซต์:
    ความคิดเห็น:

    ปุ่มวิทยุ

    ช่องเพศเป็นปุ่มตัวเลือกและโค้ด HTML มีลักษณะดังนี้:

    เพศ:
    หญิง
    ชาย
    อื่น

    องค์ประกอบแบบฟอร์ม

    รหัส HTML ของแบบฟอร์มมีลักษณะดังนี้: