Survive The Deep End:PHP Security
今天發現的好網站,晚點來看。
今天發現的好網站,晚點來看。
一般要發送http request,都會使用php curl,但今天看到可能是個更方便的tool,叫Guzzle。
官網:Guzzle
完整介紹文:PHP HTTP Request With Guzzle
google到有人寫了篇文章:
Guzzle for HTTP POST authentication and form submission with Symfony 2.0
好像挺好玩的,改天再來研究….
關於什麼是DNS zone transfer可以參考wiki。
DigiNinja 提供了一個讓大家自由測試的 zonetransfer.me 網域
在 Linux 環境內,可利用 dig 指令查詢目標 domain 使用哪些 name server:
dig +nostats +nocomments +nocmd NS zonetransfer.me
Name server 查詢結果:
;zonetransfer.me. IN NS
zonetransfer.me. 7118 IN NS ns12.zoneedit.com.
zonetransfer.me. 7118 IN NS ns16.zoneedit.com.
從結果可得知有 ns12.zoneedit.com 或 ns16.zoneedit.com 這兩個 DNS server,接著即可測試是否可從外部網路對這兩個 DNS server 進行 zone transfer,測試方式如下:
dig axfr zonetransfer.me @ns12.zoneedit.com
如果嫌麻煩也有現成的網站可以測試:
HippyVM 是透過 PyPy 的技術實做出來的 PHP 相容方案:
HippyVM is an implementation of the PHP language using RPython/PyPy technology.
它號稱的performance
HippyVM is 7.3x faster than stock PHP and 2x faster than HHVM
可以透過網站或Github關注它:
網站:http://hippyvm.com/
Github:hippyvm
最近在玩parser,但parse某些網站的時候,居然parse到某些網站的編碼是用big5….
於是parse回來的中文字變亂碼,解法就是用php的iconv函式。
$string_utf8 = iconv("big5","utf8",$string_big5);
iconv可以指定in_charset跟out_charset,來達到編碼轉換。
參考:
網站上的一些js,css,image檔,如果設置browser cache,performance會更好。
在php設置browser cache很簡單,大概如下:
$seconds_to_cache = 60*60*24; $ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT"; header("Expires: $ts"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); header("Cache-Control: public,max-age=$seconds_to_cache");
關於Apache的keep-alive,主要有三個參數:
KeepAlive
MaxKeepAliveRequests
KeepAliveTimeout
關於這三個參數的解說,可以參考這裡:http://httpd.apache.org/docs/2.0/en/mod/core.html#keepalive
apache預設KeepAlive是打開的,如果妳沒開KeepAlive,那麼你每一個request都會重新一個connectiion,這對cpu來說可能有點負擔。
所以如果把KeepAlive打開,而你的MaxKeepAliveRequests又夠大,當client再download你server上的東西時(例如css.js.images…等等),就有可能再一個connection裡全部做完,而且對User來說體驗會比較好,因為等待的時間變短了。
不過KeepAlive打開也有缺點,它可能會造成記憶體使用增加,因為apache的程序需要等待下一個requests進來,所以connection會保持打開,直到你設定的keepAliveTimeout的時間到了為止。
所以KeepAlive主要有以下優缺點:
優點:
一、較好的performance
二、減少cpu使用量
缺點:
一、可能造成記憶體使用量增加
如何看一個網站有沒有設定KeepALive?開一下console就可以看到了。
一般來說網站我都會把KeepALive設On,因為performance會變好。
而MaxKeepAliveRequests我會調到可以超過網站頁面的所有requests數,這可以因網站不同而異,如果你有很多頁面包含一堆檔案,例如圖片,那麼可能就需要調高一點。
至於KeepAliveTimeout我不會設太高,因為設太高可能會cost太多記憶體使用量。
參考文章:
1.Apache Performance Tuning: KeepAlive to remove latency
一、DDoSim (Linux) : http://tinyurl.com/4xe3vjk
二、Loris :http://ha.ckers.org/slowloris/
三、Apachekiller : http://pastebin.com/9y9Atijn save as “whatever.pl” http://www.activestate.com/activeperl/downloads
四、pyloris: http://sourceforge.net/projects/pyloris/ |
參考1: http://pastebin.com/MTyHYXJe
參考2:http://motoma.io/pyloris/
五、hping : http://www.hping.org/download.php
六、Qslowloris(Windows) : http://www.megaupload.com/?d=3DV6R4ZL
七、Tor’s Hammer : http://packetstormsecurity.org/files/98831/Tors-Hammer-Slow-POST-Denial-Of-Service-Testing-Tool.htmlpwnt softwarez.
文章參考:
1.http://pastebin.com/shzUp9m9
2.http://www.r00tsec.com/2012/02/ddos-tool-list-from-anonymous.html
<?php function get_fb_likes($url) { $query = "select total_count,like_count,comment_count,share_count,click_count from link_stat where url='{$url}'"; $call = "https://api.facebook.com/method/fql.query?query=" . rawurlencode($query) . "&format=json"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $call); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($ch); curl_close($ch); return json_decode($output); } $fb_likes = reset( get_fb_likes("http://www.cnn.com") ); echo $fb_likes->total_count; echo $fb_likes->like_count; echo $fb_likes->comment_count; echo $fb_likes->share_count; echo $fb_likes->click_count; ?>
以下為自己製作五分鐘file cache程式
$cache_file = '/path/to/file_name'; if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 60 * 5 ))) { $file = file_get_contents($cache_file); } else { $file = 'xxx'; //若cache過期,則重新對mysql進行query,並存到$file file_put_contents($cache_file, $file, LOCK_EX); }
參考文件:
1.filemtime
2.file_put_contents
3.5-minute file cache in PHP