UAPV61-安全編碼規(guī)范_第1頁(yè)
UAPV61-安全編碼規(guī)范_第2頁(yè)
UAPV61-安全編碼規(guī)范_第3頁(yè)
UAPV61-安全編碼規(guī)范_第4頁(yè)
UAPV61-安全編碼規(guī)范_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論