版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
手支術(shù)重塑平臺(tái)用友
l=f------14=)0g—gr—^P-IQtw—lyonyou
yonyou
UAP統(tǒng)一應(yīng)用平臺(tái)
UAPV61-安全編碼規(guī)范
培訓(xùn)案例集
O
目錄/CONTENT
一術(shù)語(yǔ)表...........................................................1
二基本原貝!I.............................................................................................................................3
2.1輸入驗(yàn)證...............................................................3
2.2輸出編碼...............................................................5
2.3身份驗(yàn)證和密碼管理.....................................................5
2.4會(huì)話管理...............................................................7
2.5訪問(wèn)控制...............................................................9
2.6加密規(guī)范..............................................................10
2.7錯(cuò)誤處理和日志........................................................10
2.8數(shù)據(jù)保護(hù)..............................................................11
2.9通訊安全..............................................................12
2.10數(shù)據(jù)庫(kù)安全............................................................13
2.11文件管理..............................................................13
2.12通用編碼規(guī)范..........................................................14
三數(shù)據(jù)庫(kù)..........................................................15
3.1使用參數(shù)化的SQL..............................................................................................................15
3.1.1簡(jiǎn)介.....................................................................15
3.1.2詳細(xì)描述.................................................................15
3.2通過(guò)"行”級(jí)別的訪問(wèn)控制來(lái)使用數(shù)據(jù)庫(kù).....................................16
3.2.1簡(jiǎn)介.....................................................................16
3.2.2詳細(xì)描述......................................................................................................................17
3.3把數(shù)據(jù)庫(kù)中的數(shù)據(jù)作為不能完全相信的輸入對(duì)待............................18
3.3.1簡(jiǎn)介.....................................................................18
3.3.2詳細(xì)描述.................................................................18
四WEB應(yīng)用開(kāi)發(fā)...................................................19
4.1基本安全...............................................................19
4.1.1使用POST而不是GET.................................................................................................19
4.1.2假設(shè)瀏覽器已被控制.....................................................19
4.1.3假設(shè)瀏覽器是公開(kāi)的.................................................................................................20
4.1.4使用JavaScript驗(yàn)證是不安全的...............................................................................21
4.1.5不能依賴Request到達(dá)的順序..................................................................................21
4.1.6在惡意環(huán)境中保護(hù)瀏覽器.........................................................................................22
4.1.7創(chuàng)建一個(gè)默認(rèn)的錯(cuò)誤頁(yè)面..........................................................................................22
4.1.8使用通用的錯(cuò)誤消息.....................................................23
4.2會(huì)話..................................................................23
4.2.1在每次認(rèn)證后打開(kāi)一個(gè)新的會(huì)話...........................................23
4.2.2保護(hù)會(huì)話中使用的cookie..........................................................................................24
4.2.3強(qiáng)制執(zhí)行一個(gè)會(huì)話最大空閑時(shí)間..............................................................................25
4.2.4強(qiáng)制執(zhí)行一個(gè)會(huì)話最大生存周期..............................................................................25
4.2.5允許用戶終止其會(huì)話.......................................................................................................25
4.2.6在會(huì)話終止時(shí)清空其數(shù)據(jù)...............................................................................................26
五代碼安全-JAVA系................................................27
5.1輸入驗(yàn)證...............................................................27
5.1.1命令注入(CommandInjection)..........................................................................................27
5.1.2跨站腳本(Cross-SiteScripting).........................................................................................29
5.1.3拒絕月艮務(wù)(DenialofService)..............................................................................................32
5.1.4日志偽造(LogForging).....................................................................................................33
5.1.5缺少XML驗(yàn)證(MissingXMLValidation).........................................................................35
5.1.6路徑操縱(PathManipulation)...........................................................................................35
5.1.7資源注入(ResourceInjection)...........................................................................................37
5.1.8SQL注入(SQLInjection).....................................................................................................38
5.1.9不安全的反射(UnsafeReflection)....................................................................................41
5.1.10整數(shù)溢出...........................................................42
5.2安全特性...............................................................43
5.2.1訪問(wèn)控制:數(shù)據(jù)庫(kù)...................................................43
5.2.2不安全的隨機(jī)數(shù)................................................................................................................44
5.2.3加密...............................................................44
5.2.4密碼管理...........................................................45
5.2.5密碼管理:源代碼中的密碼...........................................45
5.2.6密碼管理:重定向中的密碼...........................................46
5.2.7密碼管理:弱加]密............................................................................................................47
5.2.8JAVA對(duì)象持有密碼的問(wèn)題............................................48
5.2.9隱私侵犯...........................................................48
5.2.10固定的會(huì)話.........................................................50
5.3系統(tǒng)信息泄露...........................................................51
5.3.1系統(tǒng)信息泄露.......................................................51
5.3.2JSP中的HTML注釋..................................................52
六移動(dòng)應(yīng)用........................................................52
6.1基本安全...............................................................52
6.1.1本地?cái)?shù)據(jù)保護(hù)....................................................................................................................52
6.1.2密鑰安全...........................................................53
6.1.3android組件通信安全................................................53
6.1.4android組件通信安全................................................53
-術(shù)語(yǔ)表
跨站腳本攻擊通過(guò)"HTML注入"篡改網(wǎng)頁(yè),插入惡意腳本。在用戶瀏覽網(wǎng)頁(yè)時(shí),控制
(XSS)用戶瀏覽器的一種攻擊。XSS防御要點(diǎn):控制html的輸入和輸出。
在一個(gè)網(wǎng)頁(yè)中隱藏著對(duì)另外一個(gè)網(wǎng)頁(yè)的非法請(qǐng)求調(diào)用。防御:1、驗(yàn)證碼;
跨站點(diǎn)請(qǐng)求偽
2、RefererCheck:檢查來(lái)源是否合法;3、AntiCSRFToken:利用“不可
造(CSRF)
預(yù)測(cè)性原則",對(duì)參數(shù)加密,或者使用隨機(jī)數(shù)做參數(shù)以POST力^是交。
基于視覺(jué)欺騙。通過(guò)透明層或特殊圖片遮擋方式讓客戶點(diǎn)擊觸發(fā)攻擊,或
點(diǎn)擊劫持者誘使用戶拖拽動(dòng)作竊取數(shù)據(jù),或者使用具它力式在用戶不知情的情況下
(Clickjacking)觸發(fā)某些交互動(dòng)作。防御:禁止跨域訪問(wèn),禁用iframe等,與反XSS手段
一起使用。
敏感數(shù)據(jù)是指一旦泄露可能會(huì)對(duì)用戶或金融機(jī)構(gòu)造成損失的數(shù)據(jù),包括但
不限于:
a)用戶敏感數(shù)據(jù),如用戶口令、密鑰等;
b)系統(tǒng)敏感數(shù)據(jù),如系統(tǒng)的密鑰、關(guān)鍵的系統(tǒng)管理數(shù)據(jù);
敏感數(shù)據(jù)
c)其他需要保密的敏感業(yè)務(wù)數(shù)據(jù);
d)關(guān)鍵性的操作指令;
e)系統(tǒng)主要配置文件;
f)其他需要保密的數(shù)據(jù)。
密碼規(guī)范一組確保在應(yīng)用程序中密碼的操作被安全處理的控制。
危險(xiǎn)字符任何字符或編碼表示的字符,可以影響應(yīng)用程序預(yù)期的操作,或者被解釋
/UAP培訓(xùn)案例系列一1—UAPV61-安全編碼規(guī)范,
為具有特殊的意義、預(yù)期用途以外的字符。這些字符可用于:修改現(xiàn)有代
碼或語(yǔ)句的結(jié)構(gòu);插入新的非預(yù)期的代碼,?修改路徑;程序功能或程序?qū)?/p>
致非預(yù)期的結(jié)果;導(dǎo)致錯(cuò)誤的條件;下游應(yīng)用程序或系統(tǒng)擁有上述任何效
果。
用等價(jià)的HTML實(shí)體取代ASCII字符的過(guò)程。比如:編碼過(guò)程將用HTML
HTML實(shí)體編碼等價(jià)"&止"取代小于號(hào)HTML實(shí)體在大多數(shù)的編譯器中是"無(wú)行動(dòng)
的",特別是在瀏覽器中,可以緩解某些客戶端攻擊。
保證信息是準(zhǔn)確的、完整的和有效的,并且沒(méi)有被一個(gè)未授權(quán)的行為所修
完整性
改。
為減少一個(gè)漏洞的嚴(yán)重程度而采取的步驟。這些步驟可以包括:刪除一個(gè)
緩解
漏洞、使漏洞更難被利用、減少漏洞被利用后帶來(lái)的負(fù)面影響。
一個(gè)要求用戶處理多種不同種類憑據(jù)的身份驗(yàn)證過(guò)程。通常,該過(guò)程基于
多因子身份驗(yàn)
用戶擁有的信息(比如:智能卡\他們知道的信息(比如:個(gè)人識(shí)§!!碼1
證
或者他們自身的信息(比如:來(lái)自生物方面的數(shù)據(jù)1
輸出編碼一組解決使用編碼技術(shù)以確保應(yīng)用程序輸出的數(shù)據(jù)是安全的控制。
通過(guò)使用占位符,保持查詢語(yǔ)句和數(shù)據(jù)相分離。查詢語(yǔ)句結(jié)構(gòu)由占位符定
參數(shù)化查詢(預(yù)義,SQL語(yǔ)句發(fā)送給數(shù)據(jù)庫(kù)并做好準(zhǔn)備,然后準(zhǔn)備好的語(yǔ)句與參數(shù)值相結(jié)
處理語(yǔ)句)合。這樣就防止了查詢被更改,因?yàn)閰?shù)值與已編譯的語(yǔ)句相結(jié)合,而不
是SQL字符串。
通過(guò)使用刪除數(shù)據(jù)、字符替代、編碼或轉(zhuǎn)義字符,將潛在的有害數(shù)據(jù)變得
凈化數(shù)據(jù)
安全的處理過(guò)程。
連續(xù)身份驗(yàn)證身份驗(yàn)證數(shù)據(jù)在連續(xù)的網(wǎng)頁(yè)上被請(qǐng)求,而不是在一個(gè)單獨(dú)的網(wǎng)頁(yè)中一起被
/UAP培訓(xùn)案例系列一2—UAPV61-安全編碼規(guī)范,
要求。
會(huì)話管理一組有助于確保Web應(yīng)用程序以安全的模式處理HTTP會(huì)話的控制。
通常,一個(gè)信任邊界由您直接控制的系統(tǒng)部件組成。來(lái)自您直接控制系統(tǒng)
信任邊界以外的所有連接和數(shù)據(jù),包括所有由其它各方管理的客戶端和系統(tǒng),在允
許進(jìn)一步的系統(tǒng)交互之前,應(yīng)當(dāng)被認(rèn)為是不可信的,并在邊界被驗(yàn)證。
漏洞一個(gè)導(dǎo)致系統(tǒng)易受攻擊謝員壞的脆弱點(diǎn)。
某種威脅存在利用一種資產(chǎn)或若干資產(chǎn)的脆弱性使這些資產(chǎn)損失或破壞
風(fēng)險(xiǎn)risk
的可能性。
主要指為信息系統(tǒng)安全管理制定的行動(dòng)方針、路線、工作方式、指導(dǎo)原則
安全策略/政策
securitypolicy或程序。
安全需求為使設(shè)備、信息、應(yīng)用及設(shè)施符合安全策略的要求而需要采取的保護(hù)類型
security
及保護(hù)等級(jí)。
requirement
指在計(jì)算機(jī)使用過(guò)程中,設(shè)置的過(guò)于簡(jiǎn)單或非常容易被破解的口令或密
弱口令weak
password碼。
二基本原則
2.1輸入驗(yàn)證
在可信系統(tǒng)(比如:服務(wù)器)上執(zhí)行所有的數(shù)據(jù)驗(yàn)證。
識(shí)別所有的數(shù)據(jù)源,并將其分為可信的和不可信的。驗(yàn)證所有來(lái)自不可信數(shù)據(jù)源(比如:
數(shù)據(jù)庫(kù),文件流,等)的數(shù)據(jù)。
一7UAP培訓(xùn)案例系列一3—UAPV61-安全編碼規(guī)范L
應(yīng)當(dāng)為應(yīng)用程序應(yīng)提供一個(gè)集中的輸入驗(yàn)證規(guī)則。
為所有輸入明確恰當(dāng)?shù)淖址热纾篣TF-8。
在輸入驗(yàn)證前,將數(shù)據(jù)按照常用字符集進(jìn)行編碼(規(guī)范化X
丟棄任何沒(méi)有通過(guò)輸入驗(yàn)證的數(shù)據(jù)。
在處理以前,驗(yàn)證所有來(lái)自客戶端的數(shù)據(jù),包括:所有參數(shù)、URL、HTTP頭信息(比如:
cookie名字和數(shù)據(jù)值X
3僉證在請(qǐng)求和響應(yīng)的報(bào)頭信息中只含有ASCII字符。
核實(shí)來(lái)自重定向輸入的數(shù)據(jù)(一個(gè)攻擊者可能向重定向的目標(biāo)直接提交惡意代碼,從而
避開(kāi)應(yīng)用程序邏輯以及在重定向前執(zhí)行的任何驗(yàn)證1
3僉證正確的數(shù)據(jù)類型。
驗(yàn)證數(shù)據(jù)范圍。
驗(yàn)證數(shù)據(jù)長(zhǎng)度。
盡可能采用“白名單”形式,驗(yàn)證所有的輸入。
如果任何潛在的危險(xiǎn)字符必須被作為輸入,請(qǐng)確保您執(zhí)行了額外的控制,比如:輸出編
碼、特定的安全API、以及在應(yīng)用程序中使用的原因。部分常見(jiàn)的危險(xiǎn)字符包括:<>",%()
如果您使用的標(biāo)準(zhǔn)驗(yàn)證規(guī)則無(wú)法驗(yàn)證下面的輸入,那么它們需要被單獨(dú)驗(yàn)證:驗(yàn)證空字
節(jié)(%00);驗(yàn)證換行符(%0d,%0a,\r,\n);驗(yàn)證路徑替代字符"點(diǎn)-點(diǎn)-斜杠"(或,.\\如果
支持UTF-8擴(kuò)展字符集編碼,驗(yàn)證替代字符:%cO%ae%cO%ae/(使用規(guī)范化驗(yàn)證雙編碼或
其他類型的編碼攻擊)。
/UAP培訓(xùn)案例系列—4—UAPV61-安全編碼規(guī)范,
2.2輸出編碼
在可信系統(tǒng)(比如:服務(wù)器)上執(zhí)行所有的編碼。
為每一種輸出編碼方法采用一個(gè)標(biāo)準(zhǔn)的、已通過(guò)測(cè)試的規(guī)則。
通過(guò)語(yǔ)義輸出編碼方式,對(duì)所有返回到客戶端的來(lái)自于應(yīng)用程序信任邊界之外的數(shù)據(jù)進(jìn)
行編碼。HTML實(shí)體編碼是一個(gè)例子,但不是在所有的情況下都可用。
除非對(duì)目標(biāo)編譯器是安全的,否則請(qǐng)對(duì)所有字符進(jìn)行編碼。
針對(duì)SQL、XML和LDAP查詢,語(yǔ)義凈化所有不可信數(shù)據(jù)的輸出。
對(duì)于操作系統(tǒng)命令,凈化所有不可信數(shù)據(jù)輸出。
2.3身份驗(yàn)證和密碼管理
除了那些特定設(shè)為“公開(kāi)”的內(nèi)容以外,對(duì)所有的網(wǎng)頁(yè)和資源要求身份驗(yàn)證。
所有的身份驗(yàn)證過(guò)程必須在可信系統(tǒng)(比如:服務(wù)器)上執(zhí)行。
在任何可能的情況下,建立并使用標(biāo)準(zhǔn)的、已通過(guò)測(cè)試的身份驗(yàn)證服務(wù)。
為所有身份驗(yàn)證控制使用一個(gè)集中實(shí)現(xiàn)的方法,其中包括利用庫(kù)文件請(qǐng)求外部身份驗(yàn)證
服務(wù)。
將身份驗(yàn)證邏輯從被請(qǐng)求的資源中隔離開(kāi),并使用重定向到或來(lái)自集中的身份驗(yàn)證控制。
所有的身份驗(yàn)證控制應(yīng)當(dāng)安全的處理未成功的身份驗(yàn)證。
所有的管理和賬戶管理功能至少應(yīng)當(dāng)具有和主要身份驗(yàn)證機(jī)制一樣的安全性。
如果您的應(yīng)用程序管理著憑證的存儲(chǔ),那么應(yīng)當(dāng)保證只保存了通過(guò)使用強(qiáng)加密單向
salted哈希算法得到的密碼,并且只有應(yīng)用程序具有對(duì)保存密碼和密鑰的表/文件的寫(xiě)權(quán)限
(如果可以避免的話,不要使用MD5算法X
密碼哈希必須在可信系統(tǒng)(比如:服務(wù)器)上執(zhí)行。
〃UAP培訓(xùn)案例系列一5—UAPV61-安全編碼規(guī)范為
只有當(dāng)所有的數(shù)據(jù)輸入以后,才進(jìn)行身份驗(yàn)證數(shù)據(jù)的驗(yàn)證,特別是對(duì)連續(xù)身份驗(yàn)證機(jī)制。
身份驗(yàn)證的失敗提示信息應(yīng)當(dāng)避免過(guò)于明確。比如:可以使用“用戶名和/或密碼錯(cuò)誤”,
而不要使用"用戶名錯(cuò)誤"或者"密碼錯(cuò)誤"。錯(cuò)誤提示信息在顯示和源代碼中應(yīng)保持一致。
為涉及敏感信息或功能的外部系統(tǒng)連接使用身份驗(yàn)證。
用于訪問(wèn)應(yīng)用程序以外服務(wù)的身份驗(yàn)證憑據(jù)信息應(yīng)當(dāng)加密,并存儲(chǔ)在一個(gè)可信系統(tǒng)(比
如:服務(wù)器)中受到保護(hù)的地方。源代碼不是一個(gè)安全的地方。
只使用HTTPPost請(qǐng)求傳輸身份驗(yàn)證的憑據(jù)信息。
非臨時(shí)密碼只在加密連接中發(fā)送或作為加密的數(shù)據(jù)(比如,一封加密的郵件X通過(guò)郵
件重設(shè)臨時(shí)密碼可以是一個(gè)例外。
通過(guò)政策或規(guī)則加強(qiáng)密碼復(fù)雜度的要求(比如:要求使用字母、數(shù)字和/或特殊符號(hào)X
身份驗(yàn)證的憑據(jù)信息應(yīng)當(dāng)足夠復(fù)雜以對(duì)抗在其所部署環(huán)境中的各種威脅攻擊。
通過(guò)政策和規(guī)則加強(qiáng)密碼長(zhǎng)度要求。常用的是8個(gè)字符長(zhǎng)度,但是16個(gè)字符長(zhǎng)度更好,
或者考慮使用多單詞密碼短語(yǔ)。
輸入的密碼應(yīng)當(dāng)在用戶的屏幕上模糊顯示(比如:在Web表單中使用"password”輸入類
型1
當(dāng)連續(xù)多次登錄失敗后(比如:通常情況下是5次),應(yīng)強(qiáng)制鎖定賬戶。賬戶鎖定的時(shí)
間必須足夠長(zhǎng),以阻止暴力攻擊猜測(cè)登錄信息,但是不能長(zhǎng)到允許執(zhí)行一次拒絕服務(wù)攻擊。
密碼重設(shè)和更改操作需要類似于賬戶創(chuàng)建和身份驗(yàn)證的同樣控制等級(jí)。
密碼重設(shè)問(wèn)題應(yīng)當(dāng)支持盡可能隨機(jī)的提問(wèn)(比如:"最喜爰的運(yùn)動(dòng)”是一個(gè)壞的問(wèn)題,因
為籃球是最常見(jiàn)的答案X
如果使用基于郵件的重設(shè),只將臨時(shí)鏈接或密碼發(fā)送到預(yù)先注冊(cè)的郵件地址。
臨時(shí)密碼和鏈接應(yīng)當(dāng)有一個(gè)短暫的有效期。
/UAP培訓(xùn)案例系列一6—UAPV61-安全編碼規(guī)范/一
當(dāng)再次使用臨時(shí)密碼時(shí),強(qiáng)制修改臨時(shí)密碼。
當(dāng)密碼重新設(shè)置時(shí),通知用戶。
阻止密碼重復(fù)使用。
密碼在被更改前應(yīng)當(dāng)至少使用了一天,以阻止密碼重用攻擊。(如果有阻止密碼重復(fù)使
用的政策)
根據(jù)政策或規(guī)則的要求,強(qiáng)制定期更改密碼。關(guān)鍵系統(tǒng)可能會(huì)要求更頻繁的更改。更改
時(shí)間周期必須進(jìn)行明確。
為密碼填寫(xiě)框禁用“記住密碼”功能。
用戶賬號(hào)的上一次使用信息(成功或失?。?yīng)當(dāng)在下一次成功登錄時(shí)向用戶報(bào)告。
在執(zhí)行關(guān)鍵操作以前,對(duì)用戶再次進(jìn)行身份驗(yàn)證。
為高度敏感或重要的交易賬戶使用多因子身份驗(yàn)證機(jī)制。
如果使用了第三方身份驗(yàn)證的代碼,仔細(xì)檢查代碼以保證其不會(huì)受到任何惡意代碼的影
響。
2.4會(huì)話管理
使用服務(wù)器或者框架的會(huì)話管理控制。應(yīng)用程序應(yīng)當(dāng)只識(shí)別有效的會(huì)話標(biāo)識(shí)符。
會(huì)話標(biāo)識(shí)符必須總是在一個(gè)可信系統(tǒng)(比如:服務(wù)器)上創(chuàng)建。
會(huì)話管理控制應(yīng)當(dāng)使用通過(guò)審查的算法以保證足夠的隨機(jī)會(huì)話標(biāo)識(shí)符。
為包含已驗(yàn)證的會(huì)話標(biāo)識(shí)符的cookie設(shè)置域和路徑,以為站點(diǎn)設(shè)置一個(gè)恰當(dāng)?shù)南拗浦怠?/p>
注銷功能應(yīng)當(dāng)完全終止相關(guān)的會(huì)話或連接。
注銷功能應(yīng)當(dāng)可用于所有受身份驗(yàn)證保護(hù)的網(wǎng)頁(yè)。
在平衡的風(fēng)險(xiǎn)和業(yè)務(wù)功能需求的基礎(chǔ)上,設(shè)置一個(gè)盡量短的會(huì)話超時(shí)時(shí)間。通常情況下,
―一UAP培訓(xùn)案例系列一7—UAPV61-安全編碼規(guī)范/一
應(yīng)當(dāng)不超過(guò)幾個(gè)小時(shí)。
禁止連續(xù)的登錄并強(qiáng)制執(zhí)行周期性的會(huì)話終止,即使是活動(dòng)的會(huì)話。特別是對(duì)于支持富
網(wǎng)絡(luò)連接或連接到關(guān)鍵系統(tǒng)的應(yīng)用程序。終止時(shí)機(jī)應(yīng)當(dāng)可以根據(jù)業(yè)務(wù)需求調(diào)整,并且用戶應(yīng)
當(dāng)收到足夠的通知已減少帶來(lái)的負(fù)面影響。
如果一個(gè)會(huì)話在登錄以前就建立,在成功登錄以后,關(guān)閉該會(huì)話并創(chuàng)建一個(gè)新的會(huì)話。
在任何重新身份驗(yàn)證過(guò)程中建立一個(gè)新的會(huì)話標(biāo)識(shí)符。
不允許同一用戶ID的并發(fā)登錄。
不要在URL、錯(cuò)誤信息或日志中暴露會(huì)話標(biāo)識(shí)符。會(huì)話標(biāo)識(shí)符應(yīng)當(dāng)只出現(xiàn)在HTTPcookie
頭信息中。比如,不要將會(huì)話標(biāo)識(shí)符以GET參數(shù)進(jìn)行傳遞。
生成一個(gè)新的會(huì)話標(biāo)識(shí)符并周期性地使舊會(huì)話標(biāo)識(shí)符失效(這可以緩解那些原標(biāo)識(shí)符被
獲得的特定會(huì)話劫持情況X
在身份驗(yàn)證的時(shí)候,如果連接從HTTP變?yōu)镠TTPS,則生成一個(gè)新的會(huì)話標(biāo)識(shí)符。在應(yīng)
用程序中,推薦持續(xù)使用HTTPS,而非在HTTP和HTTPS之間轉(zhuǎn)換。
為服務(wù)器端的操作執(zhí)行標(biāo)準(zhǔn)的會(huì)話管理,比如,通過(guò)在每個(gè)會(huì)話中使用強(qiáng)隨機(jī)令牌或參
數(shù)來(lái)管理賬戶。該方法可以用來(lái)防止跨站點(diǎn)請(qǐng)求偽造攻擊。
通過(guò)在每個(gè)請(qǐng)求或每個(gè)會(huì)話中使用強(qiáng)隨機(jī)令牌或參數(shù),為高度敏感或關(guān)鍵的操作提供標(biāo)
準(zhǔn)的會(huì)話管理。
為在TLS連接上傳輸?shù)腸ookie設(shè)置"secure"屬性。
將cookie設(shè)置為HttpOnly屬性,除非在應(yīng)用程序中明確要求了客戶端腳本程序讀取或
者設(shè)置cookie的值。
/UAP培訓(xùn)案例系列一8—UAPV61-安全編碼規(guī)范,
2.5訪問(wèn)控制
只使用可信系統(tǒng)對(duì)象(比如:服務(wù)器端會(huì)話對(duì)象)以做出訪問(wèn)授權(quán)的決定。
安全的處理訪問(wèn)控制失敗的操作。
如果應(yīng)用程序無(wú)法訪問(wèn)其安全配置信息,則拒絕所有的訪問(wèn)。
在每個(gè)請(qǐng)求中加強(qiáng)授權(quán)控制,包括:服務(wù)器端腳本產(chǎn)生的請(qǐng)求「includes"和來(lái)自象AJAX
和FLASH那樣的富客戶端技術(shù)的請(qǐng)求。
限制只有授權(quán)的用戶才能訪問(wèn)文件或其他資源,包括那些應(yīng)用程序外部的直接控制。
限制只有授權(quán)的用戶才能訪問(wèn)受保護(hù)的URL。
限制只有授權(quán)的用戶才能訪問(wèn)受保護(hù)的功能。
限制只有授權(quán)的用戶才能訪問(wèn)直接對(duì)象引用。
限制只有授權(quán)的用戶才能訪問(wèn)服務(wù)。
限制只有授權(quán)的用戶才能訪問(wèn)應(yīng)用程序數(shù)據(jù)。
限制通過(guò)使用訪問(wèn)控制來(lái)訪問(wèn)用戶、數(shù)據(jù)屬性和策略信息。
限制只有授權(quán)的用戶才能訪問(wèn)與安全相關(guān)的配置信息。
服務(wù)器端執(zhí)行的訪問(wèn)控制規(guī)則和表示層實(shí)施的訪問(wèn)控制規(guī)則必須匹配。
如果狀態(tài)數(shù)據(jù)必須存儲(chǔ)在客戶端,使用加密算法,并在服務(wù)器端檢查完整性以捕獲狀態(tài)
的改變。
強(qiáng)制應(yīng)用程序邏輯流程遵照業(yè)務(wù)規(guī)則。
如果長(zhǎng)的身份驗(yàn)證會(huì)話被允許,周期性的重新驗(yàn)證用戶的身份,以確保他們的權(quán)限沒(méi)有
改變。如果發(fā)生改變,注銷該用戶,并強(qiáng)制他們重新執(zhí)行身份驗(yàn)證。
應(yīng)用程序必須支持帳戶失效,并在帳戶停止使用時(shí)終止會(huì)話(比如:角色、職務(wù)狀況、
/UAP培訓(xùn)案例系列一9一UAPV61-安全編碼規(guī)范/一
業(yè)務(wù)處理的改變,等等X
服務(wù)帳戶,或連接到或來(lái)自外部系統(tǒng)的帳號(hào),應(yīng)當(dāng)只有盡可能小的權(quán)限。
2.6加密規(guī)范
所有用于保護(hù)來(lái)自應(yīng)用程序用戶秘密信息的加密功能都必須在一個(gè)可信系統(tǒng)(比如:服
務(wù)器)上執(zhí)行。為了在客戶端和服務(wù)器之間保護(hù)秘密信息,在客戶端加密秘密信息也是必須
的。
保護(hù)主要秘密信息免受未授權(quán)的訪問(wèn)。
安全的處理加密模塊失敗的操作。
為防范對(duì)隨機(jī)數(shù)據(jù)的猜測(cè)攻擊,應(yīng)當(dāng)使用加密模塊中已驗(yàn)證的隨機(jī)數(shù)生成器生成所有的
隨機(jī)數(shù)、隨機(jī)文件名、隨機(jī)GUID和隨機(jī)字符串。
應(yīng)用程序使用的加密模塊應(yīng)當(dāng)遵從FIPS140-2或其他等同的標(biāo)準(zhǔn)(請(qǐng)見(jiàn):
/groups/STM/cmvp/validation.html\
2.7錯(cuò)誤處理和日志
不要在錯(cuò)誤響應(yīng)中泄露敏感信息,包括:系統(tǒng)的詳細(xì)信息、會(huì)話標(biāo)識(shí)符或者帳號(hào)信息。
使用錯(cuò)誤處理以避免顯示調(diào)試或堆棧跟蹤信息。
使用通用的錯(cuò)誤消息并使用定制的錯(cuò)誤頁(yè)面。
應(yīng)用程序應(yīng)當(dāng)處理應(yīng)用程序錯(cuò)誤,并且不依賴服務(wù)器配置。
在默認(rèn)情況下,應(yīng)當(dāng)拒絕訪問(wèn)與安全控制相關(guān)聯(lián)的錯(cuò)誤處理邏輯。
所有的日志記錄控制應(yīng)當(dāng)在可信系統(tǒng)(比如:服務(wù)器)上執(zhí)行。
日志記錄控制應(yīng)當(dāng)支持記錄特定安全事件的成功或者失敗操作。
/UAP培訓(xùn)案例系列一10—UAPV61-安全編碼規(guī)范/一
確保日志記錄包含了重要的日志事件數(shù)據(jù)。
確保日志記錄中包含的不可信數(shù)據(jù),不會(huì)在查看界面或者軟件時(shí)以代碼的形式被執(zhí)行。
限制只有授權(quán)的個(gè)人才能訪問(wèn)日志。
不要在日志中保存敏感信息,如密碼。
確保一個(gè)執(zhí)行日志查詢分析機(jī)制的存在。
記錄所有失敗的輸入驗(yàn)證。
記錄所有的身份驗(yàn)證嘗試,特別是失敗的驗(yàn)證。
記錄所有失敗的訪問(wèn)控制。
記錄明顯的修改事件,包括對(duì)于狀態(tài)數(shù)據(jù)非期待的修改。
記錄連接無(wú)效或者已過(guò)期的會(huì)話令牌嘗試。
記錄所有的系統(tǒng)例外。
記錄所有的管理功能行為,包括對(duì)于安全配置設(shè)置的更改。
記錄加密模塊的錯(cuò)誤。
使用加密哈希功能以驗(yàn)證日志記錄的完整性。
2.8數(shù)據(jù)保護(hù)
保護(hù)所有存放在服務(wù)器上緩存的或臨時(shí)拷貝的敏感數(shù)據(jù),以避免非授權(quán)的訪問(wèn),并在臨
時(shí)工作文件不再需要時(shí)被盡快清除。
即使在服務(wù)器端,任然要加密存儲(chǔ)的高度機(jī)密信息,比如,身份驗(yàn)證的驗(yàn)證數(shù)據(jù)。總是
使用已經(jīng)被很好驗(yàn)證過(guò)的算法。
保護(hù)服務(wù)器端的源代碼不被用戶下載。
不要在客戶端上以明文形式或其他非加密安全模式保存密碼、連接字符串或其他敏感信
/UAP培訓(xùn)案例系列一11—UAPV61-安全編碼規(guī)范/一
刪除用戶可訪問(wèn)產(chǎn)品中的注釋,以防止泄露后臺(tái)系統(tǒng)或者其他敏感信息。
不要在HTTPGET請(qǐng)求參數(shù)中包含敏感信息。
禁止表單中的自動(dòng)填充功能,因?yàn)楸韱沃锌赡馨舾行畔?,包括身份?yàn)證信息。
禁止客戶端緩存網(wǎng)頁(yè),因?yàn)榭赡馨舾行畔ⅰ?Cache-Control:no-store",可以和HTTP
報(bào)頭控制"Pragma:no-cache"一起使用,該控制不是非常有效,但是與HTTP/1.0向后兼容。
應(yīng)用程序應(yīng)當(dāng)支持,當(dāng)數(shù)據(jù)不再需要的時(shí)候,刪除敏感信息(比如:個(gè)人信息或者特定
財(cái)務(wù)數(shù)據(jù)1
為存儲(chǔ)在服務(wù)器中的敏感信息提供恰當(dāng)?shù)脑L問(wèn)控制。這包括緩存的數(shù)據(jù)、臨時(shí)文件以及
只允許特定系統(tǒng)用戶訪問(wèn)的數(shù)據(jù)。
2.9通訊安全
為所有敏感信息采用加密傳輸。其中應(yīng)該包括使用TLS對(duì)連接的保護(hù),以及支持對(duì)敏感
文件或^基于HTTP連接的不連續(xù)加密。
沒(méi)有成功的TLS連接不應(yīng)當(dāng)后退成為一個(gè)不安全的連接。
為所有要求身份驗(yàn)證的訪問(wèn)內(nèi)容和所有其他的敏感信息提供TLS連接。
為包含敏感信息或功能、目連接到外部系統(tǒng)的連接使用TLS。
使用配置合理的單一標(biāo)準(zhǔn)TLS連接。
為所有的連接明確字符編碼。
當(dāng)鏈接到外部站點(diǎn)時(shí),過(guò)濾來(lái)自HTTPreferer中包含敏感信息的參數(shù)。
/UAP培訓(xùn)案例系列一12—UAPV61-安全編碼規(guī)范,
2.10數(shù)據(jù)庫(kù)安全
使用強(qiáng)類型的參數(shù)化查詢方法。
使用輸入驗(yàn)證和輸出編碼,并確保處理了元字符。如果失敗,則不執(zhí)行數(shù)據(jù)庫(kù)命令。
確保變量是強(qiáng)類型的。
當(dāng)應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)時(shí),應(yīng)使用盡可能最低的權(quán)限。
為數(shù)據(jù)庫(kù)訪問(wèn)使用安全憑證。
連接字符串不應(yīng)當(dāng)在應(yīng)用程序中硬編碼。連接字符串應(yīng)當(dāng)存儲(chǔ)在一個(gè)可信服務(wù)器的獨(dú)立
配置文件中,并且應(yīng)當(dāng)被加密。
盡可能地快速關(guān)閉數(shù)據(jù)庫(kù)連接。
2.11文件管理
不要把用戶提交的數(shù)據(jù)直接傳送給任何動(dòng)態(tài)調(diào)用功能。
在允許上傳一個(gè)文檔以前進(jìn)行身份驗(yàn)證。
只允許上傳滿足業(yè)務(wù)需要的相關(guān)文檔類型。
通過(guò)檢查文件報(bào)頭信息,驗(yàn)證上傳文檔是否是所期待的類型。只驗(yàn)證文件類型擴(kuò)展是不
夠的。
不要把文件保存在與應(yīng)用程序相同的Web環(huán)境中。文件應(yīng)當(dāng)保存在內(nèi)容服務(wù)器或者數(shù)
據(jù)庫(kù)中。
防止或限制上傳任意可能被Web服務(wù)器解析的文件。
當(dāng)引用已有文件時(shí),使用一個(gè)白名單記錄允許的文件名和類型。驗(yàn)證傳遞的參數(shù)值,如
果與預(yù)期的值不匹配,則拒絕使用,或者使用默認(rèn)的硬編碼文件值代替。
不要將用戶提交的數(shù)據(jù)傳遞到動(dòng)態(tài)重定向中。如果必須允許使用,那么重定向應(yīng)當(dāng)只接
/UAP培訓(xùn)案例系列一13—UAPV61-安全編碼規(guī)范/一
受通過(guò)驗(yàn)證的相對(duì)路徑URL。
不要傳遞目錄或文件路徑,使用預(yù)先設(shè)置路徑列表中的匹配索引值。
絕對(duì)不要將絕對(duì)文件路徑傳遞給客戶。
2.12通用編碼規(guī)范
使用校驗(yàn)和或哈希值驗(yàn)證編譯后的代碼、庫(kù)文件、可執(zhí)行文件和配置文件的完整性。
通過(guò)了解您使用的編程語(yǔ)言的底層表達(dá)式以及它們是如何進(jìn)行數(shù)學(xué)計(jì)算,從而避免計(jì)算
錯(cuò)誤。密切注意字節(jié)大小依賴、精確度、有無(wú)符合、截尾操作、轉(zhuǎn)換、字節(jié)之間的組合、
“not-a-number”計(jì)算、以及對(duì)于編程語(yǔ)言底層表達(dá)式如何處理非常大或者非常小的數(shù)。
不要將用戶提供的數(shù)據(jù)傳遞給任何動(dòng)態(tài)運(yùn)行的功能。
限制用戶生成新代碼或更改現(xiàn)有代碼。
確保產(chǎn)品中不要包含調(diào)試代碼。
產(chǎn)品中不要包含后門(mén)代碼。
保持一個(gè)干凈的空間。確保未使用的,臨時(shí)的以及備份的文件不能出現(xiàn)在產(chǎn)品中。
不能允許復(fù)活節(jié)彩蛋存在。隱藏的代碼不容易被測(cè)試到,很容易帶來(lái)安全漏洞。復(fù)活節(jié)
彩蛋會(huì)導(dǎo)致兩個(gè)問(wèn)題。首先,其很少被測(cè)試或者安全檢測(cè)。第二,在安全弱點(diǎn)背后很難診斷
其動(dòng)機(jī)。
/UAP培訓(xùn)案例系列—14—UAPV61-安全編碼規(guī)范,
三據(jù)庫(kù)
3.1使用參數(shù)化的SQL
3.1.1簡(jiǎn)介
參數(shù)化的SQL請(qǐng)求是防止SQL注入的最好方法。
3.1.2詳細(xì)描述
導(dǎo)致SQL諸多漏洞的原因就是攻擊者可以改變SQL請(qǐng)求的內(nèi)容,使開(kāi)發(fā)者認(rèn)為本應(yīng)當(dāng)是
數(shù)據(jù)的值變成了SQL執(zhí)行命令的一部分。在構(gòu)造SQL請(qǐng)求時(shí),開(kāi)發(fā)者應(yīng)當(dāng)知道哪些應(yīng)該被
翻譯為數(shù)據(jù)而哪些應(yīng)該被翻譯為命令的一部分。如果正確的使用參數(shù)化的SQL語(yǔ)句,就可
以通過(guò)不允許數(shù)據(jù)指向改變的方法來(lái)防御幾乎所有的SQL注入攻擊。參數(shù)化的SQL語(yǔ)句通
常是由SQL字符構(gòu)造的,但是來(lái)自客戶的數(shù)據(jù)是需要與一些綁定參數(shù)組合在一起的。也就
是說(shuō),開(kāi)發(fā)者使用這些綁定參數(shù)來(lái)準(zhǔn)確的向數(shù)據(jù)庫(kù)指出哪些應(yīng)該被當(dāng)作數(shù)據(jù),哪些應(yīng)該被當(dāng)
作命令。當(dāng)程序要執(zhí)行該語(yǔ)句的時(shí)候,它就會(huì)告知數(shù)據(jù)庫(kù)這些綁定參數(shù)的運(yùn)行值,這樣的操
作避免了數(shù)據(jù)被認(rèn)為是命令語(yǔ)句而被執(zhí)行的錯(cuò)誤。
但是,參數(shù)化的SQL語(yǔ)句并不能完全的避免SQL注入攻擊的發(fā)生,看以下的例子:
這是一個(gè)javaweb應(yīng)用程序,讓用戶在數(shù)據(jù)庫(kù)中搜索一些信息,用戶可以指定要搜尋的
對(duì)象的名稱,并用以下代碼執(zhí)行這些查詢:
Stringitem=request.getParamater("item");
Stringq="SELECT*FROMrecordsWHEREitem="+item;
PreparedStatementstmt=conn.prepareStatement(q);
ResultSetresults=stmt.execute();
/UAP培訓(xùn)案例系列一15—UAPV61-安全編碼規(guī)范,
雖然本例程序使用了參數(shù)化的接口,但是它犯了一個(gè)很常見(jiàn)的錯(cuò)誤:把用戶的輸入作為
prepareStatement()的參數(shù)傳入,如果允許用戶控制PreparedStatement的內(nèi)容,參數(shù)化SQL
提供的安全特性就會(huì)失去效果,很多SQL注入攻擊的關(guān)鍵字也會(huì)被包含在之前構(gòu)造的語(yǔ)句
中。
將前面的問(wèn)題改正,合理的使用參數(shù)化SQL,具體代碼如下:
Stringitem=request.getParamater("item");
Stringq="SELECT*FROMrecordsWHEREitem=?";
PreparedStatementstmt=conn.prepareStatement(q);
stmt.setString(l,item);
ResultSetresults=stmt.execute();
你很可能經(jīng)常發(fā)現(xiàn)自己不能有效地使用參數(shù)化SQL語(yǔ)句。在更加復(fù)雜的情況會(huì)出
現(xiàn)要求用戶輸入影響SQL語(yǔ)句結(jié)構(gòu)的情況,譬如:要求在where子句里增加一個(gè)動(dòng)態(tài)約束。
但是不要使用這些方法來(lái)把用戶的輸入連接為請(qǐng)求語(yǔ)句。用戶的輸入也可以以一種間接的方
法來(lái)影響命令的結(jié)構(gòu),例如:構(gòu)造一組與可能包含在SQL語(yǔ)句中的元素對(duì)應(yīng)的字符串,在
構(gòu)造語(yǔ)句時(shí)來(lái)自用戶的輸入就可以得到本應(yīng)由程序控制的值。
3.2通過(guò)“行”級(jí)別的訪問(wèn)控制來(lái)使用數(shù)據(jù)庫(kù)
3.2.1簡(jiǎn)介
不要依賴應(yīng)用程序訪問(wèn)控制能夠保護(hù)數(shù)據(jù)庫(kù)的數(shù)據(jù),限制每個(gè)請(qǐng)求使用戶只能訪問(wèn)他們
自己的數(shù)據(jù)。
/UAP培訓(xùn)案例系列一16—UAPV61-安全編碼規(guī)范,
3.2.2詳細(xì)描述
例如:在一個(gè)使用戶在線訪問(wèn)記錄的javaweb程序中,在用戶認(rèn)證后,與用戶ID有關(guān)
的所有信息都會(huì)被顯示在一個(gè)HTML表格里。但是如果代碼實(shí)現(xiàn)如下面所示,會(huì)導(dǎo)致用戶可
以查看任意用戶的信息。
StringrecID=request.getParamater("reclD");
Stringq="SELECT*FROMrecordsWHEREreclD=?";
PreparedStatementstmt=conn.prepareStatement(q);
stmt.setString(l,recID);
ResultSetresults=stmt.execute();
雖然程序在recID的值上正確地使用了參數(shù)化SQL語(yǔ)句來(lái)防止注入攻擊,這段代碼仍然
是不安全的。程序邏輯上是要實(shí)現(xiàn)recID的值是按照用戶ID從一個(gè)表中讀出的。但是攻擊者
可以提交一個(gè)任意值的recID,這樣的話如果recID值在表中存在就越過(guò)了訪問(wèn)控制。
解決這種缺陷的方法是使用額外的邏輯來(lái)限制recID的值,使它是只有某個(gè)特定用戶能
夠提交的。但是一個(gè)聰明的攻擊者也可以利用定位一個(gè)在程序意料外的路徑或者提交無(wú)序的
請(qǐng)求來(lái)達(dá)到攻擊目的,更好的辦法是在數(shù)據(jù)庫(kù)語(yǔ)句本身進(jìn)行訪問(wèn)控制,這樣攻擊者就很難越
過(guò)這個(gè)限制。所以上面的代碼可以作以下的改進(jìn):
StringrecID=request.getParamater("reclD");
Stringq="SELECT*FROMrecordsWHEREreclD=?ANDusr=?";
PreparedStatementstmt=conn.prepareStatement(q);
stmt.setString(l,recID);
stmt.setString(2,ctx.getAuthenticatedUserName());
ResultSetresults=stmt.execute();
這段代碼對(duì)WHERE塊增加了一個(gè)約束,使返回的結(jié)果必須是與當(dāng)前認(rèn)證的用戶關(guān)聯(lián)的。
/UAP培訓(xùn)案例系列一17—UAPV61-安全編碼規(guī)范,
3.3把數(shù)據(jù)庫(kù)中的數(shù)據(jù)作為不能完全相信的輸入對(duì)待
3.3.1簡(jiǎn)介
確保從數(shù)據(jù)庫(kù)讀出的數(shù)據(jù)符合預(yù)期。
3.3.2詳細(xì)描述
相比不可信的外部輸入,系統(tǒng)會(huì)對(duì)數(shù)據(jù)庫(kù)給予一定的信任,所以對(duì)來(lái)自數(shù)據(jù)庫(kù)的數(shù)據(jù)也
需要進(jìn)行驗(yàn)證會(huì)顯得不可理解。但是建議還是要對(duì)來(lái)自數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行驗(yàn)證,確保其格式
正確且能夠安全的使用,不要盲目的信賴數(shù)據(jù)庫(kù)。下面就是一些對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行簡(jiǎn)單有效
驗(yàn)證的例子。
1、要返回的單值數(shù)據(jù)只能在一行出現(xiàn),如果存在多行的話很可能被攻擊者插入了注入
語(yǔ)句,而數(shù)據(jù)庫(kù)的單值約束很可能不起作用。
2、使用安全可信的內(nèi)容,而不要使用意料之外的可能具有惡意的信息(如常用系統(tǒng)或
者瀏覽器的關(guān)鍵字),如果出現(xiàn)了這樣的字符,就很可能說(shuō)明攻擊者已經(jīng)成功地越過(guò)了輸入
驗(yàn)證,正在試圖發(fā)動(dòng)注入或者跨站腳本攻擊。即使你的輸入驗(yàn)證機(jī)制很完美,攻擊者也可能
有其它的渠道從數(shù)據(jù)庫(kù)中得到數(shù)據(jù)。例如,你可能發(fā)現(xiàn)用戶的某些信息里含有〈script〉標(biāo)簽,
這很可能就是來(lái)自web的問(wèn)題。
攻擊者可能在完全控制數(shù)據(jù)庫(kù)之前找到一些方法向數(shù)據(jù)庫(kù)寫(xiě)入一些惡意數(shù)據(jù)。如果不加
以防范,就很可能真的導(dǎo)致數(shù)據(jù)庫(kù)被攻擊者完全控制。對(duì)你認(rèn)為的程序安全的部分再加以驗(yàn)
證絕對(duì)不是多余,最重要的一點(diǎn)是你的程序很可能并不是唯一能向數(shù)據(jù)庫(kù)寫(xiě)入數(shù)據(jù)的程序。
所以,也就不能指望來(lái)自數(shù)據(jù)庫(kù)的信息能夠完全滿足你的需要。
/UAP培訓(xùn)案例系列—18—UAPV61-安全編碼規(guī)范,
見(jiàn)WEB應(yīng)用開(kāi)發(fā)
4.1基本安全
4.1.1使用POST而不是GET
簡(jiǎn)介
使用HTTPPOST方法來(lái)保證Request參數(shù)的安全。
詳細(xì)描述
使用Get方法傳遞的參數(shù)包含在URL里,它們可以被記錄在日志文件里(如apache的
accessjog),通過(guò)HTTP頭的referrer發(fā)送到其它站點(diǎn)上,被存儲(chǔ)在瀏覽器歷史記錄里。而
Post方法幾乎在所有情況下都需要被使用很顯然,它需要驗(yàn)證表單來(lái)確保賬戶信息的安全。
禁止使用Get方法可以防止很多跨站腳本攻擊漏洞,因?yàn)檫@樣可以使攻擊者無(wú)法向用戶發(fā)送
含有惡意Get參數(shù)的URL。
4.1.2假設(shè)瀏覽器已被控制
簡(jiǎn)介
不管在客戶端是否經(jīng)過(guò)輸入驗(yàn)證,在服務(wù)端仍要進(jìn)行驗(yàn)證。
詳細(xì)描述
Web程序總會(huì)接收到來(lái)自攻擊者的請(qǐng)求,對(duì)客戶習(xí)慣做出的任何假設(shè)都有可能會(huì)被用來(lái)
對(duì)你的程序發(fā)起攻擊。在驗(yàn)證之前請(qǐng)不要相信來(lái)自客戶端的任何數(shù)據(jù),包括那些不常被客戶
/UAP培訓(xùn)案例系列一19—UAPV61-安全編碼規(guī)范/一
修改的值(如cookies,隱藏的域X只使用客戶端的某些特性(如JavaScript代碼)來(lái)給合
法用戶提供反饋是不安全的。
開(kāi)發(fā)者有很多方法來(lái)創(chuàng)建動(dòng)態(tài)和交互的web頁(yè)面包括JavaScript,、Flash、JavaApplets,
ActiveX等,這些技術(shù)有一個(gè)共同的弱點(diǎn):攻擊者可以繞過(guò)他們而直接與服務(wù)器通信。
攻擊之前,攻擊者會(huì)故意構(gòu)造有針對(duì)性的試探,并使用嗅探技術(shù)。由于這臺(tái)機(jī)器被他們
所控制,嗅探SSL通信完全沒(méi)有問(wèn)題。這就意味著不可能存在一個(gè)“秘密的"隱藏域或者一個(gè)
用戶不知道具體含義的特殊表單。攻擊者完全了解瀏覽器端和服務(wù)器端的通信以及他們的運(yùn)
作方式。攻擊者很容易偽造出能與原始交互界面幾乎相同HTTP請(qǐng)求的腳本,所以來(lái)自客戶
端的數(shù)據(jù)根本不能“默認(rèn)具有某種屬性”,在客戶端進(jìn)行的輸入驗(yàn)證只是為了加強(qiáng)程序的可用
性,并不是為服務(wù)器接收的數(shù)據(jù)提供安全保證。
HTTP協(xié)議是無(wú)狀態(tài)的,開(kāi)發(fā)者應(yīng)該想出方法來(lái)避免它的這種缺陷。兩種流行的解決方
法是使用cookie和使用隱藏表單。這兩種方法都有一些誘人的特性:對(duì)一般的用戶而言,
它們發(fā)送返回給服務(wù)器的數(shù)據(jù)在瀏覽器中是不可見(jiàn)的而且是不能直接操作的。當(dāng)然,如果是
惡意用戶,這兩種方法都會(huì)失效,因?yàn)閻阂庥脩艨梢暂p易偽造cookie或者隱藏表單。但這
并不是說(shuō)使用隱藏表單或者cookie是沒(méi)用的或者不安全的,而是說(shuō)著必須對(duì)兩種方法接收
到的數(shù)據(jù)進(jìn)行校驗(yàn)。
4.1.3假設(shè)瀏覽器是公開(kāi)的
簡(jiǎn)介
要假設(shè)攻擊者可以了解學(xué)習(xí)你發(fā)送給他們的任何數(shù)據(jù),即使這些信息沒(méi)有在瀏覽器中顯
/UAP培訓(xùn)案例系列—20—UAPV61-安全編碼規(guī)范,
詳細(xì)描述
攻擊者在進(jìn)行攻擊之前會(huì)先了解你的程序運(yùn)作方式,觀察程序返回的HTTP應(yīng)答包是最
容易的一種方法了,他們通過(guò)這種方式來(lái)尋找URL的格式,URL的參數(shù),隱藏的表單,cookie
值等,還可以讀取頁(yè)面源碼、HTML中的注釋(包括錯(cuò)誤頁(yè)面的HTML),解析JavaScript,根
據(jù)命名習(xí)慣進(jìn)行預(yù)測(cè),還會(huì)使用搜索引擎發(fā)掘該程序其它用戶的信息。你不但不能相信來(lái)自
客戶端的任何數(shù)據(jù),而且不能在應(yīng)答包中包含任何秘密信息。
4.1.4使用JavaScript驗(yàn)證是不安全的
簡(jiǎn)介
不要信任在客戶端進(jìn)行的驗(yàn)證。
詳細(xì)描述
攻擊者很容易就可以繞過(guò)你設(shè)定的那些請(qǐng)求頁(yè)面和瀏覽器,直接與你的應(yīng)用服務(wù)器通信。
這就意味著他們可以繞過(guò)在客戶端所做的任何設(shè)置,譬如JavaScript驗(yàn)證邏輯。JavaScript可
以幫助合法的用戶對(duì)不正常的輸入信息進(jìn)行檢測(cè),但是不能確保服務(wù)器接收到數(shù)據(jù)的安全性。
所以,要在服務(wù)器端進(jìn)行安全驗(yàn)證。
4.1.5不能依賴Request到達(dá)的順序
簡(jiǎn)介
攻擊者可以通過(guò)改變請(qǐng)求順序繞過(guò)有設(shè)計(jì)缺陷的系統(tǒng)的驗(yàn)證。
/UAP培訓(xùn)案例系列一21—UAPV61-安全編碼規(guī)范/----
詳細(xì)描述
攻擊者可以隨意控制request到達(dá)的順序來(lái)適合自己的需要。例如,如果你的程序通過(guò)
不同頁(yè)面來(lái)搜集信息,在較早的表單里驗(yàn)證了信息,而在修改信息的表單則沒(méi)有進(jìn)行驗(yàn)證,
那么攻擊者就可以利用后者來(lái)繞過(guò)你的輸入驗(yàn)證。
4.1.6在惡意環(huán)境中保護(hù)瀏覽器
簡(jiǎn)介
在惡意環(huán)境中保護(hù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 進(jìn)口貨物買(mǎi)賣合同
- 遼寧省家庭居室裝飾裝修合同
- 別墅工程勞務(wù)承包合同
- 樓宇廣告場(chǎng)地租賃合同
- 二零二五年度瓷磚裝飾工程設(shè)計(jì)與施工合同2篇
- 餐飲店裝修驗(yàn)收合同范本
- 火車站裝修合同終止協(xié)議書(shū)
- 電子元件解除居間合同
- 機(jī)場(chǎng)裝修項(xiàng)目取消合同
- 2025年度個(gè)人股份轉(zhuǎn)讓與公司治理結(jié)構(gòu)優(yōu)化合同7篇
- 沖鋒舟駕駛培訓(xùn)課件
- 中石化浙江石油分公司中石化溫州靈昆油庫(kù)及配套工程項(xiàng)目環(huán)境影響報(bào)告書(shū)
- 搞笑朗誦我愛(ài)上班臺(tái)詞
- 汽輪機(jī)熱平衡圖功率的核算方法
- 賓館旅客財(cái)物保管制度
- 鉆孔樁水下混凝土灌注記錄(自動(dòng)生成)1
- nord stage 2用戶手冊(cè)簡(jiǎn)體中文版
- 5A+Chapter+2+Turning+over+a+new+leaf 英語(yǔ)精講課件
- 商業(yè)計(jì)劃書(shū)(BP)行業(yè)與市場(chǎng)的撰寫(xiě)秘籍
- 370萬(wàn)噸大慶原油常壓蒸餾工藝設(shè)計(jì)
- 2023年高一年級(jí)必修二語(yǔ)文背誦篇目
評(píng)論
0/150
提交評(píng)論