2011-02-09 60 views
1

所以我有一個網站,給用戶輸入它會產生一個/home/content/s/a/m/p/l/e/users/profile/index.php。我真正的問題是,這是安全的嗎?這是我所做的努力,以消除用戶輸入,如果有更多,請讓我知道。安全和php

strip_tags(html_entity_decode($mysqli->real_escape_string($title)), ALLOWED_TAGS); 
ALLOWED_TAGS = "<br><p><b><i><hr>"; 

因爲我是比較新的這個網站的發展,我想知道如果這是一個很好的方法,因爲它需要應變的時候使用數據庫來一遍又一遍的得到同樣的信息,而不是僅僅有一個靜態頁面上有關於它的信息,還是這是一個巨大的安全漏洞?我不知道! :)我不知道他們是否可以用我在這裏設置的內容進行某種XSS攻擊。請幫忙!



邁克爾

附:如果您有任何答案或建議,請給我一些洞察,以瞭解其原因。我擁有計算機科學學位,所以我很好奇它是如何工作的,而不僅僅是快速和骯髒的解決方案。謝謝。

+0

廢物,ALLOWED_TAGS是= BR,P,B,I,小時。我只是意識到我不能放入實際的標籤:) – Michael 2011-02-09 17:18:03

回答

1

此XSS輸入驗證非常糟糕。 html_entity_decode()與你所需要的相反。更多其中一些標籤,如<p>標籤可讓您在event handler中執行JavaScript。所以簡而言之,這段代碼並不會阻止xss。您可以使用htmlspecialchars($var,ENT_QUOTES);htmlpurifer。如果你使用htmlpurifer路由,請確保你保持最新版本,它每隔幾周就會被繞過,oah和htmlpurifer在計算上非常昂貴,因爲它使用了幾千個正則表達式。

2

這是我爲公司內部知識庫編譯的一個PHP安全檢查表。可能會有所幫助。

  • 不要使用過時的功能和實踐
  • 在SQL查詢中使用的變量值時,始終驗證用戶輸入
  • 使用佔位符。
  • 始終逃脫在SQL查詢中使用的變量。
  • 設置適當的目錄權限
  • 始終重新生成會話ID時,每次用戶登錄。 (避免會話ID劫持)
  • 切勿以純文本格式存儲密碼。只存儲散列值。
  • 在網頁中輸出用戶輸入時,請務必檢查html特殊字符。 (HTML標記可能用於XSS攻擊)
  • 在移動到您的部署服務器之前瞭解您的部署服務器的規格
  • 保護保存日誌條目的目錄。
  • register_globals的設置爲關閉
  • PHP安全模式可能是有用的,但由於5.3版
  • 如果在代碼中不使用不建議使用,禁止使用disable_functions選項在php.ini
  • 設置的功能系統和exec
  • 在生產/活動服務器中將display_errors設置爲關閉。
  • 驗證cookie數據