ฉันได้รับคำเตือนข้อความนี้ใน Netbeans 7.4 สำหรับ PHP ในขณะที่ฉันใช้$ _POST , $ _GET , $ _SERVER , ...
อย่าเข้าถึง Superglobal $ _POST Array โดยตรง
หมายความว่าอย่างไร? ฉันจะแก้ไขคำเตือนนี้ได้อย่างไร
แก้ไข:โค้ดตัวอย่างเหตุการณ์ยังคงแสดงคำเตือนนี้
ฉันได้รับคำเตือนข้อความนี้ใน Netbeans 7.4 สำหรับ PHP ในขณะที่ฉันใช้$ _POST , $ _GET , $ _SERVER , ...
อย่าเข้าถึง Superglobal $ _POST Array โดยตรง
หมายความว่าอย่างไร? ฉันจะแก้ไขคำเตือนนี้ได้อย่างไร
แก้ไข:โค้ดตัวอย่างเหตุการณ์ยังคงแสดงคำเตือนนี้
คำตอบ:
filter_input(INPUT_POST, 'var_name')
แทนที่จะ$_POST['var_name']
filter_input_array(INPUT_POST)
เป็น$_POST
$name = filter_input(INPUT_POST, $_POST["name"]);
.
filter_input(INPUT_POST, 'var_name', FILTER_SANITIZE_NUMBER_INT)
แม้ว่าจะช้าไปหน่อย แต่ฉันก็เจอคำถามนี้ในขณะที่ค้นหาวิธีแก้ปัญหาเดียวกันดังนั้นฉันหวังว่ามันจะช่วยได้ ...
พบว่าตัวเองอยู่ในความมืดมิดเช่นเดียวกับคุณ เพิ่งพบบทความนี้ซึ่งอธิบายคำแนะนำใหม่ ๆ ที่แนะนำใน NetBeans 7.4 รวมถึงคำแนะนำนี้:
https://blogs.oracle.com/netbeansphp/entry/improve_your_code_with_new
สาเหตุที่มีการเพิ่มเนื่องจาก superglobals มักจะเต็มไปด้วยอินพุตของผู้ใช้ซึ่งไม่ควรเชื่อถือแบบสุ่มสี่สุ่มห้า ควรทำการกรองบางประเภทแทนและนั่นคือสิ่งที่คำใบ้แนะนำ กรองค่า superglobal ในกรณีที่มีเนื้อหาที่เป็นพิษ
ตัวอย่างเช่นที่ฉันมี:
$_SERVER['SERVER_NAME']
ฉันใส่แทน:
filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)
คุณมี filter_input และตัวกรอง doc ที่นี่:
ฉันเห็นด้วยกับผู้ตอบคำถามคนอื่น ๆ ว่าในกรณีส่วนใหญ่ (เกือบตลอดเวลา) จำเป็นต้องล้างข้อมูลที่คุณป้อน
แต่พิจารณารหัสดังกล่าว (สำหรับคอนโทรลเลอร์ REST):
$method = $_SERVER['REQUEST_METHOD'];
switch ($method) {
case 'GET':
return $this->doGet($request, $object);
case 'POST':
return $this->doPost($request, $object);
case 'PUT':
return $this->doPut($request, $object);
case 'DELETE':
return $this->doDelete($request, $object);
default:
return $this->onBadRequest();
}
การใช้น้ำยาฆ่าเชื้อที่นี่จะไม่มีประโยชน์มากนัก (แม้ว่าจะไม่ทำลายอะไรก็ตาม)
ดังนั้นทำตามคำแนะนำ แต่ไม่ใช่สุ่มสี่สุ่มห้า - เข้าใจว่าเหตุใดจึงมีไว้เพื่อ :)
เพียงแค่ใช้
filter_input (INPUT_METHOD_NAME, 'var_name') แทน $ _INPUT_METHOD_NAME ['var_name'] filter_input_array (INPUT_METHOD_NAME) แทน $ _INPUT_METHOD_NAME
เช่น
$host= filter_input(INPUT_SERVER, 'HTTP_HOST');
echo $host;
แทน
$host= $_SERVER['HTTP_HOST'];
echo $host;
และการใช้งาน
var_dump(filter_input_array(INPUT_SERVER));
แทน
var_dump($_SERVER);
หมายเหตุ: ใช้กับตัวแปร Super Global อื่น ๆ ทั้งหมด
นี่คือส่วนหนึ่งของบรรทัดในรหัสของฉันที่ทำให้เกิดคำเตือนใน NetBeans:
$page = (!empty($_GET['p']))
หลังจากการค้นคว้าและดูว่ามีวิธีการกรองอาร์เรย์นี้กว่าพันล้านวิธีอย่างไรฉันก็พบว่ามีวิธีง่ายๆ และรหัสของฉันใช้งานได้และ NetBeans ก็มีความสุข:
$p = filter_input(INPUT_GET, 'p');
$page = (!empty($p))