WEB編程語言,分為WEB靜態語言和WEB動態語言,WEB靜態語言就是通常所見到的超文本標記語言 (標準通用標記語言下的一個應用 ),WEB動態語言主要是ASP,PHP,JAVAscript,JAVA,CGI等計算機腳本語言編寫出來的執行靈活的互聯網網頁程序。
腳本語言:
ASP是一種服務器端腳本編寫環境,可以用來創建和運行動態網頁或Web應用程序。ASP網頁可以包含超文本標記語言標記、普通文本、腳本命令以及COM組件等。利用ASP可以向網頁中添加交互式內容(如在線表單),也可以創建使用HTML網頁作為用戶界面的web應用程序。
PHP是將程序嵌入到超文本標記語言文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。PHP具有非常強大的功能,所有的CGI的功能PHP都能實現,而且支持幾乎所有流行的數據庫以及操作系統。最重要的是PHP可以用C、C++進行程序的擴展!
HTML 只能提供一種靜態的信息資源,缺少動態客戶端與服務器端的交互。爪哇腳本(JAVA SCRIPT)的出現,使信息和用戶之間不僅只是一種顯示和瀏覽的關系,而且實現了實時地、動態的、可交互的表達方式。
JAVAscript 是一種腳本語言,它采用小程序段的方式實現編程。它的基本結構形式與ActionScript十分類似,但她并不需要編譯,而是在程序運行過程中被逐行的解釋。
WEB編程安全法則:
標有 (*) 的檢查項目表示該項是針對相關問題的根本解決方法,應當盡最大努力去完成這些內容。
未標 (*) 的項目,表示該項并不能完全消除安全隱患,只是說通過這種方法可以避免發生安全問題。
SQL注射:
(*) 在組合SQL語句時要使用SQL變量綁定功能
(*) 如果數據庫不提供變量綁定,那么需要對構成SQL的所有變量進行轉義
不要將錯誤信息原封不動地顯示在瀏覽器中。
為訪問數據庫的用戶設置適當的權限。
操作系統命令行注射:
(*) 避免使用能啟動shell命令的語言
使用的語言如果允許啟動shell命令,則需要對該功能的參數種的所有變量進行檢查,確保只包含合法的操作
不檢查路徑名參數/目錄遍歷
(*) 不要將外部傳進來的參數直接作為文件名來使用
(*) 將打開文件的操作限制在固定的目錄中,并禁止文件名中包含路徑
為Web服務器上的文件設置正確的訪問權限
檢查文件名:
會話管理的問題:
(*) 用難以推測的內容作為會話ID
(*) 不要在URL中保存會話ID
(*) 為https協議中使用的cookie設置secure屬性
(*) 登錄成功后生成新的會話
(*) 登錄成功后,在會話ID之外再生成一個秘密信息,每次訪問頁面時都檢查之
不使用固定值作為會話ID
將會話ID保存到Cookie中時,要設置有效期限
跨站腳本攻擊(XSS):
不允許輸入HTML內容時的解決方法
(*) 輸出到頁面上的所有內容都要轉義
(*) 輸出URL時僅允許以“http://”或“https://”開頭的URL
(*) 不要動態生成 的內容
(*) 不要從外部網站讀入樣式表
檢查輸入內容:
允許輸入HTML內容時的解決方法
(*) 解析輸入的HTML內容,生成解析樹,然后提取其中的非腳本部分
使用腳本刪除輸入的HTML內容中的相關字符串
通用解決方法:
(*) 應答的HTTP頭重指定Content-Type的charset屬性
為避免Cookie情報泄漏,應禁止Trace方法,并對所有Cookie設置HttpOnly屬性
跨站請求偽造(CSRF):
(*) 所有頁面都通過POST來訪問,在前一頁面的hidden中隨機生成一個信息,提交后的頁面檢查該信息,正確時才予以執行
(*) 執行業務之前再次要求輸入密碼
(*) 確認Referer是否正確,只有正確時才執行
執行重要操作時,向預先設置的郵件地址中發送郵件
HTTP頭注射:
(*) 不直接輸出HTTP頭,而使用運行環境提供的頭信息輸出API
(*) 無法使用API時,要禁止輸入的頭信息中的換行
刪除所有外部輸入中的換行:
郵件盜用(通過某種手段使郵件發送到攻擊者指定的地址)
(*) 不使用外部參數作為郵件頭信息
必須用外部參數設置頭信息時,要刪除其中的危險字符。