導航:首頁 > 編程語言 > php防黑客

php防黑客

發布時間:2022-10-07 19:13:51

A. 如何配置php伺服器

配置php伺服器對於程序員很重要,但很多人都不會.,那麼如何配置php伺服器呢?下面是我收集整理的如何配置php伺服器,希望對大家有幫助~~

配置php伺服器的方法

工具/原料

windows server 2008 和 windows server 2003 伺服器操作系統

fastcgi、php、mysql安裝包

IIS6安裝配置PHP環境

11. 安裝IIS

IIS是windows平台下比較成熟的web服務,安裝方法也非常簡單。

打開“開始”菜單,點擊“管理您的伺服器”(如圖所示),點擊“添加或刪除角色”(如圖所示)。

3Windows server 2008伺服器防火牆配置

1) 在控制面板中打開網路和共享中心

2) 點擊“windows防火牆”彈出防火牆配置窗口,在此窗口中要確認防火牆服務已經開啟

3) 單擊“允許程序或功能通過Windows防火牆”彈出網路服務埠配置窗口,在此窗口中可以選擇允許打開埠並通信的網路服務,單擊“允許運行另一程序”來自定義開啟某一網路服務或埠

4用戶管理

系統中用戶的數量能越少越好,並且每個用戶都被用於特定的功能,如可以新建一個專門用於對網站進行匿名授權的賬戶(如條件允許,可以為每個網站新建一個獨立的賬戶進行分別授權,這些能夠隔離開各網站的授權,提高各網站的安全性,不至於一個網站被入侵後能夠有許可權訪問到其它網站的文件目錄)。另外最重要的一點是要為每個賬戶設置一個獨立且復雜的密碼,防止賬戶密碼被猜解和窮舉。

5文件系統許可權管理

l C盤只給administrators 和system許可權,其他的許可權不給,其他的盤也可以這樣設置,這里給的system許可權也不一定需要給,只是由於某些第三方應用程序是以服務形式啟動的,需要加上這個用戶,否則造成啟動不了。

l Windows目錄要加上給users的默認許可權,否則ASP和ASPX等應用程序就無法運行。其實沒有必要單獨設置Instsrv和temp等目錄許可權。

l 另外在c:/Documents and Settings/這里相當重要,後面的目錄里的許可權根本不會繼承從前的設置,如果僅僅只是設置了C盤給administrators許可權,而在All Users/Application Data目錄下會 出現everyone用戶有完全控制許可權,這樣入侵這可以跳轉到這個目錄,寫入腳本或只文件,再結合其他漏洞來提升許可權;

譬如利用serv-u的本地溢出提升許可權,或系統遺漏有補丁,資料庫的弱點,甚至社會工程學等等N多方法,在用做web/ftp伺服器的系統里,建議是將這些目錄都設置的鎖死。其他每個盤的目錄都按照這樣設置,每個盤都只給adinistrators許可權。

另外,還將:

net.exe

cmd.exe

tftp.exe

netstat.exe

regedit.exe

at.exe

attrib.exe

cacls.exe

format.exe

這些文件都設置只允許administrators訪問。

l 網站的目錄最好獨立到一個磁碟中,新建一個為網站匿名訪問而獨立授權的賬戶,讓此賬戶可以訪問和編輯此目錄,移除其它不必要的賬戶對此目錄的訪問許可權,能有效防止網站被入侵後從而涉及到整個系統被控制

END

日常維護建議

1定期運行安全軟體進行快速掃描

定期運行一下安全軟體,可以看到安全軟體的引擎或病毒庫是否已經更新到了最新版本,如果沒有可以即時查找原因,看是否是安全軟體未運行、升級埠被禁用或其它原因,雖然安全軟體可以在後台即時掃描各種文件操作,以防止病毒入侵,但有些惡意軟體、流氓軟體或插件則不是實時防護的,雖然這些軟體不會造成伺服器宕機,但也會影響伺服器性能。

2定期檢查防火牆埠配置

隨著伺服器上的網路服務越來越多,需要打開的網路埠也越來越多,但有些埠是不需要開放的,例如你安裝了一個資料庫軟體(mysql、oracle等),這些資料庫服務很可能只需要在你伺服器的內部訪問,就完全沒有必要讓其通過防火牆,這樣能夠提高伺服器的安全,伺服器對外提供的埠越少越好;

雖然在安裝網路服務的過程中,防火牆會提示你有網路埠正在打開,是否允許通過防火牆,但有些管理員沒有細心看提示,直接就同意了,造成了大量沒有必要打開的網路埠被打開了,特別是一些木馬或惡意軟體會混水摸魚,偽裝提示信息來誘騙管理員打開網路埠,造成大量的安全隱患。進入防火牆配置界面,選擇相應的埠或網路服務,點擊“詳細信息”則可以看到此項應用的詳細信息,根據這些信息來判斷其是否應該開啟這個埠。

3任務管理器中觀察有無可疑進程,了解系統資源使用情況

任務管理器可以簡單並快速的了解服務系統資源的使用情況,並即時查看系統運行的進程和他們佔用的系統資源,根據伺服器上已開啟的各種應用的服務來判斷哪些進程是非法的,哪些進程佔用的系統資源過多。了解到這些信息後就可以即時的對伺服器進行調整,特別是佔用資源過多的進程進行分析,看是否有什麼異常並即時進行調整。

l 觀察系統進程,並自定義進程屬性

查看網路使用情況

查看系統資源使用情況

檢查IIS,了解網站安裝情況

隨時了解伺服器上網站的安裝狀況,並做以下檢查:

1、看各個網站定義的主機頭是否異常

2、 綁定的域名是否完整

3、 主目錄設置是正確

4、用戶許可權設置是否合理

5、 查看IIS的應用程序池設置是否合理,每個池下面託管的網站是否過多,是否需要設置新的應用池,是否有多餘的應用池可以刪除。

查看系統日誌,仔細檢查錯誤、警告日誌發生的原因,並急時修復相應的問題。

檢查系統用戶,查看有無多餘,可疑用戶賬戶,查看每個賬戶所屬的用戶組,特別是administrators組下面的用戶。伺服器被入侵時會出現一些欺騙性的賬戶並被加入到administrators組中,特別留心新建的多餘賬戶,弄清這些賬戶的用途,如果發現是入侵者建立的賬戶,要即時查找賬戶是被創建的原因,並修復相應的漏洞。

檢查文件系統,確保磁碟被合理分區,各個分區應該有各自的功能,如系統、資料庫、網站、備份等。各個分區的用戶授權是不相同的,如系統、備份等不需要網站的專門授權賬戶訪問,資料庫分區需要對資料庫賬戶進行單獨的授權等。既然規劃好了文件分區和功能,並進行了相應的授權,就要防止文件被亂放,以免造成安全隱患。

還要經常檢查各種新建的文件夾和文件(特別是來歷不明,名稱畸形的隱藏文件夾和文件)這些都有可能是入侵者留下的入侵痕跡。

清除垃圾文件,隨時系統運行時間的增加,會產生很多的臨時文件和日誌文件,佔用寶貴的磁碟資源,如果磁碟的可用空間過小(特別是系統盤)還會影響伺服器性能。

1、臨時文件(安裝程序、系統升級、應用程序等產生的)產生的,主要在系統盤,可以看哪些文件夾的體積異常大,可分析其內部文件,確認是臨時文件後將其刪除

2、 日誌文件,主要是IIS產生的,這些日誌文件對於查看網站運行狀態、訪問歷史很有用,但日誌有時效性,如果超過其三個月就沒有什麼用處了,但它會佔用大量的磁碟空間,所以需要定期將其刪除。

定期檢查磁碟狀態並進行碎片整理,隨著系統運行時間的增長,特別是大量的IO操作後,磁碟上會產生大量的文件碎片,這些碎片過多則會嚴重影響伺服器性能,所以定期(建議一個月)進行磁碟碎片檢查,如果系統提醒需要進行碎片整理,則進行整理。

及時升級操作系統補丁,操作系統有各種大量的補丁,特別是一些重要的安全補丁需要即時升級,這樣會有效防止黑客和病毒入侵。

及時備份重要的文件、應用、資料庫。備份分為本地備份和異地備份,有條件的可以進行異地備份,備份是為了以防萬一,當數據丟失或應用損壞時,備份就是救命稻草,因此合理的備份計劃是非常有必要的。

B. 網站被黑客攻擊怎麼辦呀我是一個php網站,我的upload文件夾下被黑客上傳了無數個相同的gif

1:一個用戶上傳圖片次數有限
2:限制上傳圖片的間隔時間
3:上傳圖片的時候多傳遞個hash值,每次都不一樣,判斷是否是系統分配的hash值

C. 如何應對黑客攻擊提高網站安全性

當人們聽到「黑客」一詞,就感覺到了毛骨悚然,不過網站遭遇黑客的攻擊,這在當今社會幾乎是很常見的事情了,目前互聯網上的網站總是被無時無刻的監視和被攻擊狀態,各位站長經常性的去看網站日誌情況,總會有RAR或PHP文件的請求,許多正是被有目的的用戶進行批量的探索,一旦網站管理員進行本伺服器備份,那麼RAR格式的文件將給直接下載,這會給網站造成很大的損失。那麼建網站時如何預防和應對黑客攻擊提高網站安全性呢?
第一:網站被黑或者被攻擊的原因有哪些?
當然有很大一部分是屬於經濟原因,但並非所有攻擊都是因為經濟緣故。大體來講,導致黑客攻擊的原因有:
1.受雇於他人的黑客行為,如商業競爭對手惡意競爭通過黑客手法攻擊;如據互聯安全網報道:黑客受雇惡意文檔攻擊西方企業,這類攻擊就屬於商業競爭行為。
2. 受商業利益驅使,敲詐勒索、盜取各類銀行帳戶信息及虛擬財產的黑客攻擊行為;如各類釣魚行為都屬於商業利益驅使的攻擊行為。
3.惡作劇型的黑客行為,如隨意篡改網站首頁;這類黑客攻擊往往是一些新手的嘗試行為,更多的是為了一種虛榮心的滿足。
4.搜集肉雞,攻擊一個網站後,掛上網頁木馬(可導致瀏覽該網站者中毒而使自己的計算機成為入侵者的肉雞);這類是為其他類攻擊原因作準備,據從互聯安全網社區獲得的案例,有黑客竟然通過這類行為掌握了數萬台的肉雞。
5.打擊報復型,如網站服務不好而引起的商業糾紛等無法處理的時候會有黑客攻擊行為;如前一段時間某威客網站經常遭受莫名攻擊導致無法正常提供服務,有權威人士就指出乃是因為其網站客戶服務不到位,無故刁難客戶導致黑客人士不平進而遭受DDOS攻擊,根本不是所謂其自己據稱的遭受競爭對手惡意攻擊。
6.竊取資料型,此類攻擊主要針對一些資料網站包括收費用戶網站,一般攻擊者不會破壞伺服器及網站數據,但會悄悄將數據偷走據為已有;如盜取網站管理員的密碼之類。
7.菜鳥測試型,這類一般為一些正在學習黑客技術的人通過攻擊網站練習的人駭客新手,這類攻擊一般攻擊經驗少,容易對網站數據造成破壞。
第二:如何預防網站被黑客攻擊呢?
1、首先要重視網站安全建設,從安全制度、安全硬體、安全人員配備等都要有一定的規劃。如果網站的擁有者都不重視網站安全,僅把網站安全當作一個技術問題,那就是會帶來嚴重的麻煩。
2、注入漏洞必須補上
什麼是注入漏洞,怎麼產生的,這些我也不好意思在這說了,網路上很多關於這方面的介紹。比如說你的網站是動態的(假設這個網址:www在網址後面加上and 1=1 顯示正常,and 1=2 顯示錯誤,說明你的網站就是存在注入漏洞。網上有很多注入工具還可以手工注入,可以達到破解管理員的帳號密碼,而現在網上也流行cookie注入,比如說你and 1=1 和and 1=2 都顯示錯誤,你沒把cookie注入的漏洞補上的話,也是會造成黑客入侵的。這些修補漏洞代碼網上很多,大家可以去下載。
3、修改資料庫地址,並做好資料庫備份
資料庫地址,這很重要,比如說你是用新雲,動易的,而且你因為方便沒有去習慣資料庫地址,這樣你就會給黑客所利用。所以一定要改。同時要做好數據備份,防止不幸後可以將受攻擊的損失降到最低。
4、同IP伺服器站點綁定的選擇
如果你不是自己用獨立的伺服器,那伺服器綁定的選擇也很重要,黑客會利用旁註的方法入侵網站,比如說你的網站黑客沒有找到漏洞,他會利用和你綁定的網站上入手。個人認為不要和黑客站和網色網站所綁在一起。
5、用戶名和密碼長度設置復雜的
用戶名和密碼不要用默然的,比如說admin,admin.用戶名和密碼長度設置復雜的,比如說,現在網上有個在線的破MD5加密的網站,有些是要收費的,而且最長的只破到12位。當然不排除黑客用字典工具破解。密碼個人認為一定要拼音與數字結合,有標點符號是最好。
6、進行安全檢查,主動進行滲透檢測,最好考慮聯系專業的第三方安全服務機構進行獨立和專業的滲透檢測,避免內部力量的不足和非獨立性。
第三:網站被黑客攻擊了,別掛木馬了怎麼辦?
如何發現伺服器被入侵,應立即關閉所有網站服務,暫停至少3小時。下載伺服器日誌(如果沒被刪除的話),並且對伺服器進行全盤殺毒掃描。
如果網站打開速度明顯比之前的速度慢,排除了自身網路的原因,那麼就有可能是網站中毒了,我們可以從以下幾點入手:
1、robots屏蔽
使用robots屏蔽所有搜索,禁止搜索繼續抓取;或停止網站內容更新只釋放網站首頁,並且所有訪問均報503狀態。這是筆者認為知道網站被黑客攻擊時最直接的處理方式,當然這對於高權重的網站不太適用,只適合於新網站或企業類網站。
2、清理木馬和黑客程序
查看源代碼:發現網站代碼最頁頭或最頁尾被嵌入了比如<script>或者<iframe>這樣的字元,說明被掛上了木馬。通過FTP查看文件的修改時間:一般來說,黑客要修改網站文件,那麼改文件的修改的時間就會跟改變,如果某些文件的修改時間明顯比其他文件要晚,而我們自己並沒有改動過,那麼說明這個文件已經被黑客修改過了,可能已經中毒或掛上了木馬,查看源文件就可以知。不過很多時候,黑客的木馬程序植入到圖片中,這是一個非常大的處理量,在處理前將網站伺服器中所有的文件實行最高許可權的限制,不允許文件被復制和修改。再利用查殺木馬軟體進行查殺,不過對於高權重網站如在第一時間無法及時處理黑客木馬的情況下,建議直接使用備用伺服器。
3、要明白網站被掛木馬的原理
一般來說是由於網站本身採用的程序是來自網路免費程序,其中的代碼和漏洞都為一些黑客所熟知,攻擊起來易如反掌,尤其是一些asp程序。所以網站建設盡量少用網路上的免費程序搭建;黑客在找到漏洞之後就會上傳黑客木馬到網站中,這個木馬具有刪除整個網站,修改所有代碼的功能,但大部分黑客會在源網站的代碼中加入他們的一些木馬和病毒文件,然後訪問的人中毒成為他們的肉雞,或者達到一些不為人知的目的。
4、提交劫持地址
谷歌和網路都有提交提交的地址,大家將網站被劫持的地址提交給他們,告知他們網站被攻擊和域名被劫持,這樣保留住網站的收錄和排名,當然這和屏蔽搜索是同一步驟,只是將先後順序筆者理順。這時候可能很多站長在搜索中搜索自己網站的開始出現危險的警告,這時候無需管他,只要處理完木馬和提交後,這個警告就會自動去除,一般在你清理完木馬開放網站後的三天內。

D. 為什麼電腦會被黑客入侵可以預防么

為避免您的網站被黑客攻擊,單仁資訊建議您需要在平時做大量的工作,例如:

1、定期對網站進行安全檢測,通過查毒工具維護網站安全。
2、網站建設的過程中,需要多去維護,定期檢查網頁中是否存在漏洞與病毒,防止資料庫資料發生故障。
3、修改管理員的用戶名,有效提高後台管理員的密碼強度,強密碼應該包括14個字元,包括大小寫字母、數字和符號在內的組合。嚴格控制不同級別用戶的訪問許可權。
4、選擇安全性、穩定性、價格和客戶服務好的主機服務提供商。
5、會員的上載文件功能安全性要把控好,很多木馬都是通過上載,比如ASA,ASP。PHP,CER等這些都能夠作為木馬上載的。
6、需要的程序一定要通過正規途徑去下載,避免出現不正規程序影響網站運作與安全,並且建議在下載之後更改程序的資料庫名稱自己存放路徑,並且更改資料庫名稱而且使其具有復雜性。
7、注重程序的更新,保持網站程序是全新的版本,因為新版本不僅更加能夠對付各種病毒而且還能夠保護網站數據不受損壞。
8、如果網站經常遭到被黑,可以選擇重新安裝伺服器,重新上傳備份的網站文件。
網站一旦發現被黑,管理員應當盡量處理,將非網站的代碼去除,修改網站用戶名與密碼,把網站的損失盡可能地降到最低。

E. 網站不是使用php開發的,為什麼漏洞掃描還能有php漏洞呢

沒有具體的漏洞說明還真不好說
1、你的網種不是php開發的,但有運行php程序的許可權,所以有php漏洞提示。
2、通用型的技術漏洞,不論什麼語言都可以存在的,掃描的圖個方便,直接說是php漏洞。
3、A語言請求的反應是正常的,但php請求的反應異常,屬於中槍型,可以不理。
4、真想不出,可能漏洞的名字,就叫「php漏洞」

F. 怎麼把網頁首頁index.php進行保護

怎麼把網頁首頁index.php進行保護?1
/2
首先說下一般虛擬主機做網站的時候不顯示後綴名的方法:
如果你買的是別人的虛擬主機的話,我們首先登陸虛擬主機管理後台,然後去修改首頁默認設置,然後我們把網站根目錄下的index.php(這個得看你網站下面主頁名字是什麼)移動到最上面就行。每個虛擬主機都有後台管理地址的,如果你是讓網路公司給你買的虛擬空間的話,那就讓他們幫你設置一下,這個其實很簡單的!
2
/2
如果是自己的伺服器的話:
如果你有自己的伺服器,你只需要修改一下默認文檔就行了。這個默認的首頁要跟你根目錄下面的文檔保持一致。

G. 伺服器端PHP腳本,怎樣保證網站不被黑

建站一段時間後總能聽得到什麼什麼網站被掛馬,什麼網站被掛黑鏈。好像入侵掛馬網站被黑什麼的似乎是件很簡單的事情。其實,入侵不簡單,簡單的是你的網站的必要安全措施並未做好。
有條件建議找專業做網站安全的sine安全來做安全維護。

一:掛馬預防措施:

1、建議用戶通過ftp來上傳、維護網頁,盡量不安裝asp的上傳程序。

2、對asp上傳程序的調用一定要進行身份認證,並只允許信任的人使用上傳程序。這其中包括各種新聞發布、商城及論壇程

序,只要可以上傳文件的asp都要進行身份認證!

3、asp程序管理員的用戶名和密碼要有一定復雜性,不能過於簡單,還要注意定期更換。

4、到正規網站下載asp程序,下載後要對其資料庫名稱和存放路徑進行修改,資料庫文件名稱也要有一定復雜性。

5、要盡量保持程序是最新版本。

6、不要在網頁上加註後台管理程序登陸頁面的鏈接。

7、為防止程序有未知漏洞,可以在維護後刪除後台管理程序的登陸頁面,下次維護時再通過ftp上傳即可。

8、要時常備份資料庫等重要文件。

9、日常要多維護,並注意空間中是否有來歷不明的asp文件。記住:一分汗水,換一分安全!

10、一旦發現被入侵,除非自己能識別出所有木馬文件,否則要刪除所有文件。

11、定期對網站進行安全的檢測,具體可以利用網上一些工具,如sinesafe網站掛馬檢測工具!

二:掛馬恢復措施:

1.修改帳號密碼

不管是商業或不是,初始密碼多半都是admin。因此你接到網站程序第一件事情就是「修改帳號密碼」。帳號

密碼就不要在使用以前你習慣的,換點特別的。盡量將字母數字及符號一起。此外密碼最好超過15位。尚若你使用

SQL的話應該使用特別點的帳號密碼,不要在使用什麼什麼admin之類,否則很容易被入侵。

2.創建一個robots.txt

Robots能夠有效的防範利用搜索引擎竊取信息的駭客。

3.修改後台文件

第一步:修改後台里的驗證文件的名稱。

第二步:修改conn.asp,防止非法下載,也可對資料庫加密後在修改conn.asp。

第三步:修改ACESS資料庫名稱,越復雜越好,可以的話將數據所在目錄的換一下。

4.限制登陸後台IP

此方法是最有效的,每位虛擬主機用戶應該都有個功能。你的IP不固定的話就麻煩點每次改一下咯,安全第一嘛。

5.自定義404頁面及自定義傳送ASP錯誤信息

404能夠讓駭客批量查找你的後台一些重要文件及檢查網頁是否存在注入漏洞。

ASP錯誤嘛,可能會向不明來意者傳送對方想要的信息。

6.慎重選擇網站程序

注意一下網站程序是否本身存在漏洞,好壞你我心裡該有把秤。

7.謹慎上傳漏洞

據悉,上傳漏洞往往是最簡單也是最嚴重的,能夠讓黑客或駭客們輕松控制你的網站。

可以禁止上傳或著限制上傳的文件類型。不懂的話可以找你的網站程序提供商。

8. cookie 保護

登陸時盡量不要去訪問其他站點,以防止 cookie 泄密。切記退出時要點退出在關閉所有瀏覽器。

9.目錄許可權

請管理員設置好一些重要的目錄許可權,防止非正常的訪問。如不要給上傳目錄執行腳本許可權及不要給非上傳目錄給於寫入權。

10.自我測試

如今在網上黑客工具一籮筐,不防找一些來測試下你的網站是否OK。

11.例行維護

a.定期備份數據。最好每日備份一次,下載了備份文件後應該及時刪除主機上的備份文件。

b.定期更改資料庫的名字及管理員帳密。

c.借WEB或FTP管理,查看所有目錄體積,最後修改時間以及文件數,檢查是文件是否有異常,以及查看是否有異常的賬號。

網站被掛馬一般都是網站程序存在漏洞或者伺服器安全性能不達標被不法黑客入侵攻擊而掛馬的。

網站被掛馬是普遍存在現象然而也是每一個網站運營者的心腹之患。

您是否因為網站和伺服器天天被入侵掛馬等問題也曾有過想放棄的想法呢,您否也因為不太了解網站技術的問題而耽誤了網站的運營,您是否也因為精心運營的網站反反復復被一些無聊的黑客入侵掛馬感到徬彷且很無耐。有條件建議找專業做網站安全的sine安全來做安全維護。

H. php有什麼安全規則,有哪些

php安全篇值過濾用戶輸入的人參數
規則 1:絕不要信任外部數據或輸入
關於Web應用程序安全性,必須認識到的第一件事是不應該信任外部數據。外部數據(outside data) 包括不是由程序員在PHP代碼中直接輸入的任何數據。在採取措施確保安全之前,來自任何其他來源(比如 GET 變數、表單 POST、資料庫、配置文件、會話變數或 cookie)的任何數據都是不可信任的。
例如,下面的數據元素可以被認為是安全的,因為它們是在PHP中設置的。
復制代碼 代碼如下:
<?php
$myUsername = 'tmyer';
$arrayUsers = array('tmyer', 'tom', 'tommy');define(」GREETING」, 'hello there' . $myUsername);?>
但是,下面的數據元素都是有瑕疵的。
清單 2. 不安全、有瑕疵的代碼
復制代碼 代碼如下:
<?php
$myUsername = $_POST['username']; //tainted!
$arrayUsers = array($myUsername, 'tom', 'tommy'); //tainted!
define(」GREETING」, 'hello there' . $myUsername); //tainted!
?>
為 什麼第一個變數 $myUsername 是有瑕疵的?因為它直接來自表單 POST。用戶可以在這個輸入域中輸入任何字元串,包括用來清除文件或運行以前上傳的文件的惡意命令。您可能會問,「難道不能使用只接受字母 A-Z 的客戶端(Javascrīpt)表單檢驗腳本來避免這種危險嗎?」是的,這總是一個有好處的步驟,但是正如在後面會看到的,任何人都可以將任何錶單下載 到自己的機器上,修改它,然後重新提交他們需要的任何內容。
解決方案很簡單:必須對 $_POST['username'] 運行清理代碼。如果不這么做,那麼在使用 $myUsername 的任何其他時候(比如在數組或常量中),就可能污染這些對象。
對用戶輸入進行清理的一個簡單方法是,使用正則表達式來處理它。在這個示例中,只希望接受字母。將字元串限制為特定數量的字元,或者要求所有字母都是小寫的,這可能也是個好主意。
清單 3. 使用戶輸入變得安全
復制代碼 代碼如下:
<?php
$myUsername = cleanInput($_POST['username']); //clean!
$arrayUsers = array($myUsername, 'tom', 'tommy'); //clean!
define(」GREETING」, 'hello there' . $myUsername); //clean!
function cleanInput($input){
$clean = strtolower($input);
$clean = preg_replace(」/[^a-z]/」, 「」, $clean);$clean = substr($clean,0,12);
return $clean;
}
?>
規則 2:禁用那些使安全性難以實施的 PHP 設置已經知道了不能信任用戶輸入,還應該知道不應該信任機器上配置 PHP 的方式。例如,要確保禁用 register_globals。如果啟用了 register_globals,就可能做一些粗心的事情,比如使用 $variable 替換同名的 GET 或 POST 字元串。通過禁用這個設置,PHP 強迫您在正確的名稱空間中引用正確的變數。要使用來自表單 POST 的變數,應該引用 $_POST['variable']。這樣就不會將這個特定變數誤會成 cookie、會話或 GET 變數。
規則 3:如果不能理解它,就不能保護它
一些開發人員使用奇怪的語法,或者將語句組織得很緊湊,形成簡短但是含義模糊的代碼。這種方式可能效率高,但是如果您不理解代碼正在做什麼,那麼就無法決定如何保護它。
例如,您喜歡下面兩段代碼中的哪一段?
清單 4. 使代碼容易得到保護
復制代碼 代碼如下:
<?php
//obfuscated code
$input = (isset($_POST['username']) ? $_POST['username']:」);//unobfuscated code
$input = 」;
if (isset($_POST['username'])){
$input = $_POST['username'];
}else{
$input = 」;
}
?>
在第二個比較清晰的代碼段中,很容易看出 $input 是有瑕疵的,需要進行清理,然後才能安全地處理。
規則 4:「縱深防禦」 是新的法寶
本教程將用示例來說明如何保護在線表單,同時在處理表單的 PHP 代碼中採用必要的措施。同樣,即使使用 PHP regex 來確保 GET 變數完全是數字的,仍然可以採取措施確保 SQL 查詢使用轉義的用戶輸入。
縱深防禦不只是一種好思想,它可以確保您不會陷入嚴重的麻煩。
既然已經討論了基本規則,現在就來研究第一種威脅:SQL 注入攻擊。
防止 SQL 注入攻擊
在 SQL 注入攻擊 中,用戶通過操縱表單或 GET 查詢字元串,將信息添加到資料庫查詢中。例如,假設有一個簡單的登錄資料庫。這個資料庫中的每個記錄都有一個用戶名欄位和一個密碼欄位。構建一個登錄表單,讓用戶能夠登錄。
清單 5. 簡單的登錄表單
復制代碼 代碼如下:
<html>
<head>
<title>Login</title>
</head>
<body>
<form action=」verify.php」 method=」post」>
<p><label for='user'>Username</label>
<input type='text' name='user' id='user'/>
</p>
<p><label for='pw'>Password</label>
<input type='password' name='pw' id='pw'/>
</p>
<p><input type='submit' value='login'/></p>
</form>
</body>
</html>
這個表單接受用戶輸入的用戶名和密碼,並將用戶輸入提交給名為 verify.php 的文件。在這個文件中,PHP 處理來自登錄表單的數據,如下所示:
清單 6. 不安全的 PHP 表單處理代碼
復制代碼 代碼如下:
<?php
$okay = 0;
$username = $_POST['user'];
$pw = $_POST['pw'];
$sql = 「select count(*) as ctr from users where username='」.$username.」' and password='」. $pw.」' limit 1″;$result = mysql_query($sql);
while ($data = mysql_fetch_object($result)){if ($data->ctr == 1){
//they're okay to enter the application!
$okay = 1;
}
}
if ($okay){
$_SESSION['loginokay'] = true;
header(」index.php」);
}else{
header(」login.php」);
}
?>
這 段代碼看起來沒問題,對嗎?世界各地成百(甚至成千)的 PHP/MySQL 站點都在使用這樣的代碼。它錯在哪裡?好,記住 「不能信任用戶輸入」。這里沒有對來自用戶的任何信息進行轉義,因此使應用程序容易受到攻擊。具體來說,可能會出現任何類型的 SQL 注入攻擊。
例如,如果用戶輸入 foo 作為用戶名,輸入 ' or '1′='1 作為密碼,那麼實際上會將以下字元串傳遞給 PHP,然後將查詢傳遞給 MySQL:
復制代碼 代碼如下:
<?php
$sql = 「select count(*) as ctr from users where username='foo' and password=」 or '1′='1′ limit 1″;?>
這個查詢總是返回計數值 1,因此 PHP 會允許進行訪問。通過在密碼字元串的末章節附註入某些惡意 SQL,黑客就能裝扮成合法的用戶。
解 決這個問題的辦法是,將 PHP 的內置 mysql_real_escape_string() 函數用作任何用戶輸入的包裝器。這個函數對字元串中的字元進行轉義,使字元串不可能傳遞撇號等特殊字元並讓 MySQL 根據特殊字元進行操作。清單 7 展示了帶轉義處理的代碼。
清單 7. 安全的 PHP 表單處理代碼
復制代碼 代碼如下:
<?php
$okay = 0;
$username = $_POST['user'];
$pw = $_POST['pw'];
$sql = 「select count(*) as ctr from users where username='」.mysql_real_escape_string($username).」' and password='」. mysql_real_escape_string($pw).」' limit 1″;$result = mysql_query($sql);
while ($data = mysql_fetch_object($result)){if ($data->ctr == 1){
//they're okay to enter the application!
$okay = 1;
}
}
if ($okay){
$_SESSION['loginokay'] = true;
header(」index.php」);
}else{
header(」login.php」);
}
?>
使用 mysql_real_escape_string() 作為用戶輸入的包裝器,就可以避免用戶輸入中的任何惡意 SQL 注入。如果用戶嘗試通過 SQL 注入傳遞畸形的密碼,那麼會將以下查詢傳遞給資料庫:
select count(*) as ctr from users where username='foo' and password='\' or \'1\'=\'1′ limit 1″資料庫中沒有任何東西與這樣的密碼匹配。僅僅採用一個簡單的步驟,就堵住了 Web 應用程序中的一個大漏洞。這里得出的經驗是,總是應該對 SQL 查詢的用戶輸入進行轉義。
但是,還有幾個安全漏洞需要堵住。下一項是操縱 GET 變數。
防止用戶操縱 GET 變數
在前一節中,防止了用戶使用畸形的密碼進行登錄。如果您很聰明,應該應用您學到的方法,確保對 SQL 語句的所有用戶輸入進行轉義。
但 是,用戶現在已經安全地登錄了。用戶擁有有效的密碼,並不意味著他將按照規則行事 —— 他有很多機會能夠造成損害。例如,應用程序可能允許用戶查看特殊的內容。所有鏈接指向 template.php?pid=33 或 template.php?pid=321 這樣的位置。URL 中問號後面的部分稱為查詢字元串。因為查詢字元串直接放在 URL 中,所以也稱為 GET 查詢字元串。
在 PHP 中,如果禁用了 register_globals,那麼可以用 $_GET['pid'] 訪問這個字元串。在 template.php 頁面中,可能會執行與清單 8 相似的操作。
清單 8. 示例 template.php
復制代碼 代碼如下:
<?php
$pid = $_GET['pid'];
//we create an object of a fictional class Page$obj = new Page;
$content = $obj->fetchPage($pid);
//and now we have a bunch of PHP that displays the page?>
這 里有什麼錯嗎?首先,這里隱含地相信來自瀏覽器的 GET 變數 pid 是安全的。這會怎麼樣呢?大多數用戶沒那麼聰明,無法構造出語義攻擊。但是,如果他們注意到瀏覽器的 URL 位置域中的 pid=33,就可能開始搗亂。如果他們輸入另一個數字,那麼可能沒問題;但是如果輸入別的東西,比如輸入 SQL 命令或某個文件的名稱(比如 /etc/passwd),或者搞別的惡作劇,比如輸入長達 3,000 個字元的數值,那麼會發生什麼呢?
在這種情況下,要記住基本規則,不要信任用戶輸入。應用程序開發人員知道 template.php 接受的個人標識符(PID)應該是數字,所以可以使用 PHP 的 is_numeric()函數確保不接受非數字的 PID,如下所示:
清單 9. 使用 is_numeric() 來限制 GET 變數復制代碼 代碼如下:
<?php
$pid = $_GET['pid'];
if (is_numeric($pid)){
//we create an object of a fictional class Page$obj = new Page;
$content = $obj->fetchPage($pid);
//and now we have a bunch of PHP that displays the page}else{
//didn't pass the is_numeric() test, do something else!
}
?>
這個方法似乎是有效的,但是以下這些輸入都能夠輕松地通過 is_numeric() 的檢查:
100 (有效)
100.1 (不應該有小數位)
+0123.45e6 (科學計數法 —— 不好)
0xff33669f (十六進制 —— 危險!危險!)那麼,有安全意識的 PHP 開發人員應該怎麼做呢?多年的經驗表明,最好的做法是使用正則表達式來確保整個 GET 變數由數字組成,如下所示:
清單 10. 使用正則表達式限制 GET 變數
復制代碼 代碼如下:
<?php
$pid = $_GET['pid'];
if (strlen($pid)){
if (!ereg(」^[0-9]+$」,$pid)){
//do something appropriate, like maybe logging them out or sending them back to home page}
}else{
//empty $pid, so send them back to the home page}
//we create an object of a fictional class Page, which is now//moderately protected from evil user input$obj = new Page;
$content = $obj->fetchPage($pid);
//and now we have a bunch of PHP that displays the page?>
需 要做的只是使用 strlen() 檢查變數的長度是否非零;如果是,就使用一個全數字正則表達式來確保數據元素是有效的。如果 PID 包含字母、斜線、點號或任何與十六進制相似的內容,那麼這個常式捕獲它並將頁面從用戶活動中屏蔽。如果看一下 Page 類幕後的情況,就會看到有安全意識的 PHP 開發人員已經對用戶輸入 $pid 進行了轉義,從而保護了 fetchPage() 方法,如下所示:
清單 11. 對 fetchPage() 方法進行轉義
復制代碼 代碼如下:
<?php
class Page{
function fetchPage($pid){
$sql = 「select pid,title,desc,kw,content,status from page where pid='」.mysql_real_escape_string($pid).」'」;}
}
?>
您可能會問,「既然已經確保 PID 是數字,那麼為什麼還要進行轉義?」 因為不知道在多少不同的上下文和情況中會使用 fetchPage() 方法。必須在調用這個方法的所有地方進行保護,而方法中的轉義體現了縱深防禦的意義。
如 果用戶嘗試輸入非常長的數值,比如長達 1000 個字元,試圖發起緩沖區溢出攻擊,那麼會發生什麼呢?下一節更詳細地討論這個問題,但是目前可以添加另一個檢查,確保輸入的 PID 具有正確的長度。您知道資料庫的 pid 欄位的最大長度是 5 位,所以可以添加下面的檢查。
清單 12. 使用正則表達式和長度檢查來限制 GET 變數復制代碼 代碼如下:
<?php
$pid = $_GET['pid'];
if (strlen($pid)){
if (!ereg(」^[0-9]+$」,$pid) && strlen($pid) > 5){//do something appropriate, like maybe logging them out or sending them back to home page}
} else {
//empty $pid, so send them back to the home page}
//we create an object of a fictional class Page, which is now//even more protected from evil user input$obj = new Page;
$content = $obj->fetchPage($pid);
//and now we have a bunch of PHP that displays the page?>
現在,任何人都無法在資料庫應用程序中塞進一個 5,000 位的數值 —— 至少在涉及 GET 字元串的地方不會有這種情況。想像一下黑客在試圖突破您的應用程序而遭到挫折時咬牙切齒的樣子吧!而且因為關閉了錯誤報告,黑客更難進行偵察。
緩沖區溢出攻擊
緩沖區溢出攻擊 試圖使 PHP 應用程序中(或者更精確地說,在 Apache 或底層操作系統中)的內存分配緩沖區發生溢出。請記住,您可能是使用 PHP 這樣的高級語言來編寫 Web 應用程序,但是最終還是要調用 C(在 Apache 的情況下)。與大多數低級語言一樣,C 對於內存分配有嚴格的規則。
緩沖區溢出攻擊向緩沖區發送大量數據,使部分數據溢出到相鄰的內存緩沖區,從而破壞緩沖區或者重寫邏輯。這樣就能夠造成拒絕服務、破壞數據或者在遠程伺服器上執行惡意代碼。
防止緩沖區溢出攻擊的惟一方法是檢查所有用戶輸入的長度。例如,如果有一個表單元素要求輸入用戶的名字,那麼在這個域上添加值為 40 的 maxlength 屬性,並在後端使用 substr() 進行檢查。清單 13 給出表單和 PHP 代碼的簡短示例。

I. 如何防止網站被黑客攻擊

漏洞掃描器是用來快速檢查已知弱點的工具,這就方便黑客利用它們繞開訪問計算機的指定埠,即使有防火牆,也能讓黑客輕易篡改系統程序或服務,讓惡意攻擊有機可乘。

逆向工程是很可怕的,黑客可以利用逆向工程,嘗試手動查找漏洞,然後對漏洞進行測試,有時會在未提供代碼的情況下對軟體進行逆向工程。





黑客作用原理:

1、收集網路系統中的信息

信息的收集並不對目標產生危害,只是為進一步的入侵提供有用信息。黑客可能會利用下列的公開協議或工具,收集駐留在網路系統中的各個主機系統的相關信息。

2、探測目標網路系統的安全漏洞

在收集到一些准備要攻擊目標的信息後,黑客們會探測目標網路上的每台主機,來尋求系統內部的安全漏洞。

J. 使用php+apache+mysql搭建的網站最近被黑客上傳了木馬,怎麼辦,也不知道如何被上傳,各位大神,出出主意

要看是怎麼上傳的!
一般情況下,網站安全兩大部分, 伺服器的配置維護方面, 和網站程序本身方面!
建議:
檢查下伺服器的安全配置,以及在伺服器上安裝些防護軟體!
同時檢查下網站程序編寫是否有什麼漏洞,以及Apache和php的配置設置!
如果可以, 建議php.ini中取消上傳功能或者限制功能!
環境配置方面, 指定特定的目錄禁止運行腳本, 比如css、JavaScript、images等目錄網站資源目錄!

閱讀全文

與php防黑客相關的資料

熱點內容
住房app怎麼快速選房 瀏覽:172
怎麼在電腦上編譯成功 瀏覽:214
單片機可調時鍾設計方案 瀏覽:192
qq文件夾密碼忘記怎麼找回 瀏覽:683
php擴展插件 瀏覽:608
解壓視頻廁所抽紙 瀏覽:952
app減脂怎麼用 瀏覽:452
pythonwebpdf 瀏覽:639
單片機的功能模塊 瀏覽:771
安卓手機如何錄制視頻長時間 瀏覽:285
安全問題app哪個好 瀏覽:445
壓縮水會變冰嗎 瀏覽:526
小說配音app哪個靠譜 瀏覽:820
編譯iso 瀏覽:944
照片生成pdf格式 瀏覽:194
病歷轉pdf 瀏覽:835
雲伺服器配硬體 瀏覽:978
伺服器10k什麼意思 瀏覽:21
pdfeditor漢化 瀏覽:884
新科學pdf 瀏覽:748