แสดงบทความที่มีป้ายกำกับ PHP แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ PHP แสดงบทความทั้งหมด

2/08/2562

วิธีการ Update PHP ของ AppServ เพื่อความปลอดภัย

สวัสดีครับ ช่วงนี้กำลังเป็นประเด็นหนาหูเกี่ยวกับ hacker กลุ่มที่ผมสังกัดอยู่เลย
เกี่ยวกับการยิง Apache 2.2 ที่ติดมากับ AppServ 2.5.10 (ตัวล่าสุดนั่นแหละ)
ซึ่งผลกระทบส่วนใหญ่ จะเป็นเว็บ IP Bonus ฟรี และเว็บเซิฟเวอร์เถื่อน และเว็บอื่นๆ ที่ใช้
AppServ 2.5.10 หรือต่ำกว่านั่นเองครับ (IP Bonus หลายเว็บที่ทางทีมผมทดสอบยิง ก็ยิงได้เกือบทุกเว็บเลย)

ซึ่งวิธีการ มันก็ง่าย จนใครหลายคนคาดไม่ถึงแหละครับ เป็น PHP Injection ธรรมดาๆ
(ส่วนนึงก็เกิดจากความประมาทของผู้เขียน script ด้วย แต่นั่นไม่ใช่ประเด็น)

โดยส่วนตัวแล้ว หากเป็น Windows Server ผมจะแนะนำให้ใช้ IIS มากกว่า (แนะนำ 7.5 บน 2008 R2)
ซึ่งเซิฟเวอร์ของ tah club เอง ก็ใช้ IIS 7.5 เช่นกันครับ แต่หลายๆ ท่าน ซึ่งอาจจะไม่มีความรู้ จึงติดตั้งระบบ
พวกนี้ไม่เป็น (ขนาดผมติดตั้งเอง ยังกินเวลาเป็นวันเลยครับ) เพราะฉะนั้น AppServ คือทางเลือกหนึ่งที่หลายๆ คนมอง
แต่แลกกับความปลอดภัยของเว็บนั้น ผมคิดว่า มันไม่คุ้มกันเลย (ข่าว appserv โดนแฮก มีให้เห็นอยู่ร่ำไป)

ก่อนอื่น สำหรับท่านที่ลง appserv ให้ปิด Register Globals เพื่อความปลอดภัยก่อนนะครับ (อย่าลืม restart apache ด้วย)
หมายเหตุ: คลิกที่รูป เพื่อดูรูปใหญ่ได้
หมายเหตุ 2: ในรูป เป็น Windows Server 2008 R2 หากเป็น Windows Server 2003 ให้่ำทำแบบเดียวกัน

โดยการไปที่ C:\Windows แล้วเปิด php.ini มา แก้ register_globals เป็น Off แล้วเซฟครับ จากนั้นอย่าลืม restart

Image

เอาหละครับ มาถึงการอัพเดท php กันซักที ซึ่งผมจะโชว์ให้ดูนะครับ ว่าถ้าโดนยิง จะเป็นแบบนี้
httpd.exe ใช้ CPU ไป 99% กว่าๆ เลย (ทำให้เว็บล่มไปในทันที)
Image

ขอบอกก่อนนะครับว่า มันเป็น PHP Injection ธรรมดาๆ ผมไม่ได้ใช้ ddos ยิงเลย (แต่วิธีการยิงขอไม่บอกนะครับ)

ก่อนอื่น เชค PHP Version ก่อนนะครับ โดยการสร้าง php ดังนี้
Code: Select all
<?php
phpinfo();
?>
Image

ซึ่งในรูปด้านบน ก็คือ PHP 5.2.6 ซึ่งก็คือตัวที่มีปัญหา PHP Injection Exploit นั่นเองครับ เราจะมาอัพเดทเป็น
php 5.2.17 กัน (ตัวนี้แก้ปัญหาแล้ว) ทำตามขั้นตอนได้เลยครับ

ก่อนอื่น Stop Apache ก่อน (Start > Run > services.msc)

Image

เข้าไปใน C:\AppServ เปลี่ยนชื่อโฟลเดอร์ php5 เป็นชื่ออื่นก่อน

Image

เสร็จแล้วไปที่ http://windows.php.net/download/ แล้วดาวน์โหลด PHP 5.2.17 VC6 x86 Thread Safe
โหลดแบบ zip นะครับ หรือกดโหลดตาม link นี้ได้เลย
http://windows.php.net/downloads/releas ... C6-x86.zip

หมายเหตุ: ไม่แนะนำ php 5.3 เพราะยังไม่รองรับ apache 2.2

โหลดเสร็จแล้ว แตกไฟล์ออกมา เปลี่ยนชื่อเป็นโฟลเดอร์ php5 ครับ

Image

Start Apache (Start > Run > services.msc)

Image

เสร็จแล้วครับ เชค phpinfo.php อีกที ว่าเป็น php 5.2.17 แล้ว ตามรูปครับ

Image

บั๊กยิงที่ว่านี้ เมื่อท่านอัพเดท server แล้ว ก็จะยิงไม่ได้แล้วครับ
และควรจะติดตามข่าวสารการ Update Software สม่ำเสมอ เพื่อรักษาความปลอดภัยของระบบ
ท่านเอง เนื่องจากคงไม่สนุกแน่ๆ ที่เว็บโดนแฮก จริงมั้ยครับ?

7/29/2556

แก้ไขปัญหาขึ้น Error Notice: Undefined index: ใน PHP

หลายๆคนคงเคยเจอปัญหาขึ้น Error Notice: Undefined index: นี้ นะครับว่าบอกนะว่าเขียนโปรแกรมไม่เคยเจอ Error แบบนี้กัน 555 อย่างน้อยต้องเจอบ้างละหนาก็ไม่มีอะไรมากครับพอดีมีน้องคนหนึ่งเจอปัญหานี้ ผมเลยให้แก้ไขที่ปลายเหตุไปก่อนละกันเพราะถ้าจะแก้ไขจริงๆคงต้องมานั่งไล่ โค้ดกันยาวไม่งั้นงานจะไม่เดินต่อ อิอิอิ

สิ่งที่เจอคือ

Notice: Undefined index:
Notice: Use of undefined constant



1
2
$checkError = ini_get('error_reporting');
error_reporting($checkError  ^ E_NOTICE);

เอาคำสั่งนี้ไปไว้บนสุดที่เจอ Error นะครับ

ปล. ว่างๆก็ไปนั่งไล่โค้ดให้มันถูกต้องด้วยนะครับ 555

วิธีแก้ไข PHP Notice: Undefined index, Notice: Undefined variable

วิธีแก้ไข PHP Notice: Undefined index, Notice: Undefined variable


ก็เขียน php มาตั้งนานและ แต่ใน version เก่าๆ ที่ต่ำกว่า PHP 5.3 มันจะไม่แสดง Error Warning ให้เราเห็น นอกจากเราจะไปกำหนดมันขึ้นมาเอง เพื่อเพิ่มงานให้ตัวเอง 555+ สิ่งแรกที่โปรแกรมเมอร์จะพบเวลาเขียนโปรแกรมเสร็จสิ้น มันจะมี Error หมายถึง Error จริงๆ ที่มีการทำงานผิดพลาด หรือเราเรียกว่า Bug นั่นแหละ อันนี้ก็แก้ไขไปตามเนื้อผ้า Error บรรทัดไหนก็ไปส่องบรรทัดนั้น หรือ scope ของงานนั้น จนแก้เสร็จสมบูรณ์

แต่มีใครจะรู้บ้างว่า ความจริงแล้วมันยังมี Error ที่ sensitive มากกว่านั้น ก็คือ Notice หรือการแจ้งเตือน มัน Sensitive ขนาดที่ว่า ตัวแปรใด ที่เราประกาศขึ้นมา แต่ไม่ได้กำหนดค่า หรือเอามาใช้แบบโท่งๆ มันจะแจ้งเตือนทันที แต่ต้องทำความเข้าใจก่อนว่า มันไม่ใช่ "ข้อผิดพลาด" แต่มันเป็นการ "แจ้งให้ทราบ" ซึ่ง มันก็มักจะแสดงผลให้เรารำคาญใจใน browser อยู่ไม่น้อย ตัวอย่างที่พบง่ายที่สุด อาทิเช่น

ตัวอย่างที่ 1


1
echo $_GET['id'];
แบบนี้ Notice: undefined index

Undefined index  หมายถึง ตัวแปรที่เราเอามาใช้ ยังไม่ได้ประกาศตัวแปร วิธีแก้ไขง่ายที่สุดก็คือใช้ isset() คือถ้ามันมีค่าก็จะ return true ถ้าไม่มีก็จะ return false แค่นั้น ตัวอย่างการแก้ไขปัญหาดังนี้

1
2
3
if (isset($_GET['id'])) {
    echo $_GET['id']
}
* แต่โดยมากแล้วผมจะใช้แบบนี้แทน คือกำหนดตัวแปรให้มันชัดเจนไปเลย ไม่ต้องไปใช้ $_GET, $_POST ดังนี้ครับ


1
$get_id = (isset($_GET['id'])) ? $_GET['id'] : '';

อธิบาย หมายถึง ถ้ามีค่า $_GET['id'] ก็ให้ $get_id = ค่าที่ $_GET มา ถ้าไม่มีก็เป็นค่าว่างไป โดนแบบที่ผมใช้มันจะเป็นแบบย่อ ถ้าเขียนให้ยาวขึ้นก็แบบนี้ครับ


1
2
3
4
5
if (isset($_GET['id'])) {
    $get_id = $_GET['id'];
} else {
    $get_id = '';
}
** ถ้าเราไม่กำหนด $get_id = ''; เดี๋ยวมันจะ Notice: Undefined variable ตอนนำไปใช้อีก!!

ตัวอย่างที่ 2


1
2
3
4
if ($i & lt; 10) {
    echo $i;
    $i++
}
แบบนี้ Notice: Undefined variable
Undefined variable หมายถึง ตัวแปรที่เราประกาศ มันไม่ใช่ตัวแปร (เอ๊ะยังไงวุ้ย) คือเราไม่ได้ระบุค่าให้มันครับ ว่ามันเป็น string,boolean,integer บลาๆ หรือเป็นค่าว่าง ดังนั้นเวลา PHP มันค้น index file มันจะไม่พบชื่อตัวแปรที่เราเอามาใช้ เลยแจ้่งว่า เฮ้ย แกยังไม่ได้กำหนดค่าให้ตัวแปรนะ อยู่จะเอามาใช้อย่างงี้ได้ยังไง มันอันตรายรู็้้มั้ย ว่าถ้า host ที่ใช้ไม่ได้ัตั้ง register_global = off จะโดยคนอื่นเขาสุ่มชื่อตัวแปร เข้ามาแก้ไขการทำงานของระบบเองง่ายๆ นะจ๊ะ เพราะว่ามันไป index ตัวแปรจากที่อื่น ทีไ่หนก็ได้ เพราะเราไม่ได้กำหนดไว้ (งงมะ)

วิธีแก้ไขที่ง่ายที่สุด ก็แค่เติม $i = 0; หรือกำหนดค่า NULL ให้มันก็ได้ครับ

1
2
3
4
5
$i = 0;
if ($i & lt; 10) {
    echo $i;
    $i++
}

แต่ทั้งนี้ทั้งนั้น บางทีเราแก้แล้วจนเหนื่อย มันก็ยังมี Notice ขึ้นมาอีก จนน่าำรำคาญ เพราะบางครั้งเราำจำเป็นต้องใช้ $_SESSION หรืออะไรก็ตามที่เป็นตัวแปรที่ไม่ได้ประกาศไว้แต่ต้น ลองนึกดูซิครับว่า ถ้าเราต้องมาประกาศตัวแปรทั้งหมด ว่าใช้อะไรบ้าง แบบเดียวกับ C,C++ มันจะมากมายขนาดไหน!!!

วิธีแก้ที่กากที่สุดเท่าที่โปรแกรมเมอร์คนนึงจะทำได้ ก็คือ "ปิดมันซะ" ไม่ต้องแจ้งเจิ้งให้รำคาญตา เอาแค่ Error พอแล้ว โดยการใส่


1
error_reporting (E_ALL ^ E_NOTICE);

ไว้บรรทัดบนสุดของไฟล์, ถ้ามี index.php ก็ใส่ไว้ที่นั่นก็ได้ ไม่ต้องไปใส่ซ้ำพร่ำเพรื่อ เพียงเท่านี้มันก็จะไม่สนใจแล้วว่า คุณจะประกาศตัวแปรหรือไม่ประกาศ มันจะซ่อน Notice ทั้งหมดไม่ให้มารบกวนเราอีกต่อไป

หรือ

ไม่ต้องปิด แต่ใส่ @ เข้าไปหน้าตัวแปรนั้น เพื่อบังคับมันทำงานโดยไม่ต้องสนใจว่าจะ error หรือไม่ก็ตาม


1
echo @$id;
-------------

ส่งท้ายหน้าเกี่ยวกับการเขียน $_GET[id] กับ $_GET['id'] มันก็มี Notice นะ แต่จำไม่ได้ว่ามันแจ้งว่าอะไร คือมันจะบอกเราว่า ค่า GET ที่แกส่งมา มันไม่มีชื่อตัวแปรที่ว่านี้นะ


หมายถึง ถ้าเราใส่ว่า id เฉยๆ โดยไม่มี "ฟันหนู" หรือ quote, double qoute มันจะวิ่งไปหา index ตัวแปรที่เป็น defined หรือ ตัวแปรที่เป็นค่า constant ของระบบ อาทิ __FILE__ อะไรทำนองนี้


ทางที่ดี หากเราต้องใช้ ก้ามปู [] ให้เราใส่ '' เข้าไปด้วยครับ


*** ยกเว้น array ที่ใช้ตัวเลข ไม่ต้องใส่ก็ได้ครับ

2/21/2556

PHP maker คืออะไร พีเอชพี เมคเกอร์ คือโปรแกรมสำหรับสร้าง Web application

PHP maker คืออะไร


   PHP maker คือ โปรแกรมสำหรับสร้าง Web application โดยที่โปรแกรมเมอร์ไม่จำเป็นต้องมานั่งเขียนโค๊ด PHP เอง เพียงแค่ต้องออกแบบฐานข้อมูลให้ตรงกับความต้องการเท่านั้น โปรแกรมก็จะทำการเขียน คำสั่งของภาษา PHP ให้คุณทุกขั้นตอนและ PHPMaker Report กับการออกรายงานในรูปกราฟวงกรม กราฟเส้น กราฟแท่ง นับได้ว่าเป็นเครื่องมือใหม่ล่าสุดที่ได้พัฒนาขึ้นมาเพื่ออำนวยความสะดวกใน ด้านการออกแบบและการสร้างเว็บไซต์ให้กับนักพัฒนาเว็บไซต์ 
   ตัวโปรแกรมสามารถทำงานได้ทั้งในระบบปฏิบัติการ Windows (MySQL / PostgreSQL / Access / MSSQL) และLinux/ Unix servers (MySQL) PostgreSQL PHPMaker เป็นต้น




ข้อมูลอ้างอิง
http://pibul2.psru.ac.th
http://phpmaker.soft32.com/

2/20/2556

สุดยอดเครื่องมือสร้างWeb-Base

จากการศึกษาและทดลองใช้โปรแกรมที่ใช้สำหรับสร้าง web-base ที่เป็น web Application สำหรับเป็นระบบที่สามารถจัดเก็บบันทึกข้อมูล แก้ไข ค้นหา และลบข้อมูล โดยมีการใช้งานผ่าน Browser ในเครือข่ายอินเทอร์เน็ต มีโปรแกรมชื่อ PHPRunner(มาคู่กันกับ ASPRunner) เป็นเครื่องมือซึ่งจะสามารถสร้าง web-base Application ได้อย่างสมบูรณแบบที่สุด โดยสามารถทำได้ครบเป็นหนึ่ง website ได้เลย จากการทดสอบ PHPRunner v.6  ไฟล์ติดตั้งขนาดประมาณ 29 MB โดยมีความสามารถที่เครื่องมือตัวอื่นๆไม่มีดังนี้
                -สามารถสร้างได้ครบองค์ประกอบของwebsite
                -สร้างฐานข้อมูล MySQL พร้อมสร้าง Table ได้เองจากภายใน PHPRunner โดยไม่ต้องพึ่ง PhpMyAdmin
                -สร้างระบบการจัดการข้อมูล DBMS ได้สมบูรณ์ เพิ่ม/แก้ไข/ลบ/ค้าหา
                -มี Inline Edit และ Inline Add
                -สร้าง Drop-Down List ได้ อ่านค่าแบบ LooUp จาก Table ได้
                -สามารถสร้างระบบการ Login ที่ดีมาก ทั้ง Hardcode User/Pass และอ่านจาก Table  พร้อมทั้งสามารถกำหนด Permission ได้อีกด้วย
                -แสดงผลจากฐานข้อมูล เป็นรายงาน Report และเป็นกราฟ ได้
                -มี Editor สำหรับแก้ไขหน้าWeb แบบ WYSWYG แสดงได้ทั้ง Code และ Design
                     -ใช้งานง่ายเหมือนกับ Wizard