คลังเก็บป้ายกำกับ: PHP

การแก้ปัญหาเบื้องต้นจากการโดน Redirect ไปที่ http://seishell-inoa.ru/wings/index.php

การแก้ปัญหาเบื้องต้น จากการโดน XSS (Cross Site Script) ที่ทำให้หน้าเว็บของเรา Redirect ไปที่ http://seishell-inoa.ru/wings/index.php

หลังจากที่ Website ที่โฆษณาโดยใช้ Adwords บางตัว เมื่อคลิกที่ Ad แล้วปรากฏว่าพบว่ามัน Redirect ไป http://seishell-inoa.ru/wings/index.php ซึ่งก่อน Google จะบล็อค Website นี้จะ เป็น Fake App (Symantec Endpoint 11 กั้นไม่ให้ Access เลยทีเดียว) ที่ทำตัวเป็น Antivirus แต่จริงๆ เมื่อ Download มานั่นจะเป็น Virus อย่างดีทีเดียว
สาเหตุหลักจากที่พยายามไล่ดูแล้ว ช่องโหว่มากที่สุดน่าจะเป็นที่ใช้ phpMyAdmin 2.9.2 ในระบบเป็นส่วนใหญ่ ซึ่งมันรั่วมาก มันสามารถ สร้าง Script Attack Server เราได้มากมาย
โดยมีสรุป เป็นปีๆ ได้ดังนี้
http://www.cvedetails.com/version/38014/Phpmyadmin-Phpmyadmin-2.9.2.html
และอันนี้เป็นอันรวมว่ามีรูรั่วตรงไหนบ้าง
http://www.cvedetails.com/vulnerability-list/vendor_id-784/product_id-1341/version_id-38014/opxss-1/Phpmyadmin-Phpmyadmin-2.9.2.html

ทั้งหมดจะเป็นประเภท XSS หมดเลยครับ

วิธีการแก้ปัญหา
ก่อนทำอะไร Backup DB ไว้ก่อนดีที่สุดครับ

1. จัดการตัวการเจ้าปัญหาเสียก่อน โดยทำการลบ phpMyAdmin version ที่รั่วทิ้ง จากนั้นไป Load Version ใหม่ ได้ที่ http://www.phpmyadmin.net/home_page/index.php

2. ให้ทำการตรวจสอบข้อมูลใน Table เราก่อนว่ามี Script ที่เกิดจากการใช้ SQL Injection อะไรหรือเปล่า โดยหลักจะผมจะ Search หาคำว่า </SCRIPT>, script , java , void ด้วย Keyword เหล่านี้ แต่หาจากทุก Table ใน ทุกๆ Field ใน Database นั้นๆ (มีเครื่องมือที่ http://anywhereindb.googlecode.com เป็นไฟล์ php หรือจะใช้ ค้นหา ใน phpmyadmin ก็ได้ครับ) เมื่อเจอ Code Java ประหลาด ๆ (ที่ไม่ได้เกิดจากที่ App เราเขียนนะครับ) ก็ลบออก
(ใน Case ของผมมี 2 – 3 จุดครับ แต่ก็ยังไม่หาย ยังคง Redirect ต่อเนื่อง – -” คิดว่างานมาละ )

อ่านเพิ่มเติม →

ข้อความนี้ถูกเขียนใน Programming และติดป้ายกำกับ บน โดย

เริ่มต้นง่ายๆ กับการเขียน WordPress Plugins บทที่ 1

เริ่มต้นง่ายๆ กับการเขียน WordPress Plugin บทที่ 1

ว่าจะลองเขียน Plugin ของ WordPress หลายต่อหลายครั้งแล้ว แต่ยังไม่ได้เริ่มเลยสักครั้ง คราวนี้ฤกษ์งามยามดีเพราะว่าต้องทำ Theme ให้ www.iamewery.com แล้วต้องไปแก้ Plugins หลายๆอันเพื่อให้สวยงามพอดีกับ Theme และยังอยากเขียน Plugins ที่สำหรับ ใส่ตัวเก็บสถิติของ Stats.in.th ด้วย (โปรเจ็คถัดไป) วันนี้เลยเอาวิธีเขียน Plugins แบบ ง่ายมาเขียนให้ดูกันครับ

ในบทที่ 1 นี้เราจะเริ่มเขียน Plugin ง่ายๆตัวนึง โดยตั้งชื่อว่า WP-ColorClock หน้าที่ของปลั๊กอินอันนี้คือการแสดงวันที่ปัจจุบันในทุกๆ Post ด้วยอักษรสีแดง

ให้ทำการสร้าง File ชื่อ wp-colorclock.php ไว้ใน wp-content/plugins จากนั้นเข้าไปแก้ไขไฟล์นี้ด้วย Notepad หรือ Editor อื่นๆตามถนัด

< ?php
/*
Plugin Name: WP-ColorClock
Version: 0.1
Description: Plugin Description
Author: Plugin Author Name
Author URI:  Author website url
Plugin URI: Plugins website url
*/
?>

อ่านเพิ่มเติม →

Codeigniter Activerecord กับ MSSQL แล้ว Error

เริ่มเอา Codeigniter ที่เป็น PHP Framework มาใช้งาน เนื่องจาก Learning Curve ต่ำๆ ของมัน ทำให้พอถูๆไถๆ ไปกับเค้าได้ แต่ผมว่ามันไม่ค่อย Smooth กับ MSSQL เอาเสียเลย เพราะ แม้ว่า Version ล่าสุดจะออกมาแล้วก็ตามยังไม่สามารถแก้ปัญหา การใช้ ActiveRecord กับ MSSQL ในการ Select ข้อมูลได้เลย สำหรับคนที่ีมีปัญหาเหมือนกัน ผมไปค้นเจอที่ Forum เลยเอามา Post ไ้ว้ จากที่นี่

$this->obj->db->select($filed_result);
$this>obj>db>where($filed_get,$keyword);
$query = $this>obj->db->get($table_get);

ถ้า Select แบบนี้ละก็ Error อย่างไม่ทราบสาเหตุทันที ทั้งๆ ที่ Query ถูก ให้ไปแก้ไข database/drivers/mssql/mssql_driver.php บรรทัดที่ 461 จาก

$item = preg_replace('/(^'.$lbound.')([wd-_]+?)(s|)|$)/iS', '$1"$2"$3', $item);

เป็น

$item = preg_replace('/(^'.$lbound.')([wd-_]+?)(s|)|$)/iS', '$1$2$3', $item);

บรรทัดที่ 466 จาก

return ""{$item}"";

เป็น

return "{$item}";

ก็จะสามารถใช้งาน Activerecord ใน mssql ได้ครับ

ใช้ Pagination ใน Codeigniter กับ MSSQL

ใช้ Pagination ใน Codeigniter กับ ฐานข้อมูล Microsoft SQL (MSSQL)

คือผมได้มีโอกาศลองใช้ Codeigniter กับ การเขียน โปรแกรมเรียกดูข้อมูลง่ายๆ จาก MSSQL แต่ติดปัญหาเรื่องการแบ่งหน้าด้วย Pagination ลองค้นๆ ดูใน Forum เค้าให้ไปแก้ไฟล์

systemdatabasedriversmssqlmssql_driver.php

ตรงบรรทัด function _limit($sql, $limit, $offset) ให้เป็นแบบนี้

function _limit($sql, $limit, $offset)
{
// Horrible solucion =)
//$i = $limit + $offset;
//return preg_replace(‘/(^SELECT (DISTINCT)?)/i’,’\1 TOP ‘.$i.’ ‘, $sql);
$cursorName = ‘mi_cursor_’.md5(strtolower($sql));
$sql = “DECLARE “.$cursorName.” CURSOR DYNAMIC READ_ONLY FOR
“.$sql.”
OPEN “.$cursorName.”
DECLARE @CURSOR AS INT
SELECT @CURSOR = CURSOR_HANDLE FROM MASTER.DBO.SYSCURSORS
WHERE CURSOR_NAME = ‘”.$cursorName.”‘
EXEC SP_CURSORFETCH @CURSOR, 32, “.($offset+1).”, “.$limit.”
EXEC SP_CURSORCLOSE @CURSOR”;
return $sql;
}

ก็จะหายครับ

Cannot modify header information – headers already sent

PHP มัน Error แบบนี้

Cannot modify header information – headers already sent

แก้ยังไง

มันมี 2 ทางแก้ครับ

1. แก้ที่ php.ini
โดย แก้ บรรทัดที่ output_buffering จาก Off ให้เป็น On ซะ
output_buffering = On

2. override config ของ php ด้วย code
โดย ใส่ ob_start(); ไว้บนสุดของ Page ครับ

ข้อความนี้ถูกเขียนใน Programming และติดป้ายกำกับ บน โดย

function makeurl($param)

function makeurl($param)
{
$replace=str_replace(' ','-',$param);
$replace=str_replace('&','and',$replace);
$replace=str_replace('/','-',$replace);
$replace=str_replace('(','',$replace);
$replace=str_replace(')','',$replace);
$replace=str_replace('+','',$replace);
$replace=str_replace('#','',$replace);
$replace=str_replace("'",'-',$replace);
$replace=str_replace('"','-',$replace);
return $replace;
}

จะเป็น function ในการ เปลี่ยน – ‘ / ( ) # ‘ ” ให้เป็น – เพื่อให้เหมาะสมกับการค้นหาของ google

ข้อความนี้ถูกเขียนใน Programming และติดป้ายกำกับ บน โดย