所幸的是這種情況還是很容易避免 通過檢查要進入數據庫的數據並刪除或取消它們 我們可以防止任何人在這個數據庫上執行他們自己的SQL語句 函數的方法如下
function make_safe($variable) {$variable = addslashes(trim($variable));return $variable;}
現在修改了我們的執行語句用_POST取代上面的執行變量 我們現在把所有的用戶數據通過make_safe函數在以下代碼
$username = make_safe($_POST[
username
]);$password = make_safe($_POST[
password
]);$check = mysql_query(
Select Username
Password
UserLevel FROM Users Where Username =
$username
and Password =
$password
);
現在如果一個用戶輸入惡意的上述數據查詢看上去像下面這樣是完全無害 以下查詢將選擇從數據庫中的用戶都和\ or = #相等的
Select Username
Password
UserLevel FROM Users Where Username =
\
or
=
#
and Password =
現在除非你曾經提供了一個非常特殊的用戶名和空白密碼 你的惡意攻擊者將不能做任何損害的事 像這樣檢查所有的數據通過你的數據庫是非常重要的盡管你認為這是已經很安全 HTTP頭可以由用戶偽造 他們參照地址可以偽造浏覽器用戶字符串可以偽造 不要信任一條用戶發送的數據雖然你認為是安全的
文件操作
一些現今的網站的URL是這個樣子的
index
php?page=contactus
html
indexphp文件包括contactushtml文件而且這個網站似乎正常運行 不過用戶可以很容易地將contactushtml改成他們自己喜的東西 舉例來說 如果您正在使用Apache的mod_auth去保護文件並儲存你的密碼在一個文件名為htpasswd(傳統姓名)裡 然後如果用戶訪問以下地址 腳本將輸出你的用戶名和密碼
index
php?page=
htpasswd
通過改變URL在某些系統中 在另一個可以運行PHP的服務器去引用文件害怕? 你應該害怕 再次所幸的是這是比較容易防范 首先你必須確保正確設置 open_basedir在你的phpini文件並已設置allow_url_fopen 為Off 這將阻止大多數這類型的攻擊以保護遠程文件和文件系統 其次如果可以的話請檢查文件要求對有效文件 如果你限制了某些文件可以用這個腳本 你可以節省不少後來惡果
使用默認
當mysql是安裝它使用了默認用戶的root和空白的密碼 SQL Server的用途sa作為默認的用戶和提供了一個空白的密碼 如果有人發現你的數據庫服務器地址並想嘗試登錄 這些都是首次組合他們會嘗試 如果你沒有設定不同的密碼(最好也和用戶 那麼你很可能一天一覺醒來發現你的數據庫已經被刪除所有用戶號碼被盜 和所有軟件一樣你如果使用的軟件是默認用戶名和密碼改變他們
不要讓安裝文件在線
很多PHP項目用安裝文件來安裝 其中有不少是一旦運行就自我刪除的但許多不是這樣的直到您刪除安裝文件 如果讓安裝文件在線請注他們可能仍然可用 有人可以用它來復蓋你的整個網站
預見性
試想一下你的網站讓一個壞人盯上 這個壞的人要打破你的管理區 改變你的所有產品的描述如這個產品很差勁 我猜測他們首先會去http://wwwyoursitecom/admin/ 萬一它存在 將你的敏感文件和文件夾像預測一樣他們很容易就受到黑客攻擊
為此要確保你的姓名你的敏感文件和文件夾讓他們很難猜測 把你的 admin 位於http://wwwyoursitecom/jsfhsfsifuhsi/ 或者更難去寫的但它為你的網站添加一些額外的保障如果你需要一個記得快的地址 但不用admin或administration (或你的用戶名和密碼) 用一些不經常用的
這同樣適用於用戶名和密碼 如果你有管理區不要使用 admin 作為用戶名和 password 作為密碼 針對一些特殊的情況最好是兩個字母和數字(有的黑客利用一些所謂的詞典攻擊 嘗試每一個字在字典裡的密碼直到他們找到密碼添加一對密碼使這一類攻擊無用) 這也是明智的去定期改變你的密碼 (每兩個月) 最後要確保當一個用戶名輸入 Wrong Password 當錯誤的密碼輸入時你的錯誤訊息給沒有輸出如 Unknown Username 惡意用戶都知道他們已經成功地猜測一個有效的用戶名 對上述兩種手段采用通用的登錄錯誤的錯誤信息 如果是用戶名和密碼輸入錯誤的惡意用戶就沒有任何辦法設想正確的用戶和密碼
最後徹底和完全地設想
你假設你的網站不會受到攻擊或面要對任何問題的話但當最終出事你將有大量的麻煩 如果在另一方面 假設你的每一個客人到你的網站是為了攻擊你你永遠處於戰爭狀態 你就能幫助你把你的網站做得安全並准備得沒有一點閃失
[] []
From:http://tw.wingwit.com/Article/program/PHP/201311/21435.html