無論是大**還是小**,只要能和網際網路連線,就會成為乙個目標。很多黑客程式並不理會**的大小,只會機械地掃瞄 ip 位址並找尋受害者。
cgi方式下,乙個非常安全的做法就是把 php 直譯器放在 web 目錄外的地方,比如說 /usr/local/bin。這樣做唯一不便的地方就是必須在每乙個包含 php **的檔案的第一行加入如下語句:
#!/usr/local/bin/php
把 apache 使用者的許可權提公升為 root 是極度危險的做法,而且可能會危及到整個系統的安全。
應用程式永遠不要使用資料庫所有者或超級使用者帳號來連線資料庫,因為這些帳號可以執行任意的操作,比如說修改資料庫結構(例如刪除乙個表)或者清空整個資料庫的內容。
應該為程式的每個方面建立不同的資料庫帳號,並賦予對資料庫物件的極有限的許可權。僅分配給能完成其功能所需的許可權,避免同乙個使用者可以完成另乙個使用者的事情。這樣即使攻擊者利用程式漏洞取得了資料庫的訪問許可權,也最多只能做到和該程式一樣的影響範圍。
鼓勵使用者不要把所有的事務邏輯都用web應用程式(即使用者的指令碼)來實現。最好用檢視(view)、觸發器(trigger)或者規則(rule)在資料庫層面完成.
對某些真正隱蔽的資料,如果不需要以明文的形式存在(即不用顯示),可以考慮用雜湊演算法。使用雜湊演算法最常見的例子就是把密碼經過 md5 加密後的雜湊存進資料庫來代替原來的明文密碼
sql注入問題
也許有人會自我安慰,說攻擊者要知道資料庫結構的資訊才能實施上面的攻擊。沒錯,確實如此。但沒人能保證攻擊者一定得不到這些資訊,一但他們得到了,資料庫有洩露的危險。如果你在用開放源**的軟體包來訪問資料庫,比如論壇程式,攻擊者就很容得到到相關的**。如果這些**設計不良的話,風險就更大了。
永遠不要信任外界輸入的資料,特別是來自於客戶端的,包括選擇框、表單隱藏域和 cookie。
永遠不要使用超級使用者或所有者帳號去連線資料庫。要用許可權被嚴格限制的帳號。
檢查輸入的資料是否具有所期望的資料格式。php有很多可以用於檢查輸入的函式,從簡單的變數函式和字元型別函式(比如is_numeric(),ctype_digit())到複雜的perl相容正規表示式函式都可以完成這個工作。
如果程式等待輸入乙個數字,可以考慮使用 is_numeric() 來檢查,或者直接使用 settype() 來轉換它的型別,也可以用 sprintf() 把它格式化為數字。
使用資料庫特定的敏感字元轉義函式(比如mysql_escape_string()和sql_escape_string())把使用者提交上來的非數字資料進行轉義。如果資料庫沒有專門的敏感字元轉義功能的話addslashes()和str_replace()可以代替完成這個工作。
要不擇手段避免顯示出任何有關資料庫的信心,尤其是資料庫結構。
也可以選擇使用資料庫的儲存過程和預定義指標等特性來抽象數庫訪問,使使用者不能直接訪問資料表和檢視。但這個辦法又有別的影響。
除此之外,在允許的情況下,使用**或資料庫系統儲存查詢日誌也是乙個好辦法。顯然,日誌並不能防止任何攻擊,但利用它可以跟蹤到哪個程式曾經被嘗試攻擊過。
錯誤報告
.很多php開發者會使用show_source()、highlight_string()或者highlight_file()函式來除錯**,但是在正式執行的**中,這種做法可能會暴露出隱藏的變數、未檢查的語法和其它的可能危及系統安全的資訊。
乙個能提前阻止這個問題發生的方法就是利用 error_reporting() 來幫助使**更安全並發現變數使用的危險之處。在發布程式之前,先開啟 e_all 測試**,可以幫你很快找到變數使用不當的地方。一旦準備正式發布,就應該把 error_reporting() 的引數設為 0 來徹底關閉錯誤報告或者把 php.ini 中的 display_errors 設為 off 來關閉所有的錯誤顯示以將**隔絕於探測。當然,如果要遲一些再這樣做,就不要忘記開啟 ini 檔案內的 log_errors 選項,並通過 error_log 指定用於記錄錯誤資訊的檔案。
單純地關閉 register_globals 並不代表所有的**都安全了。對於每一段提交上來的資料,都要對其進行具體的檢查。永遠要驗證使用者資料和對變數進行初始化!把 error_reporting() 設為 e_notice 級別可以檢查未初始化的變數。
當向資料庫中插入資料時,魔術引號所做的就是自動對所有的 get、post、cookie 資料運用 addslashes() 函式
magic_quotes_gpc 影響到 http 請求資料(get,post 和 cookie)。不能在執行時改變。在 php 中預設值為 on。
可移植性
程式設計時認為其開啟或並閉都會影響到移植性。可以用 get_magic_quotes_gpc() 來檢查是否開啟,並據此程式設計。
效能由於並不是每一段被轉義的資料都要插入資料庫的,如果所有進入 php 的資料都被轉義的話,那麼會對程式的執行效率產生一定的影響。在執行時呼叫轉義函式(如 addslashes())更有效率。 儘管 php.ini-dist 預設開啟了這個選項,但是 php.ini-recommended 預設卻關閉了它,主要是出於效能的考慮。
不便 由於不是所有資料都需要轉義,在不需要轉義的地方看到轉義的資料就很煩。比如說通過表單傳送郵件,結果看到一大堆的 \'。針對這個問題,可以使用 stripslashes() 函式處理。
magic_quotes_gpc 指令只能在系統級關閉,不能在執行時。也就是說不能用 ini_set()。
維護網路安全意識先行
9月19日,2016年國家網路安全宣傳周 在武漢盛大開幕,隨後,19名網路安全傑出人才 優秀人才及優秀教師受到表彰,這是我國首次評選表彰網路安全先進典型。新華社 網路安全,已經成為事關 事關經濟社會發展 事關社會穩定 事關億萬網民的切身利益的大事,在網路安全面前,每乙個人都不再能置身事外,筆者認為,...
有效的資訊保安意識培訓
為什麼要做安全意識培訓?安全意識培訓的結果是一大堆文件,但是對企業員工來說沒有根本的意義,資料洩露事件 攻擊事件依然發生,一方面除了是安全建設存在問題,另一方面主要是我們資訊部門的工程師大部分是網路工程師出生,對安全的理解大部分停留在防火牆層面,而企業更加注重技能培訓,對意識培訓不是很重視,也不太想...
惡意軟體「合體」考驗員工安全意識
趨勢科技威脅分析師 就在不久前,我的一位同事menard ose a 在參加rsa 大會之後撰寫了一篇文章,討論企業在使用社交 以及處理企業資訊時,務必建立良好的安全意識。此外,在該文當中,他特別強調企業應該通過正確的使用者認知 資訊保安政策以及資訊保安技術來確保自己免於內部與外部的威脅。本文將進一...