ย้าย site จากเครื่องเก่า Error Warning: include() [function.include]: Failed opening '../include/f.php

[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:

  1. “บรรทัด”

  2. เครื่องเก่าคุณเปิด register globals ไว้ ถึงได้เขียน code แบบมักง่ายแบบนั้นได้ครับ แต่ตาม code นั่นก็เปิดให้โดนเจาะสบายๆ เลย

  3. วิธีแก้คือเปลี่ยนไปเรียกตัวแปรผ่าน $_GET แทนครับ แทรกไปบรรทัดก่อนบรรทัดนั้นก็ได้

<?php $content = $_GET[‘content’]; ?>

  1. แต่ถ้ายังใช้ code นี้อยู่แล้วโดนเจาะก็ไม่รับรู้อะไรด้วยนะครับ… หลังจากรับค่าอะไรจาก get/post แล้ว ควรจะตรวจสอบค่าให้ดีๆ ให้แน่ใจว่าไม่มีอะไรแปลกปลอมมานะครับ

  2. ทดลองแบบง่ายๆ : http://www.yyyyy.com/pages/contact.php?content=/../../../../../../../../../etc/passwd (น่าจะติด open basedir)

จะลองไล่แก้ไขดูครับ
ขอบคุณท่าน[COLOR=#000000][B]Minddragon[/B][/COLOR] ท่าน [COLOR=#000000][B]icez[/B][/COLOR] มากครับ:875328cc:

เป็นเว็บลูกค้าครับ ไม่ได้เขียนเอง ไล่[COLOR=#006400]แก้ไขตามท่าน icez บอก[/COLOR]
[COLOR=#ff0000]โดยแทก <?php $content = $_GET[‘content’]; ?> ไว้บรรทัดนั้น[/COLOR] [COLOR=#006400]ใช้งานได้แล้วครับ[/COLOR]

[COLOR=#0000cd]รบกวนขอคำสั่ง ให้แทรกลงในไฟล์ php อื่น ๆ ทีมีโค้ดนี้อยู่อีกหลายไฟล์ด้วยครับ?[/COLOR]

ตอนนี้อยากให้ Error หายก่อนครับ เป็นปกติเหมื่อนตอนอยู่ server เก่าก่อน หลังจากที่ย้ายเครื่อง
ส่วนเรื่องปัญหาเว็บจะโดน hack นั้น เดี๋ยวผม จะรีบแจ้งให้ เจ้าของเว็บให้ทราบ จะจ้างใครแก้ไขก็ค่อยว่ากันอีกที

หลัก security เบื้องต้นเลยคือ ห้าม include หรือ require ตัวแปล
ถ้าจำเป็นต้อง include ต้องมีการตรวจสอบตัวแปลที่รับมา ให้อยู่ในค่าที่กำหนดเท่านั้น ไม่งั้นโดนแฮกกันหนุกหนานเลย

แบบง่ายๆคือบังคับให้ส่งตัวแปลมาเป็นตัวเลขเท่านั้น แล้วเอาไปรวมกับ f .php เป็น f1.php f2.php f3.php แบบนี

<?php $content = intval($_GET[‘content’]); ?>
<? include “…/include/f$content.php” ; ?>

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