程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP安全編程法則

PHP安全編程法則

編輯:PHP綜合

標有 (*) 的檢查項目表示該項是針對相關問題的根本解決方法,應當盡最大努力去完成這些內容。 未標 (*) 的項目,表示該項並不能完全消除安全隱患,只是說通過這種方法可以避免發生安全問題。

SQL注射
(*) 在組合SQL語句時要使用SQL變量綁定功能
(*) 如果數據庫不提供變量綁定,那麼需要對構成SQL的所有變量進行轉義
不要將錯誤信息原封不動地顯示在浏覽器中。
為訪問數據庫的用戶設置適當的權限。
操作系統命令行注射
(*) 避免使用能啟動shell命令的語言
使用的語言如果允許啟動shell命令,則需要對該功能的參數種的所有變量進行檢查,確保只包含合法的操作
不檢查路徑名參數/目錄遍歷
(*) 不要將外部傳進來的參數直接作為文件名來使用
(*) 將打開文件的操作限制在固定的目錄中,並禁止文件名中包含路徑
為Web服務器上的文件設置正確的訪問權限
檢查文件名
會話管理的問題
(*) 用難以推測的內容作為會話ID
(*) 不要在URL中保存會話ID
(*) 為https協議中使用的cookIE設置secure屬性
(*) 登錄成功後生成新的會話
(*) 登錄成功後,在會話ID之外再生成一個秘密信息,每次訪問頁面時都檢查之
不使用固定值作為會話ID
將會話ID保存到CookIE中時,要設置有效期限
跨站腳本攻擊(XSS)
不允許輸入Html內容時的解決方法
(*) 輸出到頁面上的所有內容都要轉義
(*) 輸出URL時僅允許以“http://”或“https://”開頭的URL
(*) 不要動態生成<script>…</script>的內容
(*) 不要從外部網站讀入樣式表
檢查輸入內容
允許輸入Html內容時的解決方法
(*) 解析輸入的Html內容,生成解析樹,然後提取其中的非腳本部分
使用腳本刪除輸入的Html內容中的相關字符串
通用解決方法
(*) 應答的HTTP頭重指定Content-Type的charset屬性
為避免Cookie情報洩漏,應禁止Trace方法,並對所有CookIE設置HttpOnly屬性
跨站請求偽造(CSRF)
(*) 所有頁面都通過POST來訪問,在前一頁面的hidden中隨機生成一個信息,提交後的頁面檢查該信息,正確時才予以執行
(*) 執行業務之前再次要求輸入密碼
(*) 確認Referer是否正確,只有正確時才執行
執行重要操作時,向預先設置的郵件地址中發送郵件
HTTP頭注射
(*) 不直接輸出HTTP頭,而使用運行環境提供的頭信息輸出API
(*) 無法使用API時,要禁止輸入的頭信息中的換行
刪除所有外部輸入中的換行
郵件盜用(通過某種手段使郵件發送到攻擊者指定的地址)
(*) 不使用外部參數作為郵件頭信息
必須用外部參數設置頭信息時,要刪除其中的危險字符。
版權聲明:可以任意轉載,但轉載時必須標明原作者charlee。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved