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