1. php 的垃圾回收機制
PHP 可以自動進行內(nèi)存管理,清除不需要的對象姜性。
PHP 使用了引用計數(shù) (reference counting) GC 機制。
每個對象都內(nèi)含一個引用計數(shù)器 refcount髓考,每個 reference 連接到對象部念,計數(shù)器加 1。當(dāng) reference 離開生存空間或被設(shè)為 NULL,計數(shù)器減 1儡炼。當(dāng)某個對象的引用計數(shù)器為零時妓湘,PHP 知道你將不再需要使用這個對象,釋放其所占的內(nèi)存空間乌询。
參考 http://www.php.net/manual/zh/features.gc.refcounting-basics.php
2. session 與 cookie 的區(qū)別和聯(lián)系
區(qū)別:
1. 存放位置:Session 保存在服務(wù)器榜贴,Cookie 保存在客戶端。
2. 存放的形式:Session 是以對象的形式保存在服務(wù)器妹田,Cookie 以字符串的形式保存在客戶端唬党。
3. 用途:Cookies 適合做保存用戶的個人設(shè)置,愛好等鬼佣,Session 適合做客戶的身份驗證
4. 路徑:Session 不能區(qū)分路徑驶拱,同一個用戶在訪問一個網(wǎng)站期間,所有的 Session 在任何一個地方都可以訪問到晶衷。而 Cookie 中如果設(shè)置了路徑參數(shù)蓝纲,那么同一個網(wǎng)站中不同路徑下的 Cookie 互相是訪問不到的。
5. 安全性:Cookie 不是很安全晌纫,別人可以分析存放在本地的 COOKIE 并進行 COOKIE 欺騙税迷,考慮到安全應(yīng)當(dāng)使用 session
6. 大小以及數(shù)量限制:每個域名所煲含的 cookie 數(shù):IE7/8,FireFox:50 個,Opera30 個锹漱; Cookie 總大形毯:Firefox 和 Safari 允許 cookie 多達 4097 個字節(jié),Opera 允許 cookie 多達 4096 個字 節(jié)凌蔬,InternetExplorer 允許 cookie 多達 4095 個字節(jié)露懒;一般認為 Session 沒有大小和數(shù)量限制。
關(guān)系:
- Session 需要借助 Cookie 才能正常工作砂心。如果客戶端完全禁止 Cookie懈词,Session 將失效!因為 Session 是由應(yīng)用服務(wù)器維持的一個 服務(wù)器端的存儲空間辩诞,用戶在連接服務(wù)器時坎弯,會由服務(wù)器生成一個唯一的 SessionID, 用該 SessionID 為標識符來存取服務(wù)器端的 Session 存儲空間。而 SessionID 這一數(shù)據(jù)則是保存到客戶端译暂,用 Cookie 保存的抠忘,用戶提交頁面時,會將這一 SessionID 提交到服務(wù)器端外永,來存取 Session 數(shù)據(jù)崎脉。這一過程,是不用開發(fā)人員干預(yù)的伯顶。所以一旦客戶端禁用 Cookie囚灼,那么 Session 也會失效骆膝。
3. 如何修改 SESSION 的生存時間
設(shè)置瀏覽器保存的 sessionid 失效時間 setcookie (session_name (), session_id (), time () + $lifeTime, "/");
可以使用 SESSION 自帶的 session_set_cookie_params (86400); 來設(shè)置 Session 的生存期
通過修改 php.ini 中的 session.gc_maxlifetime 參數(shù)的值就可以改變 session 的生存時間
4. PHP 頁面重定向的方法有哪些
header('Location: http://www.baidu.com/') ;
echo '';
3 echo '';
5. PDO、adoDB灶体、PHPLib 數(shù)據(jù)庫抽象層比較
PHP 數(shù)據(jù)庫抽象層就是指阅签,封裝了數(shù)據(jù)庫底層操作的介于 PHP 邏輯程序代碼和數(shù)據(jù)庫之間的中間件。
PDO 以 PHP 5.1 為基礎(chǔ)進行設(shè)計蝎抽,它使用 C 語言做底層開發(fā)政钟,設(shè)計沿承 PHP 的特點,以簡潔易用為準樟结,從嚴格意義上講养交,PDO 應(yīng)該歸為 PHP 5 的 SPL 庫之一,而不應(yīng)該歸于數(shù)據(jù)抽象層狭吼,因為其本身和 MySQL 和 MySQLi 擴展庫的功能類似层坠。PDO 是不適合用在打算或者有可能會變更數(shù)據(jù)庫的系 統(tǒng)中的。
ADODB 不管后端數(shù)據(jù)庫如何刁笙,存取數(shù)據(jù)庫的方式都是一致的破花;
轉(zhuǎn)移數(shù)據(jù)庫平臺時,程序代碼也不必做太大的更動疲吸,事實上只需要改動數(shù)據(jù)庫配置文 件座每。提供了大量的拼裝方法,目的就是針對不同的數(shù)據(jù)庫在抽象層的底層對這些語句進行針對性的翻譯摘悴,以適應(yīng)不同的數(shù)據(jù)庫方言峭梳!但是這個抽象層似乎體積過于龐 大了,全部文件大概有 500K 左右蹂喻,如果你做一個很小的網(wǎng)站的話葱椭,用這個似乎大材小用了
PHPLib 可能是伴隨 PHP 一同成長最老的數(shù)據(jù)庫抽象層(但和 ADODB 相比,它只算是一個 MySQL 抽象類庫)口四,這個抽象類使用方法相當(dāng)簡單孵运,體積小,是小型網(wǎng)站開發(fā)不錯的選擇蔓彩。
PDO 提供預(yù)處理語句查詢治笨、錯誤異常處理、靈活取得查詢結(jié)果(返回數(shù)組赤嚼、字符串旷赖、對象、回調(diào)函數(shù))更卒、字符過濾防止 SQL 攻擊等孵、事務(wù)處理、存儲過程逞壁。
ADODB 支持 緩存查詢流济、移動記錄集锐锣、(HTML腌闯、分頁绳瘟、選擇菜單生成)、事務(wù)處理姿骏、輸出到文件糖声。 參考 http://apps.hi.baidu.com/share/detail/463678
6. 長連接、短連接的區(qū)別和使用
長連接:client 方與 server 方先建立連接分瘦,連接建立后不斷開蘸泻,然后再進行報文發(fā)送和接收。這種方式下由于通訊連接一直存在嘲玫。此種方式常用于 P2P 通信悦施。
短連接:Client 方與 server 每進行一次報文收發(fā)交易時才進行通訊連接,交易完畢后立即斷開連接去团。此方式常用于一點對多點通訊抡诞。C/S 通信。
長連接與短連接的使用時機:
長連接:
短連接多用于操作頻繁土陪,點對點的通訊昼汗,而且連接數(shù)不能太多的情況。每個 TCP 連 接的建立都需要三次握手鬼雀,每個 TCP 連接的斷開要四次握手顷窒。如果每次操作都要建立連接然后再操作的話處理速度會降低,所以每次操作下次操作時直接發(fā)送數(shù)據(jù) 就可以了源哩,不用再建立 TCP 連接鞋吉。例如:數(shù)據(jù)庫的連接用長連接,如果用短連接頻繁的通信會造成 socket 錯誤励烦,頻繁的 socket 創(chuàng)建也是對資源的浪 費谓着。
短連接:
web 網(wǎng)站的 http 服務(wù)一般都用短連接。因為長連接對于服務(wù)器來說要耗費一定 的資源崩侠。像 web 網(wǎng)站這么頻繁的成千上萬甚至上億客戶端的連接用短連接更省一些資源漆魔。試想如果都用長連接,而且同時用成千上萬的用戶却音,每個用戶都占有一個 連接的話改抡,可想而知服務(wù)器的壓力有多大。所以并發(fā)量大系瓢,但是每個用戶又不需頻繁操作的情況下需要短連接阿纤。
參考 http://www.cnblogs.com/Roberts/archive/2010/12/05/1986550.html
7. HTTP 協(xié)議詳解、應(yīng)用
http(超文本傳輸協(xié)議)是一個基于請求與響應(yīng)模式的夷陋、無狀態(tài)的欠拾、短連接胰锌、靈活、應(yīng)用層的協(xié)議藐窄,匙拭粒基于 TCP 的連接方式。
參考 http://blog.csdn.net/gueter/article/details/1524447 (http 協(xié)議詳解)
(HTTP 響應(yīng)狀態(tài)碼)
HTTP 響應(yīng)狀態(tài)碼
狀態(tài)代碼有三位數(shù)字組成荆忍,第一個數(shù)字定義了響應(yīng)的類別格带,且有五種可能取值:
1xx:指示信息 -- 表示請求已接收,繼續(xù)處理
2xx:成功 -- 表示請求已被成功接收刹枉、理解叽唱、接受
3xx:重定向 -- 要完成請求必須進行更進一步的操作
4xx:客戶端錯誤 -- 請求有語法錯誤或請求無法實現(xiàn)
5xx:服務(wù)器端錯誤 -- 服務(wù)器未能實現(xiàn)合法的請求
常見狀態(tài)代碼、狀態(tài)描述微宝、說明:
200 OK // 客戶端請求成功
400 Bad Request // 客戶端請求有語法錯誤棺亭,不能被服務(wù)器所理解
401 Unauthorized // 請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和 WWW-Authenticate 報頭域一起使用 403 Forbidden // 服務(wù)器收到請求蟋软,但是拒絕提供服務(wù)
404 Not Found // 請求資源不存在镶摘,eg:輸入了錯誤的 URL
500 Internal Server Error // 服務(wù)器發(fā)生不可預(yù)期的錯誤
503 Server Unavailable // 服務(wù)器超時 // 可能恢復(fù)正常
304 Not Modifed // 自從上次請求后,請求的網(wǎng)頁未修改過钟鸵。
// 服務(wù)器返回此響應(yīng)時钉稍,不會返回網(wǎng)頁內(nèi)容。
8. 異構(gòu)系統(tǒng)通訊中的通訊加密方案
參考 http://blog.csdn.net/linvo/article/details/5741942
9. socket 連接步驟
Socket(套接字)概念
套接字(socket)是通信的基石棺耍,是支持 TCP/IP 協(xié)議的網(wǎng)絡(luò)通信的基本操作單元贡未。它是網(wǎng)絡(luò)通信過程中端點的抽象表示,煲含進行網(wǎng)絡(luò)通信必須的五種信息:連接使用的協(xié)議蒙袍,本地主機的 IP 地址俊卤,本地進程的協(xié)議端口,遠地主機的 IP 地址害幅,遠地進程的協(xié)議端口消恍。
Socket 連接過程
建立 Socket 連接至少需要一對套接字,其中一個運行于客戶端以现,稱為 ClientSocket 狠怨,另一個運行于服務(wù)器端,稱為 ServerSocket
套接字之間的連接過程可以分為三個步驟:服務(wù)器監(jiān)聽邑遏,客戶端請求佣赖,連接確認。
服務(wù)器監(jiān)聽:是服務(wù)器端套接字并不定位具體的客戶端套接字记盒,而是處于等待連接的狀態(tài)憎蛤,實時監(jiān)控網(wǎng)絡(luò)狀態(tài)。
客戶端請求:是指由客戶端的套接字提出連接請求,要連接的目標是服務(wù)器端的套接字俩檬。為此萎胰,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號棚辽,然后就向服務(wù)器端套接字提出連接請求技竟。
連接確認:是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端
套接字的請求晚胡,建立一個新的線程灵奖,把服務(wù)器端套接字的描述發(fā)給客戶端嚼沿,一旦客戶端確認了此描述估盘,連接就建立好了。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài)骡尽,繼續(xù)接收其他客戶端套接字的連接請求遣妥。
10. TCP 協(xié)議,三次握手攀细、四次揮手
TCP 協(xié)議 (Transmission Control Protocol) 是主機對主機層的傳輸控制協(xié)議箫踩,提供可靠的連接服務(wù),采用三次握手確認建立一個連接谭贪,四次揮手斷開連接境钟。
位碼即 tcp 標志位,有 6 種標示:
SYN (synchronous 建立聯(lián)機) 同步
ACK (acknowledgement 確認)
PSH (push 傳送)
FIN (finish 結(jié)束)
RST (reset 重置)
URG (urgent 緊急)
11. php 中常用作用相似俭识,性能差異很大的函數(shù)區(qū)分及舉例
參考 http://apps.hi.baidu.com/share/detail/43169774
12. posix 及 perl 兼容正則比較慨削,及函數(shù)性能分析
POSIX 正則和 PCRE 正則最顯著的需要知道的不同點:
PCRE 函數(shù)需要模式以分隔符閉合.
POSIX 兼容正則沒有修正符。不像 POSIX, PCRE 擴展沒有專門用于大小寫不敏感匹配的函數(shù)套媚。取而
代之的是缚态,支持使用 /i 模式修飾符完成同樣的工作。其他模式修飾符同樣可用于改變匹配策略.
- POSIX 函數(shù)從最左面開始尋找最長的匹配堤瘤,但是 PCRE 在第一個合法匹配后停止玫芦。如果字符串 不匹
配這沒有什么區(qū)別,但是如果匹配本辐,兩者在結(jié)果和速度上都會有差別桥帆。為了說明這個不同,考慮下面的例子 (來自 Jeffrey Friedl 的《精通正則表達式》一書). 使用模式 one (self)?(selfsufficient)? 在字符串 oneselfsufficient 上匹配慎皱,PCRE 會匹配到 oneself, 但是使用 POSIX, 結(jié)果將是整個字符串 oneselfsufficient. 兩個子串都匹配原始字符串老虫,但是 POSIX 將 最長的最為結(jié)果.
PCRE 可用的修飾符: (i,s,m)
13. 實現(xiàn) PERL 正則表達式,抓取 html 文件 a 標簽的所有 href 超鏈接
正則:/<a\s+.*?href='"['" >]/is
$html = <<<HTML
HTML;
$matches = array();
preg_match_all ( "/<a\s+.*?href='"['">]/is", matches ); print_r ($matches [1]); // 輸出所有超鏈接
?>
14. 預(yù)定義變量宝冕、魔術(shù)變量张遭、魔術(shù)方法比較,及作用舉例
預(yù)定義變量(超級全局變量)
$GLOBALS
$_SERVER
$_GET
$_POST
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
魔術(shù)方法 http://apps.hi.baidu.com/share/detail/17851228
construct 和 destruct
__autoload
get 和 set
isset 和 unset
call 和 callStatic
__clone
__toString
sleep 和 wakeup
__invoke
魔術(shù)變量 http://apps.hi.baidu.com/share/detail/17851228
LINE
FILE
DIR
CLASS
FUNCTION
METHOD
NAMESPACE
15. spl 常用數(shù)據(jù)結(jié)構(gòu)類
16. PHP 設(shè)計模式
工廠模式
建立一個工廠(一個函數(shù)或一個類方法)來制造新的對象
工廠模式 是一種類地梨,它具有為您創(chuàng)建對象的某些方法菊卷。您可以使用工廠類創(chuàng)建對象缔恳,而不直接使用 new。這樣洁闰,如果您想要更改所創(chuàng)建的對象類型歉甚,只需更改該工廠即可。使用該工廠的所有代碼會自動更改扑眉。
單例模式
某些應(yīng)用程序資源是獨占的纸泄,因為有且只有一個此類型的資源。例如腰素,通過數(shù)據(jù)庫句柄到數(shù)據(jù)庫的連接是獨占的聘裁。您希望在應(yīng)用程序中共享數(shù)據(jù)庫句柄,因為在保持連接打開或關(guān)閉時弓千,它是一種開銷衡便,在獲取單個頁面的過程中更是如此。
單元素模式可以滿足此要求洋访。
PHP 中的單例模式(singleton pattern):指的是在 PHP 的應(yīng)用程序的范圍內(nèi)只對指定的類創(chuàng)建一個實例镣陕。
在 PHP 中使用單例模式的類通常擁有一個私有構(gòu)造函數(shù)和一個私有克隆函數(shù),以防 止用戶通過創(chuàng)建對象或者克隆對其進行實例化姻政。還有一個靜態(tài)私有成員變量 instance 靜態(tài)成員變量中汁展,以確保只有一個實例被創(chuàng)建鹊碍。
觀察者模式
命令鏈模式
策略模式
17. 負載均衡的 web 應(yīng)用服務(wù)器設(shè)計,例如 youku
用 PHP 做負載均衡指南
思考如何應(yīng)對以下問題善镰? 參考 http://www.examw.com/linux/all/142494/
在 Apache 負載均衡的情況下妹萨,做 PHP 開發(fā)如何考慮一下幾方面:
PHP 源文件在服務(wù)器、PHP 文件上傳處理炫欺、相關(guān)配置文件乎完、Session 會話放置、日志放置
Apache 負載均衡的原則:
參考 http://s456123123b.blog.163.com/blog/static/5632332220101080474642/
輪詢均衡策略 (輪詢轉(zhuǎn)發(fā)請求)
按權(quán)重分配均衡策略 (按響應(yīng)數(shù)量轉(zhuǎn)發(fā)請求)
權(quán)重請求響應(yīng)負載均衡策略 (按響應(yīng)流量轉(zhuǎn)發(fā)請求)
18. 如何優(yōu)化前端性能
- 頁面內(nèi)容的優(yōu)化
a) 降低請求數(shù)
合并 css品洛、js 文件树姨,集成 CSS 圖片
b) 減少交互通信量
壓縮技術(shù):壓縮 css、js 文件桥状,優(yōu)化圖像帽揪,減少 cookie 體積;
合理利用緩存:使用外部 js/css 文件辅斟,緩存 ajax转晰;
減少不必要的通信量:剔除無用腳本和樣式、推遲加載內(nèi)容、使用 GET 請求
c) 合理利用 “并行” 盡量避免重定向
慎用 Iframe 樣式表置于頂部 腳本放到樣式后面加載
d) 節(jié)約系統(tǒng)消耗
避免 CSS 表達式查邢、濾鏡
- 服務(wù)器的優(yōu)化
a) b)
c)
d)
19. yahoo 的 34 條前端優(yōu)化法則
減少 HTTP 請求蔗崎、利用 CDN 技術(shù)、 設(shè)置頭文件過期或者靜態(tài)緩存扰藕、Gzip 壓縮缓苛、把 CSS 放頂部、 把 JS 放底部邓深、避免 CSS 表達式未桥、將 JS 和 CSS 外鏈、減少 DNS 查找芥备、減小 JS 和 CSS 的體積冬耿、 避免重定向、刪除重復(fù)腳本门躯、 配置 ETags淆党、緩存 Ajax、盡早的釋放緩沖讶凉、
用 GET 方式進行 AJAX 請求、延遲加載組件山孔、 預(yù)加載組件懂讯、減少 DOM 元素數(shù)量、跨域分離組件台颠、
減少 iframe 數(shù)量褐望、不要出現(xiàn) 404 頁面、減小 Cookie串前、 對組件使用無 Cookie 的域名瘫里、減少 DOM 的訪問次數(shù)、開發(fā)靈活的事件處理句柄荡碾、使用 <link> 而非 @import谨读、避免過濾器的使用、優(yōu)化圖片坛吁、優(yōu)化 CSS Sprites劳殖、 不要在 HTML 中縮放圖片、縮小 favicon. ico 的大小并緩存它拨脉、保證組件在 25K 以下哆姻、將組件打煲進一個多部分的文檔中
20. 數(shù)據(jù)庫緩存的基本理論,參考 memcached
什么是 Memcached玫膀?
memcached 是高性能的分布式內(nèi)存緩存服務(wù)器矛缨。一般的使用目的是,通過緩存數(shù)據(jù)庫查詢結(jié)果,減少數(shù)據(jù)庫訪問次數(shù)箕昭,以提高動態(tài) Web 應(yīng)用的速度誉简、提高可擴展性。
雖然 memcached 使用了同樣的 “Key=>Value” 方式組織數(shù)據(jù)盟广,但是它和共享內(nèi)存闷串、APC 等本地緩存有非常大的區(qū)別。Memcached 是分布式的筋量,也就是說 它不是本地的烹吵。它基于網(wǎng)絡(luò)連接(當(dāng)然它也可以使用 localhost)方式完成服務(wù)澳泵,本身它是一個獨立于應(yīng)用的程序或守護進程(Daemon 方式)
PHP 與 Memcached
Memcached 使用 libevent 庫實現(xiàn)網(wǎng)絡(luò)連接服務(wù)生蚁,理論上可以處理無限多的連接,但是它和
基于反向代理的 Web 緩存藏姐;
基于反向代理的 Web 緩存
23. PHP 安全模式
php 安全模式:safe_mode=on|off
啟用 safe_mode 指令將對在共享環(huán)境中使用 PHP 時可能有危險的語言特性有所限制呀酸×狗洌可以將 safe_mode 是指為布爾值 on 來啟用,或者設(shè)置為 off 和腳本嘗試訪問的文件的 UID性誉,以此作為限制機制的基礎(chǔ)窿吩。如果 UID 相同,則知性腳本错览;否則纫雁,腳本失敗。
當(dāng)啟用安全模式時倾哺,一些限制將生效
1轧邪、 所有輸入輸出函數(shù)(例如 fopen ()、file () 和 require ())的適用會受到限制羞海,只能用于與調(diào)用這些函數(shù)的
腳本有相同擁有者的文件
2忌愚、 如果試圖通過函數(shù) popen ()、system () 或 exec () 等執(zhí)行腳本却邓,只有當(dāng)腳本位于 safe_mode_exec_dir
配置指令指定的目錄才可能
3硕糊、HTTP 驗證得到進一步加強,因為驗證腳本用于者的 UID 劃入驗證領(lǐng)域范圍內(nèi)申尤。此外癌幕,當(dāng)啟用安
全模式時,不會設(shè)置 PHP_AUTH昧穿。
4勺远、如果適用 MySQL 數(shù)據(jù)庫服務(wù)器,鏈接 MySQL 服務(wù)器所用的用戶名必須與調(diào)用 mysql_connect ()
的文件擁有者用戶名相同时鸵。
以下是一些和安全模式相關(guān)的配置選項
safe_mode_gid=on|off
safe_mode_include_dir=string
safe_mode_env_vars=string
safe_mode_exec_dir=string
safe_mode_protected_env_vars=string
24. 常見的 web 攻擊方式
常見攻擊
XSS (Cross Site Script) 胶逢,跨站腳本攻擊厅瞎。它指的是惡意攻擊者往 Web 頁面里插入惡意 html 代碼,當(dāng)用戶瀏覽該頁之時初坠,嵌入的惡意 html 代碼會被執(zhí)行和簸,從而達到惡意用戶的特殊 目的。XSS 屬于被動式的攻擊碟刺,因為其被動且不好利用锁保,所以許多人常呼略其危害性。但是隨著前端技術(shù)的不斷進步富客戶端的應(yīng)用越來越多半沽,這方面的問題越來 越受關(guān)注爽柒。舉個簡單例子 : 假如你現(xiàn)在是 sns 站點上一個用戶,發(fā)布信息的功能存在漏洞可以執(zhí)行 js 你在 此刻輸入一個 惡意腳本者填,那么當(dāng)前所有看到你新信息的人的瀏覽器都會執(zhí)行這個腳本彈出提示框 (很爽吧 彈出廣告 :))浩村,如果你做一些更為激進行為呢 后果難以想象。
CSRF (Cross Site Request Forgery)占哟,跨站點偽造請求心墅。顧名思義就是 通過偽造連接請求在用戶不知情的情況下,讓用戶以自己的身份來完成攻擊者需要達到的一些目的榨乎。csrf 的攻擊不同于 xss csrf 需要被攻擊者的主動行為觸發(fā)怎燥。這樣聽來似乎是有 “被釣魚” 的嫌疑。
多窗口瀏覽器這這方面似乎是有助紂為虐的嫌疑谬哀,因為打開的新窗口是具有當(dāng)前所有 會話的刺覆,如果是單瀏覽器窗口類似 ie6 就不會存在這樣的問題,因為每個窗口都是一個獨立的進程史煎。舉個簡單例子 : 你正在玩白社會, 看到有人發(fā)了一個連接驳糯,你點擊過去篇梭,然后這個連接里面?zhèn)卧炝艘粋€送禮物的表單,這僅僅是一個簡單的例子酝枢,問題可見一般恬偷。
cookie 劫持。通過獲取頁面的權(quán)限帘睦,在頁面中寫一個簡單的到惡意站點的請 求袍患,并攜帶用戶的 cookie 獲取 cookie 后通過 cookie 就可以直以被盜用戶的身份登錄站點。這就是 cookie 劫持竣付。舉個簡單例子: 某人寫了一篇很有意思的日志诡延,然后分享給大家,很多人都點擊查看并且分享了該日志古胆,一切似乎都很正常肆良,然而寫日志的人卻另有用心筛璧,在日志中偷偷隱藏了一個 對站外的請求,那么所有看過這片日志的人都會在不知情的情況下把自己的 cookie 發(fā)送給了 某人惹恃,那么他可以通過任意一個人的 cookie 來登錄這個人的賬戶夭谤。
SQL 注入攻擊
在 SQL 注入攻擊 中,用戶通過操縱表單或 GET 查詢字符串巫糙,將信息添加到數(shù)據(jù)庫查詢中朗儒。
DNS 攻擊
拒絕服務(wù)攻擊
拒絕服務(wù)攻擊即攻擊者想辦法讓目標機器停止提供服務(wù),是黑客常用的攻擊手段之参淹。
攻擊者進行拒絕服務(wù)攻擊醉锄,實際上讓服務(wù)器實現(xiàn)兩種效果:一是迫使服務(wù)器的緩沖區(qū)滿,不接收新的請求承二;二是使用 IP 欺騙榆鼠,迫使服務(wù)器把合法用戶的連接復(fù)位,影響合法用戶的連接
25. PHP 做好防盜鏈的基本思想 防盜鏈
什么是盜鏈亥鸠?
盜鏈是指服務(wù)提供商自己不提供服務(wù)的內(nèi)容妆够,通過技術(shù)手段繞過其它有利益的最終用戶界面 (如廣告),直接在自己的網(wǎng)站上向最終用戶提供其它服務(wù)提供商的服務(wù)內(nèi)容负蚊,騙取最終用戶的瀏覽和點擊率神妹。受益者不提供資源或提供很少的資源,而真正的服務(wù)提供商卻得不到任何的收益家妆。
網(wǎng)站盜鏈會大量消耗被盜鏈網(wǎng)站的帶寬鸵荠,而真正的點擊率也許會很小,嚴重損害了被盜鏈網(wǎng)站的利益伤极。 如何做防盜鏈蛹找?
不定期更名文件或者目錄
限制引用頁
原理是,服務(wù)器獲取用戶提交信息的網(wǎng)站地址哨坪,然后和真正的服務(wù)端的地址相比較庸疾, 如果一致則表明是站內(nèi)提交,或者為自己信任的站點提交当编,否則視為盜鏈届慈。實現(xiàn)時可以使用 HTTP_REFERER1 和 htaccess 文件 (需要啟用 mod_Rewrite),結(jié)合正則表達式去匹配用戶的每一個訪問請求忿偷。
文件偽裝
文件偽裝是目前用得最多的一種反盜鏈技術(shù)金顿,一般會結(jié)合服務(wù)器端動態(tài)腳本 (PHP/JSP/ASP)。實際上用戶請求的文件地址鲤桥,只是一個經(jīng)過偽裝的腳本文件揍拆,這個腳本文件會對用戶的請求作認證,一般會檢查 Session芜壁,Cookie 或 HTTP_REFERER 作為判斷是否為盜鏈的依據(jù)礁凡。而真實的文件實際隱藏在用戶不能夠訪問的地方高氮,只有用戶通過驗證以后才會返回給用戶
加密認證
這種反盜鏈方式,先從客戶端獲取用戶信息顷牌,然后根據(jù)這個信息和用戶請求的文件名 字一起加密成字符串 (Session ID) 作為身份驗證剪芍。只有當(dāng)認證成功以后,服務(wù)端才會把用戶需要的文件傳送給客戶窟蓝。一般我們會把加密的 Session ID 作為 URL 參數(shù)的一部分傳遞給服務(wù)器罪裹,由于這個 Session ID 和用戶的信息掛鉤,所以別人就算是盜取了鏈接运挫,該 Session ID 也無法通過身份認證状共,從而達到反盜鏈的目的。這種方式對于分布式盜鏈非常有效谁帕。
隨機附加碼
每次峡继,在頁面里生成一個附加碼,并存在數(shù)據(jù)庫里匈挖,和對應(yīng)的圖片相關(guān)碾牌,訪問圖片時和此附加碼對比,相同則輸出圖片儡循,否則輸出 404 圖片
加入水印
26. HTTP 請求頭信息和響應(yīng)頭信息
請求頭信息
POST /scp1.1.0/prs/new_rnaseqtask/run_go HTTP/1.1
Host: 172.30.4.102
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0
Accept: /
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://172.30.4.102/scp1.1.0/index.php/prs/new_rnaseqtask/index_continue/13/364 Content-Length: 1819
Cookie:
ci_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22e31556053ff9407a454f6a1e146d43eb%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%22172.16.23.42%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+rv%3A6.0%29+Gecko%2F2010010%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1314955607%3B%7D664b51a01ef99bac95f3e2206e79cb00;PHPSESSID=v33mlm1437lmop1fquta675vv4;username=linjinming; tk=1314955601855 Pragma: no-cache
Cache-Control: no-cache
響應(yīng)頭信息
HTTP/1.1 200 OK
Date: Fri, 02 Sep 2011 09:27:07 GMT
Server: Apache/2.2.3 (Red Hat)
X-Powered-By: PHP/5.1.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 31
Connection: close
Content-Type: text/html; charset=UTF-8
27. MySQL
MySQL 數(shù)據(jù)庫性能優(yōu)化
使用 mysqlreport舶吗;
正確使用索引:explain 分析查詢語句,組合索引择膝,索引副作用(占空間誓琼、update)
開啟慢查詢?nèi)罩尽⑹褂寐樵兎治龉ぞ?mysqlsla肴捉;
索引緩存腹侣、索引代價(插入更新索引);
表鎖齿穗,行鎖筐带,行鎖副作用(update 多時候變慢),在 select 和 update 混合的情況下缤灵,行鎖巧妙解決了讀寫互斥的問題;
開啟使用查詢緩存蓝晒;
修改臨時表內(nèi)存空間腮出;
開啟線程池;
MySQL Query 語句優(yōu)化的基本思路和原則
優(yōu)化需要優(yōu)化的 Query芝薇;
定位優(yōu)化對象的性能瓶頸胚嘲;
明確優(yōu)化目標;
從 Explaing 入手洛二;
多使用 Profile馋劈;
永遠用小結(jié)果集推動大的結(jié)果集攻锰;
盡可能在索引中完成排序;
只取自己需要的 Columns妓雾;
僅僅使用最有效的過濾條件娶吞;
盡可能避免復(fù)雜的 Join 和子查詢。
MySQL 中 MyISAM 引擎和 InnoDB 引擎的區(qū)別以及它們的性能
1:Innodb 支持事物械姻,Myisam 不支持
2:鎖定機制不一樣妒蛇,Myisam 支持表鎖定,而 Innodb 支持行鎖
3:Myisam 不支持外鍵楷拳,Innodb 能支持
4:Myisam 能在特定環(huán)境下支持全文索引绣夺,而 Innodb 不支持
5:Myisam 支持數(shù)據(jù)壓縮,Innodb 不支持
6:在數(shù)據(jù)存儲上欢揖,Myisam 占用的空間少陶耍,Innodb 相對多些
7:Myisam 在批量插入和查詢方面速度上有優(yōu)勢,而 Innodb 由于支持行鎖她混,所以在數(shù)據(jù)修改方面更勝一籌
MySQL 存儲引擎
MyISAM:不支持事務(wù)烈钞、表鎖和全文索引,操作速度快
InnoDB:行鎖設(shè)計产上、支持外鍵棵磷、支持安全事務(wù)
HEAP:數(shù)據(jù)存放在內(nèi)存中,臨時表
NDB Cluster:MySQL 的簇式數(shù)據(jù)庫引擎
CSV: 存儲引擎把數(shù)據(jù)以逗號分隔的格式存儲在文本文件中晋涣。
FEDERATED:存儲引擎表并不存放數(shù)據(jù)仪媒,它只是指向一臺遠程 MySQL 數(shù)據(jù)庫服務(wù)器上的表 Archive: 只支持 INSERT 和 SELECT 操作,壓縮后存儲谢鹊,非常適合存儲歸檔數(shù)據(jù)
Merge:允許將一系列等同的 MyISAM 表以邏輯方式組合在一起算吩,并作為 1 個對象引用它們 表類型,區(qū)分表類型
優(yōu)化表設(shè)計的常用思路
負載均衡的數(shù)據(jù)庫設(shè)計
數(shù)據(jù)類型及詳細定義佃扼,區(qū)分
28. Apache
性能優(yōu)化偎巢,配置,fastCGI 等幾種工作模式
29. Ajax
用 JS 實現(xiàn) Ajax 功能
var createXHR = function(){
}
var addURLParam = function(url, name, value){
}
var xhr = createXHR();
xhr.onreadystatechange = function(){
}
var url = 'testAjax.php';
addURLParam(url, 'name', 'linjm');
xhr.open('get',url,true);
xhr.send(NULL);
if(xhr.readyState == 4){ } if(xhr.status > 200 && xhr.status < 300 || xhr.status == 304){ } alert(xhr.responseText); url += (url.indexOf('?') == -1 ? '?' : '&'); url += encodeURIComponent(name) + '=' + encodeURIComponent(value); return url; if(window.XMLHttpRequest){ } return new XMLHttpRequest(); return new ActiveXObject('Microsoft.XMLHTTP'); throw new Error('No XMLHttpRequest available'); }else{ }else{}
30. Javascript
變量兼耀、作用域压昼、作用域鏈