2010-02-08 53 views
4

有什麼方法可以檢測PHP/MySQL Web應用程序中的漏洞(檢查GET,POST,COOKIE數組中的某些字符或代碼段/使用帶有數據庫的庫有共同利用的所有模式(如果存在的話)?)以及當檢測到一個時應如何繼續?檢測Web應用程序中的漏洞利用以及如何繼續

例如,如果有人試圖使用GET請求方法在我的PHP/MySQL Web應用程序中查找SQL注入,我應該將用戶執行的操作存儲在數據庫中,讓應用程序向我發送一封電子郵件,IP禁止用戶並向他/她顯示一條消息「對不起,但是我們發現您的帳戶中存在有害行爲,您的帳戶已被禁用,您的IP地址可能會禁用某些功能。請把所有的細節通過電子郵件發送給我們。「

謝謝。

回答

2

三件事情浮現在腦海中:

  1. 防禦性編碼,清理所有的輸入,準備SQL語句並闖入其與vulnerability scanner
  2. 日誌黑客attemtps使用你的網站的Suhosin
  3. 提高安全性與Intrusion Detection System

如果你覺得一個完整的IDS是太多,請嘗試PHP IDS,因爲它d幾乎所有你要求的開箱即用。請注意,檢測PHP級別的入侵可能已經爲時過晚,以防止發生攻擊。

在成功入侵的情況下,我想你最好的選擇是讓服務器離線,看看有什麼損害。如果您需要收集合法有用的證據,您可能不得不考慮聘請某人對機器進行法醫分析。

如果您覺得您需要對不成功的入侵企圖做出反應並獲得惡意用戶的IP,請找出ISP並通知他儘可能多的入侵企圖細節。大多數ISP對這些案件都有濫用聯繫。

+1

任何人都知道php-ids發生了什麼事?他們的網站已經停機了一個月或更久? – Steve 2011-02-15 06:41:05

+1

他們將其移至phpids.org。我希望他們會轉發流量。 – 2011-03-17 04:54:40

1

只需在所有$ _REQUEST和$ _COOKIE vars上使用strip_tags()來處理顯示在這些變量中的代碼,至於SQL,您可能需要編寫類似查詢的正則表達式或其他東西,但這不應該是一個問題,你應該總是mysql_real_escape_string($ str)查詢中的所有變量。嘗試這樣的事情。

function look_for_code_and_mail_admin($str) { 
    $allowed_tags = "<a>,<br>,<p>"; 
    if($str != strip_tags($str, $allowed_tags)) { 
     $send_email_to = "[email protected]"; 
     $subject = "some subject"; 
     $body = "email body"; 
     mail($send_email_to,$subject,$body); 
    } 
    return($str); 
} 
+0

我知道如何保護我的應用程序免受攻擊,我只想抓住任何試圖故意破壞它並造成傷害的用戶。考慮到有多少種不同的漏洞,我認爲一個正則表達式不會完成這項工作。 – TheMagician 2010-02-08 21:52:55

+1

使用轉義來抵禦SQL注入確實是錯誤的方法;參數化查詢(即mysqli函數/類更安全 – 2010-02-08 21:53:39

+0

你是對的,他們都很難打電話,尤其是sql注入。即使我剛剛提供的功能將變得積極,如果有人把一個< b>標籤,並沒有 – seventeen 2010-02-08 21:55:41

1

你的問題是雙重的,我會回答第二部分。

記錄所有內容,但不禁止或顯示任何消息。如果出現誤報,這將會令人尷尬。作爲一般規則,嘗試構建一個應用程序,可以處理任何種類的用戶輸入而不會出現問題的

-1

似乎太多的工作與電子郵件位和一切給我。除此之外,我喜歡在我通常使用的網站上奔跑,並嘗試找到注射點,以便我可以向管理員發出警告。你會爲此禁止我嗎?

我建議你自己狩獵可利用的部分,並在必要時進行消毒。 Acunetix爲此提供了非常好的計劃。如果你不想爲Acunetix付出巨大的代價,那麼有一些非常不錯的Firefox插件叫做XSS Me和SQL Inject,你可能想看看。

+1

我該如何區分你試圖侵入應用程序並竊取每個用戶信息的用戶?如果我注意到有人在我的應用程序中運行漏洞利用程序,我想要阻止該用戶繼續執行,如果他最終 – TheMagician 2010-02-08 21:57:25

+0

好吧,這就是事實,你無法與我和惡意用戶區分開來,你也無法區分惡意用戶和普通用戶,只是不小心輸入了錯誤的東西。需要設置一些東西,如果他們做了一次或兩次,甚至五次,那麼它會激活反利用,所以我猜如果你真的擔心它,那麼你需要設置的東西,但我仍然建議只是追捕的利用和消毒它自己。 – Rob 2010-02-08 22:01:45

+0

-1如果您使用安全編程方法,則不需要Acuntex的錯誤安全性。 – 2010-04-22 18:29:28

0

嗯,我不記得我見過試圖登錄SQL注入攻擊,我是不是能夠滲透網站最後一次..

你不必擔心天氣有人正在攻擊該網站,因爲它至多是主觀的東西,因爲天氣是一種攻擊或不是攻擊。如果網站base64在使用某些值並對其進行解碼之前該怎麼辦?你的IDS是而不是要去捕捉那個。如果用戶想發佈一段代碼,它會被檢測爲漏洞,因爲它包含SQL?這太浪費時間了......如果你真的需要知道是否有人攻擊你,只需在一個單獨的機器上安裝一些IDS,只需訪問傳入的流量。我說單獨的機器,因爲許多IDS很脆弱他們自己,只會讓情況變得更糟。

使用標準的安全編程方法,使用參數化SQL查詢或ORM。

相關問題