การเข ารหสภาษาสคร ปตไ ฟล 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 software) 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 ให เพ อให เหมาะสมก บ php 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 ดมากในระด บ ใกลเค ยงก บ Zend Engine แตในบทความน จะไม พ ดถ ง การทดลองใชงา น 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