內(nèi)容簡介
電子商務(wù)安全編碼對(duì)于從事電子商務(wù)技術(shù)開發(fā)的人員至關(guān)重要,是電子商務(wù)安全理論的具體實(shí)踐。本書劃分為三大篇:PHP安全基礎(chǔ)、Java安全編碼和ASP.NET安全。在每一篇中,按照信息暴露、安全輸入過濾、安全輸出、安全傳輸、安全存儲(chǔ)幾個(gè)環(huán)節(jié)進(jìn)行了勾勒,精心選擇實(shí)例素材,尤其對(duì)于電子商務(wù)中敏感模塊的編碼實(shí)現(xiàn),做了非常詳細(xì)的分析。
本書可作為電子商務(wù)專業(yè)專科生、本科生、研究生的教材,也適合于從事電子商務(wù)研究的專業(yè)技術(shù)人員參考使用。
前 言
安全的電子商務(wù)Web應(yīng)用開發(fā)首先要從對(duì)HTTP協(xié)議的深入理解開始,因?yàn)镠TTP協(xié)議是在客戶端和服務(wù)器端之間運(yùn)輸HTML網(wǎng)頁的車輛,這輛車有兩種車頭:request頭和response頭。客戶端必須獲得一個(gè)有安全意識(shí)的程序員注意,它是典型的Web瀏覽器、蜘蛛機(jī)器人或者其他具有風(fēng)險(xiǎn)的軟件(比如自動(dòng)注冊(cè)提交機(jī))。HTTP協(xié)議通過TCP的三次握手機(jī)制連接到Web服務(wù)器。一旦服務(wù)器收到請(qǐng)求消息,服務(wù)器就開始處理請(qǐng)求和發(fā)回帶有狀態(tài)行的響應(yīng)(如HTTP/1.1 200 OK)。然后,服務(wù)器把剩下的響應(yīng)消息發(fā)送出去,其中可能包含HTML、圖像、音頻、錯(cuò)誤消息或任何其他想要發(fā)送的信息。瀏覽器發(fā)出的HTTP請(qǐng)求類型有GET、POST,還有用在編程中的HEAD、PUT和TRACE類型。
電子商務(wù)程序員編寫出一個(gè)存在漏洞的Web頁面,表面上看起來可能不是什么大問題,但卻可以造成非常嚴(yán)重的問題,包括以下內(nèi)容。
(1) 盜竊賬戶或服務(wù)。當(dāng)Web站點(diǎn)使用會(huì)話狀態(tài)時(shí),會(huì)話標(biāo)識(shí)符通常存儲(chǔ)在用戶瀏覽器的cookie 中,可以通過JavaScript查看和操作站點(diǎn)的cookie。攻擊者可以利用此功能把cookie的內(nèi)容定向到攻擊者擁有的另一個(gè)站點(diǎn)上,也可以在自己主機(jī)的瀏覽器上重新創(chuàng)建這個(gè)cookie,攻擊者看上去好像是Web服務(wù)的原始用戶。根據(jù)被攻擊站點(diǎn)的不同,對(duì)于那些已經(jīng)被盜取信息的用戶,可能會(huì)導(dǎo)致身份盜竊、訪問機(jī)密信息、訪問付費(fèi)內(nèi)容或DoS攻擊等不同的后果。
(2) 用戶重定向。一旦攻擊者發(fā)現(xiàn)了一個(gè)XSS漏洞,他就完全可以使用JavaScript注入重定向整個(gè)瀏覽器。這可能導(dǎo)致安裝間諜軟件、網(wǎng)絡(luò)釣魚或其他常見性的危害。
(3) 用戶跟蹤。因?yàn)镴avaScript可以操作頁面內(nèi)容,所以攻擊者可以在服務(wù)器托管的存在漏洞的頁面中插入圖像,這個(gè)圖像可以被用來跟蹤多個(gè)存在漏洞的Web站點(diǎn)的用戶。此外,攻擊者可以利用JavaScript通過添加單擊事件腳本來替換頁面上所有的鏈接,以便收集更多的統(tǒng)計(jì)信息。
(4) 錯(cuò)誤信息。攻擊者可以使用JavaScript重寫Web頁面內(nèi)容。如果被攻擊的站點(diǎn)是一個(gè)金融Web站點(diǎn),攻擊者為了修改特定的股票價(jià)格來修改站點(diǎn)中的頁面,那么用戶沒有任何辦法辨別顯示的價(jià)格是不正確的價(jià)格,因?yàn)闉g覽器中的URL是相同的。
(5) 瀏覽器插件的安裝和利用。攻擊者可以把<object>標(biāo)記插入頁面中,<object>標(biāo)記可以啟動(dòng)ActiveX控件、Flash、Java或其他的以這種方式控制的插件,然后利用該插件的漏洞來竊取或公開用戶的信息。
(6) DoS攻擊。攻擊者在一個(gè)想要發(fā)動(dòng)DoS攻擊的站點(diǎn)上插入一個(gè)圖像標(biāo)記,并加載最大的圖像。由于此站點(diǎn)有足夠大的用戶瀏覽量,只加載這些圖像就需要占用很大的帶寬,因此該站點(diǎn)就無法再很好地提供其他Internet服務(wù)了。而且,加載圖像屬于正常行為,所以此攻擊很難被發(fā)現(xiàn)。
有鑒于此,開發(fā)者必須掌握安全的Web應(yīng)用編程技能,才能夠滿足電子商務(wù)的需求。
本書并不講述電子商務(wù)網(wǎng)站的宏觀體系開發(fā),如用戶的需求、分析、設(shè)計(jì)、實(shí)現(xiàn)等。本書著眼于戰(zhàn)術(shù)運(yùn)用,重點(diǎn)講述電子商務(wù)編碼的安全實(shí)現(xiàn)環(huán)節(jié)。本書強(qiáng)調(diào)的安全編碼技術(shù)也不是編程的全部技巧,而是程序員在編碼當(dāng)中最容易忽視的環(huán)節(jié),還有電子商務(wù)網(wǎng)站獨(dú)特的安全需求在技術(shù)上的解決。盡管就軟件本身來說,可重用性、開放性、封閉性都能從一定程度上保證編碼本身的生命力更持久,它們當(dāng)然提高了編碼的安全度。但本書并不論述這些編程宏觀方法論的東西,本書的目的是讓讀者理解當(dāng)前三大編程體系的安全基礎(chǔ)和應(yīng)用技術(shù)。因此,本書也不論述加密算法的編程實(shí)現(xiàn)問題,也不討論各種安全漏洞,而是研究對(duì)程序員來說編程應(yīng)如何安全實(shí)現(xiàn)。
安全是一個(gè)程度性的詞匯,沒有絕對(duì)的安全,只有相對(duì)的安全。安全編碼就是在實(shí)現(xiàn)基本功能的基礎(chǔ)上,增加防護(hù)性編碼,以保證基本功能編碼安全順利地實(shí)現(xiàn)功能。安全編碼和風(fēng)險(xiǎn)編碼(黑客程序)是一對(duì)矛盾體,由安全編碼所建立的軟件對(duì)抗的是有風(fēng)險(xiǎn)的環(huán)境中產(chǎn)生的風(fēng)險(xiǎn)編碼。安全性不是一項(xiàng)能夠事后添加到現(xiàn)有應(yīng)用程序的功能,不能等到開發(fā)階段的后期才引入它。安全性是應(yīng)用程序的固有特性,應(yīng)作為設(shè)計(jì)階段的首要任務(wù)來規(guī)劃。為了確保應(yīng)用程序的安全,需要開發(fā)者、架構(gòu)師和管理員齊心協(xié)力。在電子商務(wù)應(yīng)用系統(tǒng)所處的環(huán)境中,惡意用戶輸入的非正常數(shù)據(jù)是風(fēng)險(xiǎn)的主要原因。
本書的讀者定位是掌握編程基礎(chǔ)知識(shí)的程序員和學(xué)習(xí)了安全基礎(chǔ)知識(shí)后待實(shí)踐的電子商務(wù)專業(yè)學(xué)生。因此,本書不再講述安全基礎(chǔ)知識(shí)、術(shù)語,回避了三大編程體系的語法講解,回避了服務(wù)器和數(shù)據(jù)庫管理系統(tǒng)的漏洞討論,也回避了各種安全算法的實(shí)現(xiàn)原理或者它們自身漏洞的討論。本書側(cè)重于程序員運(yùn)用編程工具提供的安全API的運(yùn)用,強(qiáng)調(diào)面向電子商務(wù)應(yīng)用,強(qiáng)調(diào)網(wǎng)頁安全編寫技巧、準(zhǔn)則,強(qiáng)調(diào)編寫安全的代碼,強(qiáng)調(diào)網(wǎng)站整體性安全方案和單頁面安全技巧。也就是說,本書僅限于講解如何開發(fā)安全的電子商務(wù)應(yīng)用程序。通過本書的學(xué)習(xí),讀者能夠在編碼過程中自覺運(yùn)用這些技巧和知識(shí),提高編碼的健壯性,從而進(jìn)一步滿足電子商務(wù)類軟件的產(chǎn)出質(zhì)量。
一個(gè)程序員編寫的程序如果僅僅考慮了基本功能的實(shí)現(xiàn),那么他的程序就如同一個(gè)裸體的嬰兒,沒有任何抵御外部攻擊的能力。安全編碼就是在實(shí)現(xiàn)了基本功能代碼之外,為他穿衣戴帽、披之以鎧甲,以實(shí)現(xiàn)防護(hù)。在什么地方加鎧甲,加什么樣的鎧甲,在什么情形下加,這些是安全編碼要研究的地方。從安全實(shí)現(xiàn)上來看,安全編碼主要分為聲明性安全和程序性安全:聲明性安全主要針對(duì)宏觀配置,有利于掌控應(yīng)用全局的安全;程序性安全代碼邏輯上都等價(jià)于if(已識(shí)別風(fēng)險(xiǎn))...then(防護(hù))...else(意外處理)語句,有利于程序細(xì)節(jié)局部的安全防護(hù)。寫在前面的代碼是后面代碼執(zhí)行的前提,前提自然會(huì)起到保護(hù)后續(xù)代碼(也就是結(jié)果)的作用。安全外殼保護(hù)的永遠(yuǎn)是脆弱的代碼,脆弱的代碼會(huì)產(chǎn)生脆弱敏感性信息的泄露,歸根到底,防護(hù)最終要保護(hù)的就是敏感數(shù)據(jù)。開發(fā)者在開發(fā)網(wǎng)頁程序時(shí),頭腦中應(yīng)該首先去想:①這個(gè)網(wǎng)頁的安全度是什么級(jí)別;②是否需要驗(yàn)證用戶身份、訪問控制權(quán)限;③這個(gè)網(wǎng)頁內(nèi)有沒有需要用戶大量提交的數(shù)據(jù),如果有就要在設(shè)計(jì)網(wǎng)頁內(nèi)增加驗(yàn)證碼,以防止自動(dòng)提交式的癱瘓網(wǎng)站攻擊;④程序員要保證這個(gè)頁面和其他網(wǎng)頁間的邏輯關(guān)系,限制跨頁面訪問和盜鏈訪問,在頁面設(shè)置監(jiān)視量,等等。
本書分為三大篇。第一篇講述了PHP的安全編程知識(shí),PHP面向電子商務(wù)的安全開發(fā)。第二篇講述了Java的安全編程知識(shí),JSP面向電子商務(wù)網(wǎng)站的安全編碼問題。第三篇講述了ASP.NET的安全編程知識(shí),ASP.NET面向電子商務(wù)網(wǎng)站的安全編碼問題。曹杰博士為本書撰寫了整體框架,撰寫了相應(yīng)的章節(jié);張艷萍博士為本書的資料收集、匯總給予了很大支持,并撰寫了相應(yīng)的章節(jié)。
編寫本書的目的是給程序員提供一個(gè)安全編程指南。由于本書編者水平有限,書中難免存在錯(cuò)誤、瑕疵和其他不足之處,懇請(qǐng)讀者批評(píng)、指正。
編 者
目 錄
第1篇 PHP安全基礎(chǔ) 11.1 信息暴露 11.1.1 register_globals和錯(cuò)誤報(bào)告 11.1.2 數(shù)據(jù)庫訪問權(quán)限暴露 31.1.3 配置選項(xiàng) 41.1.4 引入包含帶來的暴露 61.2 輸入過濾 71.2.1 過濾基礎(chǔ) 71.2.2 過濾表單和URL 101.2.3 SQL注入 211.2.4 動(dòng)態(tài)包含的未過濾問題 231.2.5 文件與命令的未過濾問題 261.2.6 驗(yàn)證過濾與授權(quán) 311.2.7 需要關(guān)注輸入過濾的函數(shù) 381.3 輸出轉(zhuǎn)義 401.4 安全傳輸 411.5 安全存儲(chǔ) 501.5.1 共享主機(jī) 501.5.2 加密 601.5.3 上傳文件的安全存儲(chǔ) 661.6 安全開發(fā)原則 671.7 電子商務(wù)PHP開發(fā)實(shí)例 711.7.1 安全登錄 711.7.2 訂單簽名 85第2篇 Java安全編碼 882.1 Java編程陷阱 902.1.1 Java基礎(chǔ)編程陷阱 902.1.2 Java客戶端方面陷阱 952.1.3 Java服務(wù)器端方面陷阱 1032.2 商務(wù)軟件基礎(chǔ)開發(fā)語言Java的安全 1072.2.1 機(jī)密性的實(shí)現(xiàn) 1072.2.2 完整性的實(shí)現(xiàn) 1082.2.3 認(rèn)證性的實(shí)現(xiàn) 1092.2.4 電子商務(wù)安全協(xié)議SSL/TLS/HTTPS的實(shí)現(xiàn) 1102.3 JSP安全 1122.4 電子商務(wù)框架安全編碼 1132.5 支付模塊的安全編碼 121第3篇 ASP.NET安全 1343.1 ASP.NET驗(yàn)證和授權(quán)機(jī)制 1353.2 安全配置 1403.3 輸入過濾 1433.4 輸出轉(zhuǎn)義 1493.5 安全存儲(chǔ) 1503.6 ASP.NET電子商務(wù)安全編碼 1553.6.1 管理訂單 1553.6.2 搜索商品 161參考文獻(xiàn) 167