9toy
February 8, 2015, 11:43pm
1
[COLOR=#008000]** ย้าย Site จากเครื่องเก่า ไปยัง DA Error ด้านล่าง ขอคำแนะนำ ด้วยครับ **
http://www.yyyyy.com/pages/contact.php?content=contact[/COLOR]
[COLOR=#ff0000]=-=-= โค้ด Error บันทัดสุดท้าย ในส่วน include =-=-=
Warning: include(…/include/f.php) [function.include]: failed to open stream: No such file or directory in /home/yyyyy/domains/yyyyy.com/public_html/pages/contact.php on line 73
Warning: include() [function.include]: Failed opening ‘…/include/f.php’ for inclusion (include_path=’.:/usr/local/lib/php’) in /home/yyyyy/domains/yyyyy.com/public_html/pages/contact.php on line 73[/COLOR]
[COLOR=#0000ff]=-=-=-=-= บันทัดที่ Error contact.php =-=-=-=-
72 </table>
73 <? include “…/include/f$content.php” ; ?>
74[/COLOR]
ขอขอบคุณมากครับ
:875328cc:
แก้เป็น
[COLOR=#0000ff]<? include "../include/f{$_GET['content']}.php" ; ?>[/COLOR]
แต่จะบอกว่าเขียนแบบนี้ไม่ปลอดภัยนะ มันโดน hack เอาง่ายๆเลย
ลองลิสดูว่า ?content= เนี่ย มีค่าเป็นอะไรได้บ้าง
แล้วก็ใช้ switch case หรือ if , else เพื่อ include เอาดีกว่า
เช่น
if($_GET['content'] == 'contact')
include('..........php');
else if($_GET['content'] == 'another_page')
include('...another_page.php');
ปัญหาที่เกิดขึ้นคือ การตั้งค่าวิธีการ regis ตัวแปรใน PHP
ถ้าสมัยก่อน เขาจะอนุญาติให้ $_GET[‘content’] กลายเป็น $content ได้
(โดยมักจะเรียงตามความสำคัญ GPC (Get, Post, Cookie) มั้ง)
:d5f02ecd:
icez
February 8, 2015, 11:53pm
3
“บรรทัด”
เครื่องเก่าคุณเปิด register globals ไว้ ถึงได้เขียน code แบบมักง่ายแบบนั้นได้ครับ แต่ตาม code นั่นก็เปิดให้โดนเจาะสบายๆ เลย
วิธีแก้คือเปลี่ยนไปเรียกตัวแปรผ่าน $_GET แทนครับ แทรกไปบรรทัดก่อนบรรทัดนั้นก็ได้
<?php $content = $_GET[‘content’]; ?>
แต่ถ้ายังใช้ code นี้อยู่แล้วโดนเจาะก็ไม่รับรู้อะไรด้วยนะครับ… หลังจากรับค่าอะไรจาก get/post แล้ว ควรจะตรวจสอบค่าให้ดีๆ ให้แน่ใจว่าไม่มีอะไรแปลกปลอมมานะครับ
ทดลองแบบง่ายๆ : http://www.yyyyy.com/pages/contact.php?content=/../../../../../../../../../etc/passwd (น่าจะติด open basedir)
9toy
February 9, 2015, 10:34am
4
จะลองไล่แก้ไขดูครับ
ขอบคุณท่าน[COLOR=#000000][B]Minddragon[/B][/COLOR] ท่าน [COLOR=#000000][B]icez[/B][/COLOR] มากครับ:875328cc:
9toy
February 9, 2015, 10:57am
5
เป็นเว็บลูกค้าครับ ไม่ได้เขียนเอง ไล่[COLOR=#006400]แก้ไขตามท่าน icez บอก[/COLOR]
[COLOR=#ff0000]โดยแทก <?php $content = $_GET[‘content’]; ?> ไว้บรรทัดนั้น[/COLOR] [COLOR=#006400]ใช้งานได้แล้วครับ[/COLOR]
[COLOR=#0000cd]รบกวนขอคำสั่ง ให้แทรกลงในไฟล์ php อื่น ๆ ทีมีโค้ดนี้อยู่อีกหลายไฟล์ด้วยครับ?[/COLOR]
ตอนนี้อยากให้ Error หายก่อนครับ เป็นปกติเหมื่อนตอนอยู่ server เก่าก่อน หลังจากที่ย้ายเครื่อง
ส่วนเรื่องปัญหาเว็บจะโดน hack นั้น เดี๋ยวผม จะรีบแจ้งให้ เจ้าของเว็บให้ทราบ จะจ้างใครแก้ไขก็ค่อยว่ากันอีกที
kke
February 9, 2015, 7:36pm
6
หลัก security เบื้องต้นเลยคือ ห้าม include หรือ require ตัวแปล
ถ้าจำเป็นต้อง include ต้องมีการตรวจสอบตัวแปลที่รับมา ให้อยู่ในค่าที่กำหนดเท่านั้น ไม่งั้นโดนแฮกกันหนุกหนานเลย
แบบง่ายๆคือบังคับให้ส่งตัวแปลมาเป็นตัวเลขเท่านั้น แล้วเอาไปรวมกับ f .php เป็น f1.php f2.php f3.php แบบนี
<?php $content = intval($_GET[‘content’]); ?>
<? include “…/include/f$content.php” ; ?>