一、基於PHP實現的webshell攻擊
在烏雲上看到一個基於php的webshell攻擊。
高度隱形webshell,使用普通的php代碼將真正的shell內容經過層層加密處理之後儲存到圖片當中,只留下一個url,並且url還是經過加密處理的,所以對外看沒有任何特徵可尋,使其很難被發現,當開啟上述url時,,顯示的是404,而這個404頁面就是偽裝為404的木馬,只是把標題改為了404 Not Found。
二、不用或少用else語句
對於if else 有人追求結構的完整,有if必有else,這看起來或許是不錯,不過有時會帶來代碼的繁瑣,而且可能會導致邏輯的混亂;可以以一種結果為基準,當發生其他情況時做if判斷;即預設A,有異常則為B;如下面右圖所示:
三、單頁面結構(Single-page application)
單頁面就是一切操作和布局都是在一個頁面下進行,不需要頁面跳轉,根據不同的使用者請求載入不同的內容。
優點:頁面結構簡單,資料量小,節省頻寬,響應快,體驗好,易於開發、維護以及最佳化;
缺點:使用ajax技術,導致不利於seo。
四、讓搜尋引擎抓取ajax的內容
主要針對上一案例的單頁面結構,程式通過#結構url控制頁面內容,但不會被搜尋引擎抓取。
方法一:twitter使用"井號+驚嘆號"的結構,但體驗不好而且繁瑣;
方法二:使用History API;在不重新整理頁面的情況下,改變瀏覽器地址欄顯示的地址。步驟如下:
A、用History API替代井號結構,讓每個#號都變成正常路徑的URL,這樣搜尋引擎就會抓取每一個網頁。
B、定義一個JavaScript函數,處理Ajax部分,根據網址抓取內容。
C、定義滑鼠的click事件,使用History對象的popstate事件處理瀏覽器的"前進 / 後退"按鈕。
D、設定伺服器端。
五、CURL_MULTI_INIT()
以前一直使用curl_init(),最近看到有curl_multi_init();本以為會帶來更高效的代碼,看了下curl_multi的步驟,感覺相當繁瑣,而且curl_multi可能會造成cpu過高、網頁假死等現象;同時對比了curl_init和curl_multi_init,多線程在速度上不一定優於單線程,多線程只是能在同時處理多任務,時間成本不一定低。附上curl_multi的使用步驟:
第一步:調用curl_multi_init;
第二步:迴圈調用curl_multi_add_handle;
這一步需要注意的是,curl_multi_add_handle的第二個參數是由curl_init而來的子handle;
第三步:持續調用curl_multi_exec;
第四步:根據需要迴圈調用curl_multi_getcontent擷取結果;
第五步:調用curl_multi_remove_handle,並為每個字handle調用curl_close;
第六步:調用curl_multi_close。
六、PHP strstr()函數
strstr(string,search)搜尋一個字串在另一個字串中的第一次出現。返回字串的其餘部分(從匹配點)。如果未找到所搜尋的字串,則返回 false。
search 必需。規定所搜尋的字串。如果該參數是數字,則搜尋匹配數字 ASCII 值的字元。
參考:http://www.w3cschool.cn/func_string_strstr.html。所以,在給第二個參數時,如果需要匹配數字,建議加上引號。
七、論正常化的重要性
家附近的一條久治不下的道路,通過劃分出人行通道、非機動車道、機動車道,使得問題一下子等到瞭解決。有時候靈活導致選擇過多,問題也會很多;程式亦如此,使用者輸入的靈活看起來很不錯,其實在幕後處理時是需要更多的成本,何不在前期就進行正常化,bug止於源頭,而不是亡羊補牢。正常化使一切流程變得簡單高效。
八、HHVM
HHVM (HipHop Virtual Machine)會將PHP代碼轉換成進階別的位元組碼(通常稱為中繼語言)。然後在運行時通過即時(JIT)編譯器將這些位元組碼轉換為x64的機器碼。
從各項資料表明,和Zend相比,HHVM變得更高效,CPU負載降低,平均頁面載入時間也縮短。HHVM的存在是為了最佳化PHP運行效能,和php5相比,確實存在一些優勢,還是坐等php7吧。
九、PHP源碼簽名收集器
當學習新的、不熟悉的源碼時,對代碼結構擷取直觀的感受是很重要的。可以通過從每個源檔案中逐行擷取標點進行總結,即檔案簽名。這可以協助考量代碼的複雜度。其實也就是提取代碼檔案中固定的符號呈現檔案的結構。
參考:http://c2.com/doc/SignatureSurvey/
十、協同過濾推薦演算法
1、基於內容的推薦演算法的前提假設是:如果使用者喜歡物品a,那麼使用者也應該會喜歡與a類似的物品。基本思想是拆分內容屬性,提取相同屬性的內容進行推薦。
2、協同過濾推薦演算法的前提假設是:如果使用者a與使用者b均對一系列相同的物品表示喜歡,那麼a極有可能也喜歡b使用者喜歡的其他物品。基本過程是使用者首先為每個item進行評價打分,通過計算不同使用者評分之間的相似程度,可以找到最近鄰居,根據最近鄰居的評價,產生推薦。
上述演算法都是運用了矩陣建模,使用到餘弦相似性、皮爾遜相似性等公式。使用中可將二者合二為一推薦。