PHP的一些知識點研究(一)

來源:互聯網
上載者:User

一、基於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進行評價打分,通過計算不同使用者評分之間的相似程度,可以找到最近鄰居,根據最近鄰居的評價,產生推薦。

上述演算法都是運用了矩陣建模,使用到餘弦相似性、皮爾遜相似性等公式。使用中可將二者合二為一推薦。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.