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