อันตรายจากคำสั่ง include(); ใน PHP ใครมีประสบการณ์มาแชได้ครับ

หนังสือไทยเกือบทั้งหมดก็ว่าได้สอนมาครับ ลองเข้าเว็บบอร์ดเกี่ยวกับ programming ของไทยจะเจอโค๊ดคล้ายๆแบบนี้มากมายมหาศาล

ปล ไม่ว่าจะ include หรือ require ถ้าเขาอ้างจากตัวแปรมันก็ไม่ให้ผลต่างกันเลย และ include กับ require ให้ผลต่างกันในเรื่องความสำคัญของไฟล์ที่อ้างถึง

include ถ้าไม่เจอไฟล์จะไม่ error ครับ เป็นแค่ notice ธรรมดา
แต่ require ถ้าไม่เจอไฟล์จะหยุดการทำงานทันที

แต่การใช้งาน รูรั่วหรืออะไรพวกนี้ก็เหมือนกันครับ
ซึ่งปกติ… ผมก็ไม่เคยใช้ include ตัวแปรหรอก - -’

นี่คือวิธีที่ปลอดภัยที่สุดสำหรับการ include ค่าที่รับจากตัวแปรครับ

<?php
$page = $_GET["page"];
switch ($page) {
case 'main':
require("system/main.php");
break;
case 'other':
require("system/other.php");
break;
default:
require("system/error.php");
break;
}

อืม ผมหมายถึง กรอง quote ? php script tag อื่นๆที่ไม่ต้องการ และ url ออกจากค่าตัวแปรอะครับ
escape มันไม่ได้กรองออก
มันมีเช่น filter text ,อะไรพวกนั้นอะครับ (เห็นมาจากในหลายๆ coding ที่ไม่ใช่ opensource)
ตอนนี้กลัวเหมือนกัน ใช้แล้วเปิดเผยเด๋วคนจับไต๋ได้จบเลย
ผมก็ไม่ค่อยคล่องครับ ได้แต่ลอกเขามา

อันนี้เป็นตัวอย่างที่เห็นได้ชัดเจนเลยครับ ว่าการเปิด register_global on สามารถสร้างอันตรายได้ง่ายๆ
กับ code ที่คิดว่าเขียนไว้ดีแล้ว แต่จริงๆแล้วยังป้องกันไม่เพียงพอ ก็สามารถโดนได้ง่ายๆ โดยเฉพาะที่เป็น opensource
ดังนั้นตามที่บอกไปคือควรตั้ง register_global off ไว้ให้หมด แล้วไปไล่เปิดเป็น on เฉพาะเว็บที่ต้องการใช้จริงๆ

ทำแบบนี้ก็ตายกันพอดีครับ โปรแกรมบางอันเขียนไว้ไม่รองรับ register_globals = Off ครับ

[quote author=212cafe.com link=topic=11280.msg109494#msg109494 date=1210559546]
ทำแบบนี้ก็ตายกันพอดีครับ โปรแกรมบางอันเขียนไว้ไม่รองรับ register_globals = Off ครับ

[quote author=212cafe.com link=topic=11280.msg109494#msg109494 date=1210559546]
ทำแบบนี้ก็ตายกันพอดีครับ โปรแกรมบางอันเขียนไว้ไม่รองรับ register_globals = Off ครับ

ผมหมายถึงแก้โปรแกรมครับ ไม่ใช่แก้ค่า On/Off

[quote author=212cafe.com link=topic=11280.msg109505#msg109505 date=1210562397]
ผมหมายถึงแก้โปรแกรมครับ ไม่ใช่แก้ค่า On/Off

[quote author=kke link=topic=11280.msg109513#msg109513 date=1210564909]
อา อ่านแล้วเข้าใจผิดไป ขออภัย

:smash: :smash: :smash:
ทุบกันไปทุบกันมา หัวโนหมดแล้วเนี่ย

ต้องสั่ง shutdown -h now ก่อนครับ

ปลอดภัยแน่นอน เว้นแต่จะโดนโขมยเครื่อง อิอิ

โหยย มันมากๆ ขอบบอกต่อเลยครับ ขอรับความรู้ด้วยคน ขอบคุณครับ

เข้ามากอบโกย! เอ๊ย!!! ไม่ใช่ครับ เข้ามาเก็บเอาความรู้ :wub:

มือใหม่ขอถามครับ

โอ้วความรู้ใหม่ ขอบคุณครับ

เพิ่งตามอ่าน ครับ แล้ว
open_basedir ของ ตั้งค่ายังไงครับ

แบบนี้ครับ ง่ายๆ แต่ ปลอดภัย ระดับนึงครับ
ป้องกัน การเรียก inc/page1.php โดยไม่ได้รับอนุญาติ

จะตรวจสอบจริงๆ ใช้ ดีกว่าครับ

วิธีด้านล่างนี้ไม่แนะนำนะครับ และเห็นหลายๆ คนทำกัน
เพราะหากมีคนเรียก inc/page1.php แล้วรู้ตัวแปล แล้วส่งค่า get ไปตาม url ก็เรียก inc/page1.php เปิดดูได้เช่นกัน

<?
$lock = “lockkey”;
$ver = “lockkey”;

if($_GET[‘page’] ==‘chat’){

[quote author=mean link=topic=11280.msg165691#msg165691 date=1234982605]
แบบนี้ครับ ปลอดภัยมากขึ้นครับ

if($_GET[‘page’] ==‘chat’){

$lock = "lockkey";
$ver = "lockkey";

อันนี้ไว้เชคไฟล์ที่อยู่ ข้างในเว็บของเราจริงๆใช่ไหมครับ

งั้นถ้าเป็นพวก open source

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

เหมือนเทียบคีย์ พวก ไวเลส อะไรอย่างนี้

แล้วถ้าเจอ คนมัน บลูซฟอซ ล่ะทำอย่างไง(รึว่าไม่เกี่ยวกัน)

0