簡體   English   中英

站點日志和PHP保護

[英]Site Logs and PHP protection

我正在查看我的日志,並注意到以下內容

[Tue Apr 02 16:12:02 2013] [error] [client 31.181.33.208] File does not exist:/xxx/join.php+++++++++++++++++++++++++++++++++++++++++++++++++++Result:+\xed\xe5+\xed\xe0\xf8\xeb\xee\xf1\xfc+\xf4\xee\xf0\xec\xfb+\xe4\xeb\xff+\xee\xf2\xef\xf0\xe0\xe2\xea\xe8;, referer: http://www.edrobe.com/join.php+++++++++++++++++++++++++++++++++++++++++++++++++++Result:+%ed%e5+%ed%e0%f8%eb%ee%f1%fc+%f4%ee%f0%ec%fb+%e4%eb%ff+%ee%f2%ef%f0%e0%e2%ea%e8%3b

我從未見過這樣的事情。 我應該擔心嗎? 有什么辦法可以阻止這些代碼在我的網站上運行嗎?

謝謝

該錯誤表明有人試圖點擊/xxx/join.php並傳遞一些不尋常的數據。

好消息是:

該文件不存在,因此該操作實際上並沒有對它們產生任何有用的結果。

壞消息是:

他們可能會嘗試其他事情(和其他人一樣)。

要考慮的事情

  • 消除用戶輸入是一個好主意
  • 保護允許上傳的文件夾是一個好主意(具有權限和通過您的Web服務器配置)。
  • 您還可以使用防火牆阻止來自此IP和/或一系列IP的流量。

“污垢”的評論是非常糟糕的建議。

在輸入到達應用程序邏輯之前驗證輸入是非常困難的 - 到那時,您的示例目標已經被利用的漏洞。 你永遠不應該清理輸入(出於多種原因) - 要么接受它要么拒絕它 - 但你必須始終清理輸出。

您在日志中看到的大部分內容都是嘗試破壞您的系統失敗(成功的攻擊不會留下證據)。 但是檢測失敗的攻擊是防止成功攻擊的一種非常有用的方法 - 如果你在Unix / Linux上運行, fail2ban可以監視你的日志是否存在異常,並注入防火牆規則來阻止該客戶端。

不要把時間浪費在對單個事件的膝蓋反射中。 如果您對網站的安全性非常認真,那么最好的建議是規划如何保護您的網站,規划如何檢測您是否已被入侵,並計划如何在服務被恢復后恢復服務損害。

SANSOWASP上設置安全服務器有很多有用的東西。 對於將服務器插入互聯網的人來說, 應該是必不可少的閱讀。 特別是對於PHP,在Suhosin有一個lok。

如果您在共享主機上並且只能訪問.htaccess,那么您就沒有安全性 - 所有您可以做的就是糾纏您的服務提供商以實施適當的安全措施,並在網站遭到污損時重新上傳您的網站。

您所能做的就是盡可能保護您的網站。 除非您專門針對目標,否則攻擊者將轉移到受保護較少的網站。

一些建議:

使用正則表達式。 這限制了用戶可以提交的可能輸入。 在新的HTML5中,您可以為輸入標記添加模式參數。 例如:

<input type="tel" name="phone" max="20" pattern="\d{3}[\-]\d{3}[\-]\d{4}">

HTML5也有新的輸入類型,但所有瀏覽器都不支持這些類型,所以包含模式是很好的。 HTML5Pattern.com具有各種輸入類型的通用模式。 您可能已經注意到,您還可以限制輸入的長度。 如果您知道輸入不能超過X個字符,請不要讓用戶輸入超過X個字符。

如果您的用戶輸入存儲在數據庫中,則PHP數據庫擴展具有轉義字符串的功能。 因此,任何特殊的alt代碼字符或函數都不會被執行,而是作為文字字符串輸入。

對於PostgreSQL: pg_escape_string()
對於MySQL: mysql_real_escape_string()

存在其他函數,例如stripslashes() ,用於從輸入中刪除斜杠,從而禁用特殊字符。

按照上面的說法你已經阻止了:
- 提交的輸入錯誤
- 提交的錯誤輸入無效
- 保護您的數據庫免受SQL注入

您還可以將服務器配置為阻止攻擊源自的IP地址。 如果您的服務器在Linux上,則此參考指南(pdf)具有非常有用的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM