Web Programming

Page 1

เอกสารประกอบการสมมนา Open Source Programming(II)

ภาณพงศ ปญญาด apples@reg.cmu.ac.th ผพฒนาโปรแกรม AppServ โอเพนซอรสซอฟทแวร นกว)ชาการเทคโนโลยสารสนเทศ ส.านกทะเบยนและประมวลผล มหาว)ทยาลยเชยงใหม1 25 ธนวาคม 2548


Overview การเขยนโปรแกรมดวยภาษา PHP

• PHP VS ASP, Perl, JSP • อะไรคAอ Zend Engine มความเกHยวพนกบ PHP ดานไหน • เร)Hมตนหดเขยนสกน)ดกบภาษาฮ)ต PHP • ขมทองของนกท1องอ)นเทอรเนKต แหล1งดาวนโหลด Source Code PHP • เขยนอย1างไรไม1ใหโดน hack code • ก1อนเขยน PHP มาเรยนร ว)ธก.าหนดค1าการท.างาน ของ PHP • การก.าหนดค1าการท.างาน PHP เพAHอเนนเรAHอง ของ Security


Overview (ต1อ) การเขยนโปรแกรมดวยภาษา PHP

• ท.างานกบ PHP บนระบบ Heavy Load และ การปรบแต1ง code • Benchmark วดประส)ทธ)ภาพความเรKวของ PHP Code • เทคน)คการ Re-Engineering โดยน.าตวอย1าง Code อAHนๆมาเป[นพA\นฐานในการเขยนโปรแกรมของเราเอง


Overview (ต1อ) PHP Security • • • •

SQL Injection เจาะ Code ดวย ค.าสHง SQL การส1มรหสผ1านในรปแบบ Brute Force Attack การเจาะผ1าน php backdoor shell แอบด Source Code และ password MySQL ทกซอกทกมมภายใน Web Hosting • การเขารหส PHP • ว)ธการปhองกนระบบส.าหรบ Admin จ.าพวก Web Hosting


การเขยนโปรแกรมดวยภาษา PHP


PHP VS ASP, Perl, JSP PHP Vs ASP • PHP is relatively much more faster and stable than ASP • PHP installtions are definetly cheaper to install Mixing PHP and Javascript • PHP runs great on Linux which is free • ASP runs on the IIS Server which need's Windows N.T/2000/2003 • Cross Platform compatablily


PHP VS ASP, Perl, JSP PHP Vs Perl • PHP and Perl are both powerful languages • Debugging when a Perl CGI script error : Something effect of “500 Internal Server Error” • PHP is relatively much more faster and stable than Perl


PHP VS ASP, Perl, JSP PHP Vs JSP • JSP produces a servlet in background • JSPServlet use more resource than PHP • PHP is relatively much more faster and stable than JSP


อะไรคAอ Zend Engine มความเกHยวพนกบ PHP ดานไหน Zend Engine The Heart of PHP


Zend Engine ปw 1997 Zeev Suraski และ Andi Gutmans ซ{Hงเป[นหวหนาทมพฒนาภาษา PHP โดยเร)HมจากการเปลHยนแปลงระบบของ PHP3 ใหดข{\น และเพ)Hมความ สามารถดานอAHนๆ เขาไปนอกเหนAอจากพA\นฐานของ PHP/FI ทHยงไม1สามารถรอง รบฟงกชHนต1างๆได ต1อมาในปw 1999 Zend Engine ไดถกน.ามาใชเป[นคร\งแรกใน PHP4 ดวยความ สามาถของ Zend Engine น\นกKสามารถสรางชAHอใหกบภาษา PHP จ.าท.าใหคน ทHวท\งโลกรจกกนจนถ{งทกวนน\ และใน PHP5 ใช Zend Engine version 2 The Zend Engine is responsible for the following tasks in PHP • High performance parsing (including syntax checking), in-memory compilation and execution of PHP scripts • Implementation of all of the standard data structures of PHP • Interfacing with extension modules for connectivity to external resources and protocols, such as SQL, HTTP and FTP • Overloading the Object Oriented syntax, for integration with Java and .NET • Providing all of the standard services, including memory management, resource management and more for the whole of PHP Reference : http://www.zend.com/store/products/zend-engine.php


เร)Hมตนหดเขยนสกน)ดกบภาษาฮ)ต PHP Example code : <? echo “Hello World”; ?> Output : Hello World Environment Example : Your browser is: <? echo $HTTP_USER_AGENT ?>

Output : Your browser is: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)


ขมทองของนกท1องอ)นเทอรเนKต แหล1งดาวนโหลด Source Code PHP http://www.hotscripts.com http://conf.php.net http://talks.php.net http://gtk.php.net


เขยนอย1างไรไม1ใหโดน hack code Data communication on HTTP Protocol โปรโตคอล HTTP ทHเรารจกกนน\นสามารถรองรบการส1งค1าต1างๆ จาก Server ไปยง Browser ฝ‹ง Client โดยการส1งขอมลระหว1าง Server และ Client น\นม 3 ว)ธพA\นฐานคAอ GET - เป[นว)ธทHขอมลจาก Client ส1งไปยง Server ในลกษณะ "Query String" ของ URL http://www.appservnetwork.com/index.php?query_string

POST - เป[นว)ธทHขอมลจาก Client ส1งไปในลกณะของ message body ต1อจาก request message ทH Client ท.าการส1งไปให Server ซ{Hงเป[นว)ธทHซบซอนกว1า GET และสามารถ สนบสนนขอมลทHซบซอนดวยเช1นกน ขอสงเกต : การส1งค1า POST ในภาษา HTML กKคอ A การส1งค1าทHไดจาก TAG <form> (ในภาษา PHP การรบค1า POST นHนกKคAอ $_POST นHนเอง ตวอย1าง $_POST['variable']; COOKIE - เป[นว)ธการก.าหนดค1า (define) Cookie จากฝ‹ง Server ส1งไปยง Client โดย ส1งทาง HTTP header นHนกKคAอ การทHเราจะส1ง cookie น\น คณจ.าเป[น "ตอง" ส1งก1อนค1า output อAHนๆ ครบ ซ{Hงเป[นขอจ.ากดของตวโปรโตคอลเองทHท.าใหเราตองท.าแบบน\


เขยนอย1างไรไม1ใหโดน hack code Example with register_globals = On <?php // define $authorized = true only if user is authenticated if (authenticated_user()) { $authorized = true; } // Because we didn't first initialize $authorized as false, this might be // defined through register_globals, like from GET auth.php?authorized=1 // So, anyone can be seen as authenticated! if ($authorized) { include "/highly/sensitive/data.php"; } ?>


เขยนอย1างไรไม1ใหโดน hack code Example with register_globals = Off <?php $authorized = $_GET[‘authorized’]; // define $authorized = true only if user is authenticated if (authenticated_user()) { $authorized = true; } // Because we didn't first initialize $authorized as false, this might be // defined through register_globals, like from GET auth.php?authorized=1 // So, anyone can be seen as authenticated! if ($authorized) { include "/highly/sensitive/data.php"; } ?>


เขยนอย1างไรไม1ใหโดน hack code Example base Login code : process.php <?php mysql_db_query($dbname,”select name from admin_data where id=‘$id’ and passwd=‘$passwd’”); ?>

Example force $_GET variable : process.php process.php?id=admin&passwd=0001

Example allow $_POST method only <?php $id=$_POST[‘id’]; $passwd=$_POST[‘passwd’]; mysql_db_query($dbname,”select name from admin_data where id=‘$id’ and passwd=‘$passwd’”); ?>


ก1อนเขยน PHP มาเรยนร ว)ธก.าหนดค1าการท.างานของ PHP Discover on the php.ini


ก1อนเขยน PHP มาเรยนร ว)ธก.าหนดค1าการท.างานของ PHP Example config value in php.ini file short_open_tag = On safe_mode = On disable_functions = readfile, system max_execution_time = 30 error_reporting = E_ALL & ~E_NOTICE register_globals = Off magic_quotes_gpc = On upload_max_filesize = 2M extension=php_mbstring.dll


ท.างานกบ PHP บนระบบ Heavy Load และการปรบแต1ง code (Optimization) Premature Optimization Is The Root of All Evil. - Donald E. Knuth


ท.างานกบ PHP บนระบบ Heavy Load และการปรบแต1ง code Optimization Strategies • • • • •

Caching Optimization Database Use Optimization PHP Code Tuning the Webserver Reducing Badwidth


PHP บนระบบ Heavy Load และการปรบแต1ง code Compiler Caches • fast = true • Many available options • APC • Bware Afterburner • ionCube • Turck MMCache • Zend Accelerator


ท.างานกบ PHP บนระบบ Heavy Load และการปรบแต1ง code Web Server without Zend Optimizer

The PHP script was loaded by the Zend Engine and compiled into Zend opcode. Opcodes, short for operation codes, are low level binary instructions. Then the opcode was executed and the HTML generated sent to the client. The opcode was flushed from memory after execution.


PHP บนระบบ Heavy Load และการปรบแต1ง code Web Server with Zend Optimizer


ท.างานกบ PHP บนระบบ Heavy Load และการปรบแต1ง code PHP Accelerators comparison


PHP บนระบบ Heavy Load และการปรบแต1ง code Where to find Opcode Caches Zend Optimizer: A commercial opcode cache developed by the Zend Engine team. Very reliable and robust. Visit http://zend.com for more information. Turcke MMCache: http://turck-mmcache.sourceforge.net/ is no longer maintained. See eAccelerator, which is a branch of mmcache that is actively maintained (Added 28 Feb 2005). Alternative PHP Cache: http://apc.communityconnect.com/ PHP Accelerator: http://www.php-accelerator.co.uk/ AfterBurner Cache: http://www.bwcache.bware.it/


PHP บนระบบ Heavy Load และการปรบแต1ง code Tune Apache Web Server http.conf MaxClients 256 KeepAlive Off MinSpareServers 32 MaxSpareServers 64 HostnameLookups off


ท.างานกบ PHP บนระบบ Heavy Load และการปรบแต1ง code DSO vs. Static • For maximum performance compile PHP statically into apache (up to 20% speed increase)


PHP บนระบบ Heavy Load และการปรบแต1ง code Static Compile of PHP # PHP ./configure --with-apache=/path/to/apache_source # Apache ./configure --activatemodule=src/modules/php4/libphp4.a *** Increased speed comes at a cost of a slightly longer installation procedure, requiring Apache recompile every time PHP is upgraded.


PHP บนระบบ Heavy Load และการปรบแต1ง code DSO Compile of PHP # PHP ./configure --with-apxs=/usr/local/apache/bin/apxs


Benchmark วดประส)ทธ)ภาพความเรKวของ PHP Code Apache HTTP server benchmarking tool (ab) Running ab Benchmark ab -n100 -c2 http://www.reg.cmu.ac.th/index.php Output Server Software: Server Hostname: Server Port:

Apache/1.3.34 www3.reg.cmu.ac.th 80

Document Path: Document Length:

/regist/index.php 6085 bytes

Concurrency Level: 2 Time taken for tests: 3.267 seconds Complete requests: 100 Failed requests: 0 Broken pipe errors: 0 Total transferred: 625000 bytes HTML transferred: 608500 bytes Requests per second: 30.61 [#/sec] (mean) Time per request: 65.34 [ms] (mean) Time per request: 32.67 [ms] (mean, across all concurrent requests) Transfer rate: 191.31 [Kbytes/sec] received


Benchmark วดประส)ทธ)ภาพความเรKวของ PHP Code Benchmark with perl script File bench.pl #!/usr/bin/perl print "\nTest ", join(" ", @ARGV), "\n\n"; $sum=0; $n=0; for(my $i=1;$i<10;++$i) { my $res = `/usr/local/apache/bin/ab -c 8 -n 5000 $ARGV[0] 2>&1`; if ($res =~ /Requests per second:\s*(\S*)/) { printf("%-8.2f", $1); $sum += $1; $n++; } } print "\nAverage: ", $sum/$n, "\n";

Running Benchmark Script perl bench.pl http://www3.reg.cmu.ac.th/


เทคน)คการ Re-Engineering โดยน.าตวอย1าง Code อAน H ๆ มาเป[นพAน \ ฐานในการเขยนโปรแกรมของเราเอง Re-Engineer from PHP-Nuke Source Code


เทคน)คการ Re-Engineering โดยน.าตวอย1าง Code อAน H ๆ มาเป[นพAน \ ฐานในการเขยนโปรแกรมของเราเอง After Re-Engineer

Output วนทH 13 ธนวาคม 2548


เทคน)คการ Re-Engineering โดยน.าตวอย1าง Code อAน H ๆ มาเป[นพAน \ ฐานในการเขยนโปรแกรมของเราเอง Example email validate function


PHP Security


PHP Security The basic outline • Security Overview • Cross-Site Scripting (XSS) • Cross-Site Request Forgeries (CSRF)


PHP Security Security Overview • Every application is insecure • Security is a balance of risk and usability • Make things easy for the good guys, hard for the bad • Know everything about your application


PHP Security What is XSS? • Exploits the trust a user has for a particular site • Generally involves Web sites that display foreign data (Web mail, forums, syndicated content, etc.) • Can be anything - executing malicious scripts, stealing cookies, etc. • Inject content of attacker's choosing.


PHP Security SQL Injection เจาะ Code ดวย ค.าสHง SQL <?php $sql = " SELECT card_num, card_name, card_expiry FROM credit_cards WHERE uid = '{$_GET['uid']}' "; ?> http://example.com/script.php?uid=42 SELECT card_num, card_name, card_expiry FROM credit_cards WHERE uid = '42'

Sending SQL Injection to $_GET method http://example.com/script.php?uid=42'%20or%20''=' SELECT card_num, card_name, card_expiry FROM credit_cards WHERE uid = '42' or ''=''


PHP Security Other XSS Example <html> <head> <title>Example</title> </head> <body> Name: <?php echo $_GET['name']; ?> </body> </html> http://example.com/script.php?name=apples

Attacking !! http://example.com/script.php?name=<script>alert('!');</script>


PHP Security Firewall Don’t help


PHP Security Casting <?php $uid = (int) $_GET['uid']; $sql = " SELECT card_num, card_name, card_expiry FROM credit_cards WHERE uid = '{$uid}' "; ?> http://example.com/script.php?uid=42 SELECT card_num, card_name, card_expiry FROM credit_cards WHERE uid = '42'

Good bye SQL Injection http://example.com/script.php?uid=42'%20or%20''=' SELECT card_num, card_name, card_expiry FROM credit_cards WHERE uid = '42'


PHP Security Filtering <html> <head> <title>Example</title> </head> <body> Name: <?php echo htmlentities($_GET['name']); ?> </body> </html> http://example.com/script.php?name=apples

:-) http://example.com/script.php?name=<script>alert('!');</script>

<script>alert('!');</script>


PHP Security Preventing XSS Attacks • Filter ALL foreign data • Let PHP help - htmlentities(), strip_tags(), utf8_decode(), etc. • Don't try to guess bad tags - only allow safe ones • The bad guys are very creative – you must be, too!


PHP Security What is CSRF? • Exploits the trust a site has for a particular user • Generally involves Web sites that rely completely on the identification of the user for security • Involves "tricking" a user into unknowingly sending an HTTP request of the attacker's choosing • Represents the best reason to disable register_globals • No easy solution - depends on application design


การส1มรหสผ1านในรปแบบ Brute Force Attack Admin Login via HTTP

Learn the form • Yes, I know login use only “name” and “passwd” field


การส1 มรหสผ1านในรปแบบ Brute Force Attack Testing Login and learn negative


การส1 มรหสผ1านในรปแบบ Brute Force Attack Hack this site !!


การส1 มรหสผ1านในรปแบบ Brute Force Attack Good bye brute force


การเจาะผ1าน php backdoor shell PHPShell


แอบด Source Code และ password MySQL ทกซอก ทกมมภายใน Web Hosting Explore Web Hosting • Know Unix/Linux command • Know Unix/Linux directory structure • Know SQL command • Know where config stay • Know more than admin • Know some trick


การเขารหส PHP Zend Safeguard

Power Benefits: • Encode and protect your commercial PHP applications. • License and distribute your commercial PHP applications. • Provide flexible licensing models with economic entry-points for customers hesitant to commit. • Tie revenues with successful solutions.


การเขารหส PHP How Zend SafeGuard Suite Works


การเขารหส PHP php source code without encoder <?php $sql = " SELECT card_num, card_name, card_expiry FROM credit_cards WHERE uid = '{$_GET['uid']}' "; ?>

php source code with encoder


ว)ธการปhองกนระบบส.าหรบ Admin จ.าพวก Web Hosting Return to php.ini safe_mode = On magic_quotes_gpc = On “Up to Date” security advisories news • http://packetstormsecurity.org/ • http://www.security.nnov.ru/exploits/ • http://www.securityfocus.com • http://www.google.com


See Soon http://www.appservnetwork.com


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.