在烏云上看到一個基于php的webshell攻擊。
高度隱蔽的webshell,使用普通的php代碼將真正的shell內(nèi)容經(jīng)過層層加密處理之后保存到圖片當(dāng)中,只留下一個url,并且url還是經(jīng)過加密處理的,所以對外看沒有任何特征可尋,使其很難被發(fā)現(xiàn),當(dāng)打開上述url時,,顯示的是404,而這個404頁面就是偽裝為404的木馬,只是把標(biāo)題改為了404 Not Found。
二、不用或少用else語句對于if else 有人追求結(jié)構(gòu)的完整,有if必有else,這看起來或許是不錯,不過有時會帶來代碼的繁瑣,而且可能會導(dǎo)致邏輯的混亂;可以以一種結(jié)果為基準(zhǔn),當(dāng)發(fā)生其他情況時做if判斷;即默認A,有異常則為B:
三、單頁面結(jié)構(gòu)(Single-page application)單頁面就是一切操作和布局都是在一個頁面下進行,不需要頁面跳轉(zhuǎn),根據(jù)不同的用戶請求加載不同的內(nèi)容。
優(yōu)點:頁面結(jié)構(gòu)簡單,數(shù)據(jù)量小,節(jié)省帶寬,響應(yīng)快,體驗好,易于開發(fā)、維護以及優(yōu)化;
缺點:使用ajax技術(shù),導(dǎo)致不利于seo。
四、讓搜索引擎抓取ajax的內(nèi)容主要針對上一案例的單頁面結(jié)構(gòu),程序通過#結(jié)構(gòu)url控制頁面內(nèi)容,但不會被搜索引擎抓取。
方法一:twitter使用"井號+感嘆號"的結(jié)構(gòu),但體驗不好而且繁瑣;
方法二:使用History API;在不刷新頁面的情況下,改變瀏覽器地址欄顯示的地址。步驟如下:
A、用History API替代井號結(jié)構(gòu),讓每個#號都變成正常路徑的URL,這樣搜索引擎就會抓取每一個網(wǎng)頁。
B、定義一個JavaScript函數(shù),處理html' target='_blank'>Ajax部分,根據(jù)網(wǎng)址抓取內(nèi)容。
C、定義鼠標(biāo)的click事件,使用History對象的popstate事件處理瀏覽器的"前進 / 后退"按鈕。
D、設(shè)置服務(wù)器端。
五、CURL_MULTI_INIT()以前一直使用curl_init(),最近看到有curl_multi_init();本以為會帶來更高效的代碼,看了下curl_multi的步驟,感覺相當(dāng)繁瑣,而且curl_multi可能會造成cpu過高、網(wǎng)頁假死等現(xiàn)象;同時對比了curl_init和curl_multi_init,多線程在速度上不一定優(yōu)于單線程,多線程只是能在同時處理多任務(wù),時間成本不一定低。附上curl_multi的使用步驟:
第一步:調(diào)用curl_multi_init;
第二步:循環(huán)調(diào)用curl_multi_add_handle;
這一步需要注意的是,curl_multi_add_handle的第二個參數(shù)是由curl_init而來的子handle;
第三步:持續(xù)調(diào)用curl_multi_exec;
第四步:根據(jù)需要循環(huán)調(diào)用curl_multi_getcontent獲取結(jié)果;
第五步:調(diào)用curl_multi_remove_handle,并為每個字handle調(diào)用curl_close;
第六步:調(diào)用curl_multi_close。
六、PHP strstr()函數(shù)strstr(string,search)搜索一個字符串在另一個字符串中的第一次出現(xiàn)。返回字符串的其余部分(從匹配點)。如果未找到所搜索的字符串,則返回 false。
search 必需。規(guī)定所搜索的字符串。如果該參數(shù)是數(shù)字,則搜索匹配數(shù)字 ASCII 值的字符。
參考:http://www.w3cschool.cn/func_string_strstr.html。所以,在給第二個參數(shù)時,如果需要匹配數(shù)字,建議加上引號。
七、論規(guī)范化的重要性家附近的一條久治不下的道路,通過劃分出人行通道、非機動車道、機動車道,使得問題一下子等到了解決。有時候靈活導(dǎo)致選擇過多,問題也會很多;程序亦如此,用戶輸入的靈活看起來很不錯,其實在后臺處理時是需要更多的成本,何不在前期就進行規(guī)范化,bug止于源頭,而不是亡羊補牢。規(guī)范化使一切流程變得簡單高效。
八、HHVMHHVM (HipHop Virtual Machine)會將PHP代碼轉(zhuǎn)換成高級別的字節(jié)碼(通常稱為中間語言)。然后在運行時通過即時(JIT)編譯器將這些字節(jié)碼轉(zhuǎn)換為x64的機器碼。
從各項數(shù)據(jù)表明,和Zend相比,HHVM變得更高效,CPU負載降低,平均頁面加載時間也縮短。HHVM的存在是為了優(yōu)化PHP運行性能,和php5相比,確實存在一些優(yōu)勢,還是坐等php7吧。
九、PHP源碼簽名收集器當(dāng)學(xué)習(xí)新的、不熟悉的源碼時,對代碼結(jié)構(gòu)獲取直觀的感受是很重要的。可以通過從每個源文件中逐行獲取標(biāo)點進行總結(jié),即文件簽名。這可以幫助考量代碼的復(fù)雜度。其實也就是提取代碼文件中固定的符號呈現(xiàn)文件的結(jié)構(gòu)。
參考:http://c2.com/doc/SignatureSurvey/
十、協(xié)同過濾推薦算法1、基于內(nèi)容的推薦算法的前提假設(shè)是:如果用戶喜歡物品a,那么用戶也應(yīng)該會喜歡與a類似的物品。基本思想是拆分內(nèi)容屬性,提取相同屬性的內(nèi)容進行推薦。
2、協(xié)同過濾推薦算法的前提假設(shè)是:如果用戶a與用戶b均對一系列相同的物品表示喜歡,那么a極有可能也喜歡b用戶喜歡的其他物品。基本過程是用戶首先為每個item進行評價打分,通過計算不同用戶評分之間的相似程度,可以找到最近鄰居,根據(jù)最近鄰居的評價,產(chǎn)生推薦。
上述算法都是運用了矩陣建模,使用到余弦相似度、皮爾遜相似度等公式。使用中可將二者合二為一推薦。
PHP編程鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點
疑難解答
圖片精選