การเขารหสภาษาสคร ปตไ ฟล PHP ดวย Turck MMCache บนระบบปฏบต การลนกซ

ภษ ต รงโรจน หนวยปฏ บ ต การเทคโนโลย เคร อข าย ศนย เทคโนโลย อ เล กทรอนกส และคอมพ วเตอร แห งชาต 1. บทนา การเขย นภาษาสครปต บ นระบบปฏบ ตก ารลน กซ จะดาเนน การเขย นในลกษณะของ Plain text เป นลกษณะของการเขย นใหท างานทล ะบรรทด แตส าหรบโครงการขนาดใหญ หรอ งานทต อ งการความ ปลอดภยสง ยกตวอยางเชน งานทเกย วกบระบบเครอขายอนประกอบดว ยหมายเลขไอพ หรอ งานทม ความจาเป นตอง ระบรหส การเขา ใชง านและรหสผา นอยใ นสครปต ใ นลกษณะของการฝงในสครปต (Hard code) ลกษณะงานเหลานเมอ เผยแพรออกไปจะทาใหผ ท ม ค วามร หรอ สามารถอา นภาษาสครปต เข า ใจ สามารถทจ ะนาขอม ล บางสว นเหลาน น ไปทาการทอ าจจะเป นอนตราย หรอส ง ผลกระทบในเชง การคา ได การเขา รหสภาษาสครปต จ ง เป นอก ทางเลอ กหนงท ส ามารถนามาใชเพ อป องกนปญหาเหลานไดใ นเบอ ง ตน ผลตภณฑ ยอดน ยมท น กพฒนานยมใช ม หลายตวด วยกน ตวอยางกรณศ กษ า เชน Zend encoder (www.zend.com) ผลตภณฑ เหล าน ท าออกมาในลกษณะเชงพาณ ชย ผท ใช งานม ความจ าเป น ตองซ อล ขส ทธ ซอฟต แวร มาด วยราคาท ค อนข างส ง และอกกรณหน งเม อผล ตภณฑ ได ร บความนยมมา ก ก จะมผ ท ท าซอฟตแวร เพ อ ถอดรหสออกมาดวยเช นกน ยกตวอยางเช น เมอเราพ มพ keyword คาวา Zend decoder ลงในเวบไซด www.google.com กจะปรากฏผลลพธของเวบไซด ท ม Keyword เหลาน จ านวน ถง 508,000 เวบไซด สาหรบผลตภณฑ ซอฟต แวร ส าหรบการเขา รหสจากคายอ น สามารถด ไดท http:// www.patrickz.eu.org/content/Articles/PHP%20Script%20Encoder%20Compare.htm

การแกป ญหาเรองล ขส ทธ ซอ ฟตแวร และการหาซอฟตแวร ท ใช ถ อดรหสไดง ายจากเวบไซด ท วๆ ไป เราจงม ความจ าเป นตองหาทางเล อกใ นการใชซอฟต แวร ท ม ข อจ ากดดงน 1. ฟร (Open source ) 2. ตดต งง า ย รองรบทงบนระบบปฏ บต การล น กซร ะดบเซอรเวอร (Redhat , Fedora , FreeBSD , Ubuntu Server , CentOS หรออ นๆ ) หรอระบบปฏ บต การว นโดว 3. มเวบไซด ย อดนยมหลายแห งท วโลกนาไปใช

จากคณสมบต ท ง 3 ขอ หนงในทางเล อ กซอฟตแวร ท จะน ามาใชส าหรบการแกป ญหานได คอ Turck MMCache ซงจ ดเป น PHP-Accelerator Software ประเภทหนง

2. เรมตนตดตง Turck MMCach PHP API ไฟลท ใช ใ นการตดต ง Turck MMCache ถกพ ฒนาขน โดยใช C Program สามารถดาวนโหลด ไดจ าก http://sourceforge.net/project/showfiles.php?group_id=69426 โดยมใหเล อกทง ใน รปแบบสาหรบตดต ง บนระบบปฎบ ตก ารลน กซ และระบบปฏบ ตก ารวน โดวส ในทน เราจะเนนท ก ารตดต ง บนระบบปฏบต การล น กซเป นหลก

คณสมบต ของเซอร เวอร ท ท าการทดลองตดต งม ค ณสมบต ของระบบปฏ บต การและเวอร ช นของภาษ า PHP ดงน 1. Linux Fedora core4 2. PHP Version 5.04

2.1 เมอ ดาวนโหลดไฟล Turck MMCache มาแลวร ปแบบของไฟลจ ะถกบบอ ดในลกษณะของ tar.gz หรอ bzip ใหแ ตกไฟลดงกล าวโดยใช ค าสง tar หรอ bunzip2

2.2 เมอแตกไฟลออก จะได Directory Turck MMCache ซง ภายในจะประกอบดว ย Source code , Configuration file และ library สาหรบตดต งมากมาย แสดงดงรปท 1 รปท 1 แสดงรายชอไฟล ภายใต Directory ของ Turck MMCache

Step 1: เรมต น Configuration กาหนดคาท จ าเป นตา งๆ สาหรบ API Module (กรณาใช root สาหรบตด ตง )

ใชค าสง :

#export PHP_PREFIX="/usr" #$PHP_PREFIX/bin/phpize

จะไดผลล พธดงน ( ในข นตอนน จะม การสร างไฟล configure ให เพ อให เหมาะสมกบ version ท ม ในเคร อง )

รปท 2 แสดงการกาหนดคาท จ าเป นสาหรบ API Module

Step 2: การกาหนดคาส าหรบการต ดต ง (Configure)

ใชค าสง :

#./configure --enable-MMCache=shared --with-php- config=$PHP_PREFIX/bin/php-config

จะไดผลล พธดงน

รปท 3 แสดงการ Configure เพอเร มท าการตดต ง Step 3: เรมต ดต งด วยการ Make และ Make install

ใชค าสง :

#make

จะมกา ร Compile source code มหน าตาระหว างการต ดต งแ สดงดงรปท 4

รปท 4 การ Compile Source code ดวยค าสง make

ใชค าสง :

#make install

เพอต ดต ง และเคลอนย า ย Library ไปท Directory ตาง ๆ ทส าคญของระบบปฏบต การ หากการตด ตงสมบร ณ ไมม ป ญหาใดๆ เกดข นก จะแสดงหนาจอ เสรจสนด งรปท 5

รปท 5 เสรจสนกระบวนการต ดต ง Step 4: เรมต นแก ไข PHP Configuration file หรอ php.ini

โดยปกตไฟล ท ก าหนดคณสมบต การใช งา น Environment หรอก าหนดคา API ตาง ๆ จะอยท /etc/php.ini และหากมการต ดต งเสร จสมบรณ เราจะสามารถพบไฟล API ของ Turck MMCache ไดท /usr/lib/php/modules/MMCache.so เชนกน การกาหนดคณสมบต ของ Turck MMCache API ทาได โดยการแกไ ข php.ini แลวท าตามขนตอนดงต อไปน

1. ตรวจสอบไฟล /usr/lib/php/modules/MMCache.so วาม หร อไม (ขน ตอนนจะไม ม ป ญหา เกดข นถ าม การต ดต งเสร จสมบรณจาก Step1 – Step3)

2. แกไขไฟล /etc/php.ini โดยตรวจสอบบรรทด extension_dir = “/usr/lib/php/modules” (ซงจ ะตรงกบขอ 1 ขน ตอนนจะไม ม ป ญหา ใดใดอกเช นกน เพราะจะเป นคา default ทถ กก าหนดไวอย แล ว )

สรา ง Directory /tmp/MMCache แลว chmod 0777 เพอใช เก บ cache

4. เพมบร รทดดงตอไปน ลงใ น php.ini

extension="MMCache.so" MMCache.shm_size="16" MMCache.cache_dir="/tmp/MMCache" MMCache.enable="1" MMCache.optimizer="1" MMCache.check_mtime="1" MMCache.debug="0" MMCache.filter="" MMCache.shm_max="0" MMCache.shm_ttl="0" MMCache.shm_prune_period="0" MMCache.shm_only="0" MMCache.compress="1"

Step 5: การ Restart httpd เพอให อ านค าในไฟล php.ini ใหม

การแกไขไฟล php.ini แลวน น httpd จะไมร ถ งการเปล ยนแปลง จาเป นตองเร มต นให อ านไฟล php.ini ใหม

ใชค าสง : #service httpd restart (กรณนต ดต งบน fedora core หากใชค ายอ น คาสงท ใช ในกา ร restart httpd อาจจะตางจากน )

รปท 6 การ Restart httpd Step 6: ทดสอบการทางานของ API ดวย phpinfo()

ถาม การด าเนนการตามข นตอน Step1 – Step5 เสรจสน ในขนตอนน จะเร มทด สอบวา php รจ ก turck MMCache API จรงหร อไม โดยอาจจะเขยนไฟล ง ายๆ เพอด Information ของ php ดงน

การเรย กดผลล พธจะต องเร ย กดผ านทา ง Browser จงม ความจ าเป นตองเข ยนใ น Web directory อาท เชน /var/www/html เป นตน ถาม การต ดต งเสร จสมบรณพร อมใช งานจะปรากฏ information ดงน

php information

รปท 7 การเรย กด PHP Information

จาก Step1 – Step6 เป นอนวาม การต ดต ง Turck MMCache แบบสมบรณ ลกษณะการทางานของ Turck mmacache นบวาม ประโยชน เป นอยางมา ก และสามารถนาไปใชงานอ น ๆ เชน การกาหนด License หรอการก าหนดวนหมดอาย การใช งา น แมกระท งการเขารหสสคร ปต ไ ฟล PHP เพอป องกน บคคลอ นล วงร รหสการเข ยนโปรแกร ม เป นตน

3. เหตใดจงต องใช Turck MMCache ?

นอกเหนอจากต องการเข ารหสภา ษาสครปต และเป นโปรแกรมเปดรหส (Open source software) แลว Turck MMCache ถกพ ฒนาขนมา เพอให รองร บการใชงานขอ ง PHP > 4.00 ซงถ าเป น เวอรช นต ากว า 4.00 ลงมา ลกษณะการทางานของตวแปรภาษาจะเป นลกษณะของ Interpreter คอ ทางานในลกษณะของการอานแล วประมวลท ละบรรท ด ดงนนจ งม การประมวลผลท ช ากว า Binary file ท เขยนด วยภา ษาอน ๆ เชน c หรอ Java ดงนนการแก ป ญหาดงกลา ว ทมงานพ ฒนา PHP โดย ZEND จงก าหนดลกษณะใหสามาร ถ Compile ภาษา php ได โดยเมอเร า run ไฟลใดใด Compiler จะทาการอาน และประมวลผล เชค ไวยากรณ แลวจ งท างานในลกษณะของภาษาเครอง (Operation code) ดงนนการใช Turck MMCache จงเป นการทางานในลกษณะของการเอา Source code ท Compile แลวมาเก บไวใ น cache เพอว าคราวหน าเวลา เรยกใช งานอ ก รอบจะไดไม ต อ ง Compile ใหม วธ การน จะท าใหการเร ยกหน าเว บ หรอการเร ยก php ใหท างานจะเรวขนกว าเด มมาก Compile Compile

1

Machine code Machine code Cache

2 1

Run Run

รปท 8 ทางานแบบธรรมดา รปท 9 การใช turck MMCache ชวย

จากรปท 8 , 9 จะเหนขนตอนการท างานอยางช ดเจนข น หากตองการท จะท าการทดลองในเรองขอ ง Benchmark วดเวลาในการท างานวาเร วกวากนมากน อยแค ไหน สามารถทาไดอ กเช นกน โดยใช /usr/bin/ab - apache HTTP server benchmarking tool แตในบ ทความนจะไมกล าวถ งการท ดลองน

4. ถาไมใช Turck MMCache แลวมซอฟตแวร ไหนอ กบา ง?

Turck MMCache ไมใช ซอฟต แวร ใหม แตม การใช งานกนมานา นแลวพอสมควรต งแต ย คของ php4 และเนองจากเป นลกษณะของซอฟตแวร เป ดรหส (Open source) จงม โปรแกรมเ มอรไปพ ฒนา ตอย อด สาหรบซอฟตแวร ท ว าน นได แก eAccelerator http://eaccelerator.sourceforge.net/ ซงผ เขยนได ท าการศกษ า และอานความค ดเห นของผท ใช งานในเวบไซด ต างประเทศ ลวนแล วแต บอกว า ม การทางาน และ Performance ดมากในระดบ ใกลเค ยงก บ แตในบทความน จะไม พ ดถ ง การทดลองใชงา น Software ดงกลา ว นอกเหนอจากน จะเป นในลกษณะเชงพาณ ชย ต องเส ยเง นซ อ ลขส ทธ ได กล าวและอ างอ งเวบไซด ไว แล วใ นหวขอ “บทนา”

5. เรมตนทดลองการเขารหสภาษาสคร ปต PHP

สาหรบการเขารหสสคร ปต PHP มข น ตอนดงน 1. จากหวขอท 2 ขน ตอนของการแตกไฟลท ผ านการบ บอ ดมา ใน Directory ดงกลา ว จะม ไฟลท ช อว า encode.php เป นไฟลท ใช ใ นการเขา รหส 2. ทดลองด option ของ encode.php โดยการใชค าสงบนเทอร ม น ล php encode.php จะได ผลลพธดงน

Usage: php -q encoder.php [options] source_file_name php -q encoder.php [options] source_file_name... php -q encoder.php [options] source_directory_name...

Options: -s suffix encode files only with following suffix (default is "php") -a encode all files (no by default) -l follow symbolic links (no by default) -r encode directories recursively (no by default) -c copy files those shouldn't be encoded (no by default) -f overwrite existing files (no by default) -o target If you encode only one script then 'target' specifies an output file name. If you encode directory or several files at once Then 'target' specifies an output directory name.

Examples: php -q encoder.php some_file.php php -q encoder.php some_file.php -o some_encoded_file.php php -q encoder.php *.php -o some_dir php -q encoder.php ~/public_html/x -rcf -sphp -sinc -o ~/public_html/y

3. ทดลองเขยน PHP Script ขนมาโดยต งช อไ ฟลว า input.php ดงน

4. เรมต นเข ารห ส input.php โดยตองการให ส งอ อกไฟลท ม การ encode แลวม ช อว า output.php ใชค าสงดงน

php -q encode.php -f input.php -o output.php

คาแนะนา – อยาล มว าเร าใช root ในการตดต ง หากจะ run ดวย user อน กรณาตรวจสอบ permission กอน มฉะน นจะไม สามารถสร า ง output.php ได

5. เมอเราด ผ ลลพธในไฟล output.php จะพบสครปต ท ผ านการเข า รหสดงตอไปน

Turck MMCache or Turck Loader");} return mmcache_load('eJzz9XV2dPZwZWBiYABhEIUBYIIajMxcQMq3UiG1I jG3ICfVjpGREYt6ABjbBkA=');?>

พนท ส เท า คอ สวนท ใช ในการตรวจ สอบการตดต ง API ของ Turck MMCache วาต ดต งและ พรอมท จะท างานหรอไม หากยงไมได ม การต ดต ง API ดงกลา ว กจะมการฟ อง Error ขนม า ซง กรณนสามารถลบเง อนไขน ออกไปก ได ถาหากไม ต องการให บ ค คลอนร ว าเข า รหสโดยใช ซอฟตแวร อะไร โดยลบออกไปใหเหล อดงน

?> จากผลลพธในไฟล output.php ดงกลาวม การเร ยก API mmcache_load แลวส ง source code ทม การเข า รหสแลวไปท างานอกท

6. ทดลองนาผลลพธท เข ารหสแล วไปใส ไว ในฟ งกช น base64_decode() เพอต องการด ว า มการเข ารหสโดยใช Algorithm พนฐานและสามารถถ อดรหสออกมาไดโดยว ธ น หร อไม

จะไดผลล พธดงน

xóõuvtöpe`b`a ไมสามารถ ถอดรหสได `Ì\@Ê·R!µ"1· 'ÕzÛ@

7. ทดลองนา Source code ทเข ารหสแล ว ไป run เครองอ นท ไม ได ม การต ดต ง Turck MMCache จะปรากฏผลลพธดงน

This PHP script has been encoded with Turck MMcache, to run it you must install Turck MMCache or Turck Loader

หรอกรณการลบเง อนไขน อ อกไปแลว จะแสดงผลลพธด งนแท น

PHP Fatal error : Call to undefined function mmcache_load() in /var/www/html/output.php on line 1

6. การทดลองในระดบท สงข น

1. การเรยกไ ฟลท เข ารหสแล ว ผานทา ง include(); หรอ require();

สรางไฟล input.php ดงน

สรางไฟล call.php ดงน

test1();

?> หลงจากนนเข ารห ส input.php โดยใหส งผลลพธ เป นไฟลท ช อว า header.inc.php

ใชค าสง php /var/www/html/turckmmcache/encoder.php -f input.php -o header.inc.php ผลลพธท ต องการ คอ header.inc.php เมอเราด เน อหาของไฟล ด งกลาวจะเป นลกษณะเนอหาดงน

Turck MMCache ");} return mmcache_load('eJzz9XV2dPZwZWBiYABiZjYgVZJaXGIIFoCxUQETlNZgZGYFUh6pOTn5doxwKV Z0dSiAEUrbMTLCmCxA7MABYQMAmOYI3Q==');?>

จากขน ตอนทงหม ดสามารถเขยนเป นลาดบได ดงรปท 10

header.inc.php (เขารห ส)

include(‘header.inc.php’); เรยกใช โดย call.php

call.php

รปท 10 ขน ตอนการเรยกใช งา น

จากการทดลองนต องการข อสร ปว า ไฟลธร รมดา สามารถทางานรวมกบไฟล ท เข ารหสแล วได หร อไม ผลลพธแสดงดงร ปท 11

รปท 11 ผลลพธการท างานของ call.php

2. แกไขไฟล call.php และ input.php ดงน

สรางไฟล call.php ดงน

test1(100);

?> หลงจากนนท าการเขารห ส input.php แลวให ส งไฟล อ อกมาเป น header.inc.php แลว ทดลอง run ใหม จะไดผลล พธดงร ปท 12

รปท 12

3. ทดลองเขารหสไฟล ท งหมด ไดแก call.php และ header.inc.php root_iir> more call.php Turck MMCache or Turck Loader");} return mmcache_load('eJzz9XV2dPZwZWBiYABhEIUEGMEkK5TnycDIyMwHZ GSkJqakFull5iXrFWQUsFgzcDAygxSVpBaXGDraMjKmQPXagg1g5GCwY2RkhJrCAsQOHBA2ABM qC5g=');?> root_iir> more header.inc.php Turck MMCache or Turck Loader");} return mmcache_load('eJzz9XV2dPZwZWBiYABiZjYgVZJaXGLIwMQIZIJwI gOEARGGAUYwyQblBQMFmMGKGe0ZGEEMDUZmViDlkZqTkx+AkNVgYbCDaGVC0g7mYABGKG 3HyAhjsgCxAweEDQCO3Qsl');?>

หลงจากนน ทดลอง run จะไดผ ลลพธด งน

รปท 13 ผลลพธขอ งการนาไฟลท เข ารหสมาท างานรวมก น 4. สรปผ ลการทดลอง

จากการทดลองในเบองต นสามารถสร ปได ว า การนาไฟลเข ารหสไปใช งา น จะเรยกใช ผ านทา ง mmcache_load API เป นหลก ซงสามารถสร ปเป นแผนภาพดงรปท 14 ดงน

File1 (เขารหส )

File2 (เขารหส ) mmcache_load API ทางาน/แสดงผล

File3 (เขารหส )

File4 (เขารหส )

การนาไปประยกต ใช งา น เครองท สามาร ถ Run ไฟลท เข ารหสน ได จะตองต ดต ง Turck MMCache API กอนจ งสามารถประมวล ผลไฟลท เข ารหสได การสงมอบ Source code ใหบ คคลอ นจ ง มความจ าเป นทจะต องให เซอร เวอร เหล าน นต ดต ง API นด ว ย ตามขน ตอน Step1 – 6 ดงทกล าวข างต น ขนตอ นการสงมอบไฟล ให บ ค คลอนหากม ความจ าเป นตองเข ารหสเพ อปกป ด Source code บางสว น สามารถกระทาได โดยการเขารหสไฟล ท ต องการ ปกปดกอน แลวจ งน าไฟลท เข ารหสน นแจกจ าย หรอส ง มอบใหผ อ นๆ และเกบตนฉบบ Source code ไวกบผ พ ฒนา เพอสะดวกใ นการแกไขในอนาคต ทงน การ สงมอบไ ฟลท เข ารหสแล วจะท าใหไม สามารถแก ไขไฟล หรอ View Source code ไดแต อย างใด หากในอนาคตมความจ าเป นตองแก ไ ข Source code เหลาน นก สามารถแกไขได โดยการน า ตนฉบบมาแก ไขโดยผ พ ฒนาเอง หลงจากแกไขแล ว หากตองการส งมอ บตอก ทาการเขารหสแล วส งมอบ ตอไป

7. เอกสารอางอง 7.1 http://www.php.net 7.2 http://www.patrickz.eu.org/content/Articles/PHP%20Script%20Encoder%20Compare.htm 7.3 http://www.zend.com 7.4 http://eaccelerator.sourceforge.net/ 7.5 http://th.php.net/apc 7.6 http://de.wikipedia.org/wiki/Alternative_PHP_Cache 7.7 http://acme-web-design.info/php-cache-kit.htm