คำพูดวิเศษเป็นคำถามทั่วไปสำหรับ PHPer วันนี้ฉันเห็นบทความโดยบังเอิญ เมื่อรวมกับคู่มือ PHP และการตอบกลับ ฉันจะสรุปง่ายๆ ที่นี่
กล่าวโดยสรุป Magic quotes จะหลีกเลี่ยงข้อมูลที่ป้อนโดยอัตโนมัติเมื่อเปิดใช้งาน ในบรรดาเครื่องหมายเหล่านี้ เครื่องหมายคำพูดเดี่ยว (') เครื่องหมายคำพูดคู่ (") เครื่องหมายแบ็กสแลช และอักขระ NULL ทั้งหมดจะถูกหลีกเลี่ยง (มีการเพิ่มเครื่องหมายแบ็กสแลช) ที่จริงแล้ว การดำเนินการนี้จะเรียกใช้ฟังก์ชัน addslashes เป็น
หลัก
สะดวกและรวดเร็ว
ผู้ออกแบบ PHP จินตนาการถึงการเขียนโปรแกรมที่รวดเร็วและสะดวกสบายตั้งแต่เริ่มต้น เช่นเวลาแทรกฐานข้อมูล Magic quotes จะหนีข้อมูลโดยอัตโนมัติซึ่งสะดวกมาก
เหมาะสำหรับผู้เริ่มต้น
คำพูดวิเศษสามารถช่วยให้ผู้เริ่มต้นหลีกเลี่ยงความเสี่ยงด้านความปลอดภัยของสคริปต์ได้ในระดับหนึ่ง ตัวอย่างเช่น ในโค้ดที่ไม่มีมาตรการป้องกันใดๆ การเปิดราคา Magic จะช่วยลดความเสี่ยงต่างๆ มากมาย เช่น ปัญหาการแทรก แน่นอนว่าการใช้วิธีนี้เพียงอย่างเดียวไม่สามารถป้องกันปัญหาด้านความปลอดภัยดังกล่าวได้อย่างสมบูรณ์
“ฉันไม่ได้รับอนุญาตให้ปิดมัน”
แน่นอนว่าคุณอาจทราบปัญหานี้แล้ว แต่พื้นที่โฮสต์ไม่ได้อยู่ภายใต้การควบคุมของคุณอย่างสมบูรณ์
ทำไมไม่ใช้คำพูดวิเศษ
ความสามารถในการพกพา ไม่ว่าคุณสมบัตินี้จะเปิดใช้งานหรือไม่ก็ตาม มันจะส่งผลต่อความสามารถในการพกพาของสคริปต์เพราะมันส่งผลต่อการดำเนินการกรองข้อมูลในภายหลังของเรา
ปัญหาด้านประสิทธิภาพ ข้อมูลภายนอกทั้งหมดจะถูก Escape ก่อนที่จะถูกเรียกค้น ซึ่งจะส่งผลให้ต้นทุนรันไทม์เพิ่มขึ้นอย่างไม่ต้องสงสัย (และไม่จำเป็นต้องหลีกเลี่ยงข้อมูลทั้งหมด)
ทำให้เกิดความสับสน ดังที่กล่าวมาข้างต้น ไม่จำเป็นต้องหนีข้อมูลทั้งหมดออกไป สถานการณ์หนึ่งที่อาจเกิดขึ้นคือเมื่อคุณใช้ฟังก์ชัน stripslashes "บ้า" เพื่อรับข้อมูลที่ไม่ได้ใช้ Escape
ไม่รองรับ PHP6 อีกต่อไป
เห็นได้ชัดว่าผู้ออกแบบ PHP ได้ตระหนักถึง "ความผิดพลาด" ของพวกเขา ดังนั้นพวกเขาจึงเลิกใช้มันใน PHP6
วิธีปิดการใช้งานเครื่องหมายคำพูด Magic
ตามความเห็นของฉัน การใช้ไฟล์กำหนดค่า php.ini เพื่อปิดใช้งานราคา Magic ทั่วโลกนั้นน่าเชื่อถือที่สุด อ้างถึงโค้ดด้านล่าง
; เครื่องหมายคำพูด Magic;; เครื่องหมายคำพูด Magic สำหรับ GET/POST/Cookie data.magic_quotes_gpc = Off; เครื่องหมายคำพูด Magic สำหรับข้อมูลที่สร้างรันไทม์ เช่น ข้อมูลจาก exec() ฯลฯ Sybase -style magic quotes (escape ' with '' แทน ').magic_quotes_sybase = Off อย่างไรก็ตาม โฮสต์ออนไลน์อาจไม่อนุญาตให้คุณแก้ไขไฟล์ php.ini ดังนั้นคุณสามารถใช้ไฟล์ .htaccess เพื่อปิดการใช้งานและเพิ่ม รหัสต่อไปนี้
php_flag magic_quotes_gpc ปิด กระป๋องข้างต้น สำหรับโค้ดที่ย้ายข้อมูลจะต้องคงความสอดคล้องไม่ว่า magic_quotes จะถูกปิดใช้งานหรือไม่ จากนั้นโค้ดต่อไปนี้สามารถช่วยคุณได้
<?phpif (get_magic_quotes_gpc()) {function stripslashes_deep($value) {$value = is_array($value) ?array_map('stripslashes_deep', $value) :stripslashes($value);return $ ค่า;}$_GET = array_map('stripslashes_deep', $_GET);$_POST = array_map('stripslashes_deep', $_POST);$_COOKIE = array_map('stripslashes_deep', $_COOKIE);$_REQUEST = array_map('stripslashes_deep' , $_คำขอ);}