Sunday, August 19, 2007

ความปลอดภัยทำไมมันมาช้าจัง

ได้มีโอกาสในการพัฒนาโครงการหลายๆ อย่าง แต่มีบ่อยครั้งคนมักจะลืมนึกถึงคือ "เรื่องความปลอดภัย" ของข้อมูล เช่น การเผยแพร่ข้อมูลส่วนตัว, รูป

ซึ่งกว่าจะรู้ว่าต้องเพิ่มเข้าไปในโครงการนั้นก็ล่าช้าไปบ้างแล้ว หรือบางครั้งก็สูญเสียความเชื่อมันไปเสียแล้ว

ช่วงนี้ได้มีโอกาสใช้งาน WSWG อยู่ ซึ่งจะทำการ upload ข้อมูลขึ้นไปไว้ที่ web และสามารถ แบ่งปันข้อมูลได้ จึงได้ลองถามหลาย ๆ คนดูว่าสามารถใส่เรื่องความปลอดภัยของข้อมูลที่ upload ได้หรือไม่, ทำได้หรือเปล่า แต่คำตอบที่ได้นั้นดูเหมือนไม่ค่อยให้ความสำคัญเท่าไหร่ ซึ่งส่วนตัวแล้วผมคิดว่าถ้าผมต้องเป็น ผู้ใช้ระบบที่ไม่ได้ดูแลเรื่องความปลอดภัยนี้ให้ คงจะตัดสินใจ "ไม่ใช้ดีกว่า"

ดังนั้นจึงดำเนินการแก้ไขด้งนี้
FCKeditor เป็น WSWG ที่เลือกใช้ ซึ่งข้อมูลที่ได้ upload ไปน้นปกติจะไปวางไว้ที่ server ที่ตำแหน่งเดียวกัน ใช้เวลาค้นจาก google อยู่นาน จึงได้คำตอบว่า ให้ทำการแก้ที่ command.php ของ filemanager ดังนี้

1. ไฟล์ที่แก้ไขคือ fckeditor/editor/filemanager/browser/default/connectors/php/connector.php
2. เพิ่ม session_start() ดังนี้

session_start(); // Require session
ob_start() ;

include('config.php') ;
include('util.php') ;
include('io.php') ;
include('basexml.php') ;
include('commands.php') ;


3. ปกติแล้ว UserFilePath จะถูกอ่านมาจาก fckeditor/editor/filemanager/browser/default/connectors/php/config.php
ดังน้นจึงทำการแก้ไฟล็ connector.php ดังนี้

// Get the "UserFiles" path.
$GLOBALS["UserFilesPath"] = '' ;

if ( isset( $Config['UserFilesPath'] ) )
$GLOBALS["UserFilesPath"] = $Config['UserFilesPath'].$_SESSION['login_id'] ; // Add Security support for each login
else if ( isset( $_GET['ServerPath'] ) )
$GLOBALS["UserFilesPath"] = $_GET['ServerPath'] ;
else
$GLOBALS["UserFilesPath"] = '/userfiles/' ;

if ( ! ereg( '/$', $GLOBALS["UserFilesPath"] ) )
$GLOBALS["UserFilesPath"] .= '/' ;

if ( strlen( $Config['UserFilesAbsolutePath'] ) > 0 )
{
$GLOBALS["UserFilesDirectory"] = $Config['UserFilesAbsolutePath'].$_SESSION['login_id'] ; // Add Security support for each login

if ( ! ereg( '/$', $GLOBALS["UserFilesDirectory"] ) )
$GLOBALS["UserFilesDirectory"] .= '/' ;
}
else
{
// Map the "UserFiles" path to a local directory.
$GLOBALS["UserFilesDirectory"] = GetRootPath() . $GLOBALS["UserFilesPath"] ;
}


4. หลังจากใช้งาน จะสังเกตได้ว่า แต่ละ user มี Folder ส่วนตัว ไว้ upload และก็ไม่ต้องกลัวว่า จะมีใครเอาไฟล์ไปใช้ หรือจะไปเอาไฟล์ของคนอื่นมาใช้


ส่วนการควบคุมสิทธิ์การเข้าถึงไฟล์ของ user นั้น ก็ต้องแล้วแต่ application นะครับ ซึ่งในส่วนที่ผมทำให้ดูนั้น ก็พอใช้งานได้ และ ก็หวังว่าจะมีการพัฒนาเพิ่มเติม

ที่มา: http://www.fckeditor.net/forums/viewtopic.php?f=6&t=1772&p=11476&hilit=file+upload+security#p11476

No comments: