天天看點

淺析http平台的安全穩定性架構

--杞澆鑷€婄▼搴忓憳銆?013骞寸2鏈?

鍓嶈█锛氶殢鐫€绉誨姩浜掕仈缃戠殑鍏磋搗浠ュ強restful鍜寃eb service鐨勫ぇ瑙勬ā浣跨敤锛宧ttp鍗忚鍥犲叾浣跨敤鏂逛究浠ュ強璺ㄥ鈎鍙扮殑鐗規€э紝鍦╳eb寮€鍙戜互鍙奡OA棰嗗煙寰楀埌浜嗗箍娉涗嬌鐢ㄣ€備絾鍏舵墍娑電洊鐨勪俊鎭紝澶ч兘鏄湭缁忓姞瀵嗙殑鏄庢枃锛屼俊鎭幏鍙栭棬妲涚殑闄嶄綆锛屼篃涓哄簲鐢ㄦ灦鏋勭殑瀹夊叏鎬у強绋沖畾鎬у甫鏉ヤ簡鎸戞垬銆?

瀵逛簬甯歌鐨剋eb鏀誨嚮鎵嬫锛屽xss銆乧rsf銆乻ql娉ㄥ叆绛夌瓑锛岄槻鑼冩帾鏂界浉瀵規潵璇翠篃姣旇緝瀹規槗锛屾瘮濡倄ss鐨勯槻鑼冮渶瑕佽漿涔夋帀杈撳叆鐨勫皷鎷彿锛岄槻姝rsf闇€瑕佸皢cookie璁劇疆涓篽ttponly浠ュ強澧炲姞session鐩稿叧鐨刪ash token鐮侊紝 sql娉ㄥ叆鐨勯槻鑼冮渶瑕佸皢鍒嗗彿杞箟绛夌瓑锛屽仛璧鋒潵铏界劧绠€鍗曪紝浣嗗嵈瀹規槗琚拷瑙嗭紝鏇村鐨勬槸闇€瑕佷粠寮€鍙戞祦绋嬩笂鏉ヤ簣浠ヤ繚闅滐紝浠ュ厤鍥犱漢涓虹殑鐤忓拷鑰岄€犳垚鎹熷け銆?

鏈瘒鏇村鐨勬槸浠庡鈎鍙版灦鏋勭殑瀹夊叏鎬у強绋沖畾鎬ф柟闈㈢潃绗旓紝甯屾湜鑳介€氳繃浜涜鏂囧瓧鐨勫垎鏋愬拰浠嬬粛锛屾潵绐ユ帰http骞沖彴鎼緩鎵€娑夊強鐨勪竴浜涙妧鏈粏鑺傦紝缁欒鑰呬互鍚彂銆?

鍗忚鐨勫畨鍏ㄦ€?

http鍗忚鍏舵墍娑電洊鐨勪俊鎭兘鏄湭缁忓姞瀵嗙殑鏄庢枃锛屽寘鎷姹傚弬鏁幫紝杩斿洖鍊鹼紝cookie锛宧ead绛夌瓑锛屽洜姝わ紝澶栫晫閫氳繃瀵歸€氫俊鐨勭洃鍚紝杞昏€屾槗涓句究鍙ā鎷熷嚭璇鋒眰鍜屽搷搴斿弻鏂圭殑鏍煎紡锛屼吉閫犺姹備笌鍝嶅簲锛屼慨鏀瑰拰绐冨彇鍚勭淇℃伅銆傜浉瀵逛簬tcp鍗忚灞傞潰鐨剆ocket浼犺緭鏂瑰紡锛岄拡瀵筯ttp鍗忚鏀誨嚮闂ㄦ鏇翠綆銆傚洜姝わ紝鍩轟簬http鍗忚鐨剋eb鍙奡OA鏋舵瀯锛屽湪搴旂敤鐨勫畨鍏ㄦ€ф柟闈紝闇€瑕佹洿鍔犵殑閲嶈銆?

1.鎽樿绛懼悕

瀵逛簬鏅€氱殑闈炴晱鎰熸暟鎹紝鎴戜滑鏇村鐨勫叧娉ㄥ叾鐪熷疄鎬у拰鍑嗙‘鎬э紝鍥犳锛屽浣曞湪閫氫俊杩囩▼涓繚璇佹暟鎹笉琚鏀癸紝渚挎垚涓洪褰撳叾鍐查渶瑕佽€冭檻鐨勯棶棰樸€傞壌浜庝嬌鐢╤ttps鎬ц兘涓婄殑鎴愭湰浠ュ強闇€瑕侀澶栫敵璇稢A璇佷功锛岃繖绉嶆儏鍐典笅锛屼竴鑸噰鐢ㄥ弬鏁版憳瑕佺殑鏂瑰紡鍗寵兘澶熸弧瓒抽渶姹傘€傛瘡娆¤姹傚拰鍝嶅簲鐢熸垚瀵瑰簲鐨剆ign锛屼互姝ゆ潵淇濋殰璇鋒眰鍙婂搷搴斾笉琚涓夋柟绡℃敼銆?

璇鋒眰鐨勫弬鏁扮粡杩囨帓搴忥紝灏嗗弬鏁闆悕绉闆拰鍊肩粡杩囦竴瀹氱殑绛栫暐缁勭粐璧鋒潵锛屽姞涓婁竴涓瘑閽ecret锛岀劧鍚庨€氳繃鎽樿绠楁硶鐢熸垚sign銆傚父瑙佺殑鎽樿绠楁硶鍖呮嫭MD5銆丼HA绛夌瓑锛岀敱浜庢憳瑕佺畻娉曠殑涓嶅彲閫嗘€э紝浠ュ強璇鋒眰鍙傛暟鍊肩殑澶氬彉鎬э紝鑳藉鍦ㄤ竴瀹氱▼搴︿笂淇濊瘉閫氫俊鐨勫畨鍏ㄦ€с€?

淺析http平台的安全穩定性架構

鍥? 绛懼悕鐨勬瀯閫?

鏈嶅姟绔帴鏀跺埌璇鋒眰鍚庯紝浠ュ悓鏍風殑椤哄簭灏嗗弬鏁版帓搴忥紝鍔犱笂鐩稿悓鐨剆ecret锛屼互鐩稿悓鐨勬憳瑕佺畻娉曠敓鎴愮鍚嶏紝鐒跺悗涓庤姹備紶杩囨潵鐨剆ign杩涜姣旇緝锛屽鏋滃弬鏁闆湪涓€旇绡℃敼锛屼紶杩囨潵鐨剆ign涓庢湇鍔$鐢熸垚鐨剆ign鍒欏瓨鍦ㄥ樊寮傦紝浠ユ鏉ュ垽鏂姹傜殑鍚堟硶鎬с€?

淺析http平台的安全穩定性架構

鍥? 绛懼悕鐨勬牎楠?

鏈嶅姟绔牎楠屽畬鎴愬悗锛岀敓鎴愬搷搴旓紝鍚屾牱鐨勶紝鍝嶅簲鐨勫唴瀹逛篃闇€瑕佷互绫諱技鐨勬柟寮忚繘琛岀鍚嶏紝瀹㈡埛绔敹鍒闆搷搴斿悗锛屾牴鎹帴鏀跺埌鐨剆ign鏉ラ獙璇佺鍚嶇殑姝g‘鎬с€?

涓句緥鏉ヨ锛屾煇涓姹傜殑url鍙兘鏄繖鏍鳳紝www.xxx.com/api.do?userid=12345678&page=1&pagesize=10&signtype=MD5&charset=gbk&method=com.chenkangxian.getname&sign=aef503e0ae7c27b04c2fe1cc95ce1d锛寀serid銆乸age銆乸agesize鏄父瑙勫弬鏁幫紝signtype琛ㄧず鍔犲瘑绫誨瀷锛宑harset琛ㄧず缂栫爜锛宮ethod琛ㄧず鎺ュ彛鍚嶇О锛宻ign涓虹敓鎴愮殑绛懼悕涓詫紝涓轟簡浜掕仈缃戜紶杈撴柟渚匡紝涓€鑸鍏惰繘琛?6杩涘埗鎴栬€卋ase64缂栫爜锛屾湇鍔$灏嗘帴鏀跺埌鐨勫弬鏁版嫾鎺ユ垚瀛楃涓瞮serid=12345678&page=1&pagesize=10&signtype=MD5&charset=gbk&method=com.chenkangxian.getname锛岄噰鐢∕D5绠楁硶鐢熸垚sign锛屼笌浼犻€掕繃鏉ョ殑sign(褰撶劧锛岄渶16杩涘埗鎴栬€卋ase64瑙g爜)姣旇緝锛屽鏋滀竴鑷達紝琛ㄧず鍙傛暟鏈绡℃敼銆?

2.鍏閽ョ鍚?

涓婅堪鏂規硶鑳借緝濂界殑瑙e喅鏁版嵁鍚堟硶鎬ф牎楠岄棶棰橈紝浣嗘槸secret鐩稿鍥哄畾锛屽鏋滃瀹㈡埛绔皟鐢紝瀹規槗瀵艱嚧secret娉勯湶銆?

鍥犳锛屽彲浠ョ粰姣忎釜瀹㈡埛绔垎閰嶄竴瀵瑰叕绉侀挜锛岃姹傛椂锛屽鎴風灏嗗弬鏁版寜涓庡墠闈㈢被浼肩殑鏂瑰紡鎺掑ソ搴忥紝鎷兼垚涓€涓瓧绗︿覆锛宮d5鍚庯紝閫氳繃绉侀挜鍔犲瘑锛岀敓鎴恠ign銆?

淺析http平台的安全穩定性架構

鍥? 瀹㈡埛绔敤绉侀挜鐢熸垚sign

鏈嶅姟绔噰鐢ㄥ悓鏍風殑鏂瑰紡灏嗗弬鏁扮紪鎺掞紝鎷兼垚瀛楃涓詫紝md5锛岄€氳繃瀹㈡埛绔叕閽ヨВ瀵唖ign锛屼笌鍏秏d5鐢熸垚鐨勫€艱繘琛屾瘮杈冿紝渚垮彲寰楀嚭鏁版嵁鏄惁鍚堟硶銆?

淺析http平台的安全穩定性架構

鍥? 聽鏈嶅姟绔敤鍏挜鏍¢獙sign

褰撶劧锛屽鎴風涔熷彲浠ラ噰鐢ㄧ浉鍚岀殑鏂規硶锛屼嬌鐢ㄦ湇鍔$鐨勫叕閽ワ紝瀵規湇鍔$杩涜鏍¢獙锛岃繖閲屽氨涓嶄竴涓€鏋氫婦浜嗐€?

3.https

涓婇潰鐨勪袱绉嶆柟娉曡兘杈冨ソ瑙e喅鏁版嵁鍚堟硶鎬ч棶棰橈紝浣嗗浜庝竴浜涜緝涓烘晱鎰熺殑淇℃伅锛屽闅愮鏁版嵁锛岀敤鎴峰悕瀵嗙爜绛夌瓑锛岃繖浜涗俊鎭浠ユ槑鏂囩殑褰㈠紡浼犻€掞紝浼氬甫鏉ヨ緝澶ч闄╋紝鏈嶅姟绔痵ecret鎴栬€呭叕绉侀挜鐩稿鍥哄畾锛屼竴鏃﹀瘑閽ユ硠闇詫紝涔熶細鏈夊緢澶х殑瀹夊叏椋庨櫓锛屽苟涓旓紝閫氫俊杩囩▼涓紝瀹㈡埛绔笌鏈嶅姟绔殑韬喚锛岀壒鍒槸鏈嶅姟绔殑韬喚闅句互寰楀埌淇濋殰锛岀涓夋柟鍙互閫氳繃鍩熷悕鍔寔鐨勬柟寮忔潵浼€犺韓浠斤紝娆洪獥瀹㈡埛绔悜浼€犵殑鏈嶅姟绔彂閫佹暟鎹紝杩欐牱涓€鏉ワ紝鎹熷け灏嗕笉鍙及閲忋€傚洜姝わ紝鏈夊繀瑕侀噰鐢ㄦ洿鍔犱弗鏍肩殑鍔犲瘑鎵嬫鏉ヤ繚闅滀俊鎭殑瀹夊叏銆?

渚濇墭SSL(Secure Socket Layer)鍗忚锛宧ttps鑳藉纭繚鏁翠釜閫氫俊杩囩▼鍔犲瘑锛屽瘑閽ラ殢鏈轟駭鐢燂紝骞朵笖鑳藉閫氳繃鏁闆瓧璇佷功楠岃瘉閫氫俊鍙屾柟鐨勮韓浠斤紝浠ユ鏉ヤ繚闅滀俊鎭畨鍏ㄣ€?

淺析http平台的安全穩定性架構

鍥? 鏈嶅姟绔崟鍚戣韓浠借璇乭ttps閫氫俊杩囩▼

SSL鍗忚鎻℃墜鐨勮繃绋嬫槸杩欐牱鐨勶紝瀹㈡埛绔悜鏈嶅姟绔彂閫丼SL鍗忚鐨勭増鏈彿锛屾敮鎸佺殑鍔犲瘑绠楁硶绫誨瀷锛屼駭鐢熺殑闅忔満鏁頒互鍙婂叾浠栧鎴風涓庢湇鍔$閫氫俊鎵€闇€瑕佺殑淇℃伅锛屾湇鍔$鏀跺埌杩欎簺淇℃伅鍚庯紝浼氬皢瀹冭嚜宸辯殑SSL鍗忚鐗堟湰锛屾敮鎸佺殑鍔犲瘑绠楁硶绫誨瀷锛屼互鍙婁駭鐢熺殑闅忔満鏁扮瓑绛夊唴瀹癸紝鍔犱笂瀹冪殑鏁闆瓧璇佷功锛屼竴璧峰洖澶嶇粰瀹㈡埛绔€?

璇佷功浠ヨ瘉涔﹂摼鐨勫艦寮忕粍缁囷紝瀹㈡埛绔細閫愮駭鏍¢獙璇佷功鐨勫悎娉曟€э紝鍖呮嫭鏈嶅姟鍣ㄥ煙鍚嶆槸鍚︿笌璇佷功鎵€澹版槑鐨勫煙鍚嶄竴鑷達紝璇佷功鏄惁杩囨湡锛岃瘉涔﹂鍙戞満鏋勬槸鍚︽槸鍙俊璧栫殑绛夌瓑銆傝繖涓繃绋嬪浜庣敤鎴鋒潵璇翠竴鑸槸閫忔槑鐨勶紝鎿嶄綔绯葷粺浼氬唴缃竴浜涚煡鍚嶇殑CA鏈烘瀯鐨勬牴璇佷功锛屽厤鍘葷敤鎴風殑瀹夎姝ラ锛屽紑鍙戣€呮垨鏈烘瀯鍙渶瑕佸悜鐩稿叧鐨凜A鏈烘瀯浠ヤ粯璐圭殑鏂瑰紡鐢寵璇佷功鍗沖彲銆傚綋鐒訛紝涔熸湁涓埆渚嬪鐨勫钁╋紝濡?2306锛岀洿鎺ュ皢鏍矽瘉涔︽寕鍦ㄤ富椤典笂渚涚敤鎴蜂笅杞姐€?

鏍¢獙瀹岃瘉涔﹁繃鍚庯紝瀹㈡埛绔皢浜х敓涓€涓涓誨瘑鐮侊紝骞剁敤鏈嶅姟绔殑鍏挜鍔犲瘑浼犻€佺粰鏈嶅姟绔紝鏈嶅姟绔細鏍規嵁棰勪富瀵嗙爜鏉ョ敓鎴愰€氫俊瀵嗙爜锛屼笌姝ゅ悓鏃訛紝瀹㈡埛绔篃閫氳繃鐩稿悓鐨勬柟寮忕敓鎴愰€氫俊瀵嗙爜锛岃繖鏍鳳紝涓€娆¢€氫俊鎻℃墜鍩烘湰瀹屾垚銆?

閫氳繃SSL鍗忚鑳藉瀹屾垚瀵規湇鍔$鐨勮璇侊紝鍔犲瘑鏁版嵁锛岄槻姝㈠湪浼犺緭杩囩▼涓俊鎭殑娉勯湶鍜岀鏀癸紝鑳藉鍦ㄧ浉褰撶殑绋嬪害涓婁繚闅滈€氫俊鐨勫畨鍏ㄦ€с€?

4.搴旂敤鎺堟潈

浠ヤ笂鐨勫満鏅叾瀹炴槸鍦ㄩ€氫俊鍙屾柟鐩稿淇′換鐨勫熀纭€涓嬪畬鎴愮殑锛屽鎴風鐩存帴璁塊棶鏈嶅姟绔畬鎴愭暟鎹氦浜掋€傝繕鏈変竴绉嶅満鏅槸骞沖彴鍟嗗皢鏁版嵁鏈夐檺寮€鏀劇粰绗笁鏂矽蔣浠跺巶鍟?ISV)锛岀涓夋柟杞歡鍘傚晢鍐嶅埄鐢ㄨ繖浜涙暟鎹潵缁欑敤鎴鋒彁渚涙湇鍔★紝褰撶劧锛屽墠鎻愭槸鐢ㄦ埛蹇呴』瀵笽SV鎺堟潈銆傚浜庡鈎鍙闆巶鍟嗘潵璇達紝鐢ㄦ埛褰㈠艦鑹茶壊鐨勯渶姹傦紝寰堥毦浠ヤ竴宸變箣鍔涙潵浜堜互鍏呭垎婊¤凍锛屽洜姝わ紝灏嗘暟鎹互鎺ュ彛鐨勫艦寮忎笅鏀劇粰浼楀鐨勭涓夋柟寮€鍙戣€咃紝渚挎垚浜嗗繀鐒剁殑瓒嬪娍锛屼篃姝f槸鐢辨寮曞彂浜嗚繎鍑犲勾鐨勨€滃紑鏀懼鈎鍙扮儹鈥濄€傝繖鏍鳳紝濡備綍淇濋殰瀵圭敤鎴鋒暟鎹殑璁塊棶鍧囨槸缁忚繃鎺堟潈鐨勶紝涓斾笉浼氬绗笁鏂規硠闇茬敤鎴風殑鐢ㄦ埛鍚嶅瘑鐮侊紝渚挎垚浜嗛褰撳叾鍐茬殑闂銆?

OAuth鍗忚涓虹敤鎴瘋祫婧愮殑鎺堟潈鎻愪緵浜嗕竴涓畨鍏ㄣ€佸紑鏀劇殑鏍囧噯锛屼笌浠ュ線鐨勬巿鏉冩柟寮忎笉鍚岋紝OAuth涓嶉渶瑙﹀強鍒扮敤鎴瘋處鎴蜂俊鎭?鐢ㄦ埛鍚嶅瘑鐮?锛屽嵆鍙畬鎴愮涓夋柟瀵圭敤鎴蜂俊鎭闂殑鎺堟潈銆?

淺析http平台的安全穩定性架構

鍥? 寮€鏀懼簲鐢ㄥ鈎鍙版巿鏉?

OAuth鍗忚鐨勫嚭鐜幫紝浣垮緱鐢ㄦ埛鍦ㄤ笉娉勯湶鑷繁鐢ㄦ埛鍚嶅瘑鐮佺殑鎯呭喌涓嬶紝鑳藉瀹屾垚瀵圭涓夋柟搴旂敤鐨勬巿鏉冿紝绗笁鏂瑰簲鐢ㄥ緱鍒扮敤鎴鋒巿鏉冨悗锛屼究鍙互鍦ㄤ竴瀹氭椂闂村唴璁塊棶鍒扮敤鎴鋒巿鏉冪殑鏁版嵁銆?

淺析http平台的安全穩定性架構

鍥? Oauth鍗忚鐨勬巿鏉冭繃绋?

涓€娆Auth鍗忚鐨勬巿鏉冭繃绋嬪涓婂浘鎵€绀猴紝鐢ㄦ埛鍏堝ISV鍙戣搗璇鋒眰锛孖SV鍚戝鈎鍙闆晢璇鋒眰request token锛屽甫涓婂叾鐢寵鐨刟pp id锛屽鈎鍙拌繑鍥瀝equest token锛屽叾鍚嶪SV搴旂敤灏嗙敤鎴峰紩瀵煎埌骞沖彴鐨勬巿鏉冮〉闈紝甯︿笂鑷繁鐨刟pp id銆乺equest token浠ュ強鍥炶皟鍦闆潃锛岀敤鎴峰湪骞沖彴鐨勯〉闈笂瀹屾垚鎺堟潈(杩欐牱渚誇笉浼氬皢鐢ㄦ埛鍚嶅瘑鐮佹硠闇茬粰绗笁鏂?锛岀劧鍚庡鈎鍙伴€氳繃ISV鎻愪緵鐨勫洖璋冮摼鎺ワ紝杩斿洖缁橧SV搴旂敤access token锛孖SV搴旂敤閫氳繃access token鍙栧埌鐢ㄦ埛鎺堟潈鐨勬暟鎹紝杩涜鍔犲伐鍚庤繑鍥炵粰鐢ㄦ埛锛屾巿鏉冨畬鎴愩€?

涓轟簡纭繚閫氫俊瀹夊叏锛屼竴鑸細璁㊣SV浣跨敤鍏剁閽ュ鍙傛暟杩涜绛懼悕锛屽鈎鍙頒嬌鐢↖SV鐨勫叕閽ヨ繘琛岀鍚嶉獙璇侊紝鏉ユ牎楠孖SV鐨勮祫璐紝鍏蜂綋杩囩▼鍓嶉潰璇︾粏浠嬬粛杩囷紝姝ゅ涓嶅啀璧樿堪銆?

OAuth鍗忚寰楀埌浜嗗浗鍐呭浜掕仈缃戝叕鍙哥殑骞挎硾璁ゅ彲锛屽寘鎷現acebook锛孏oogle锛學indow Live锛屼互鍙婂浗鍐呯殑鑵捐銆佹柊娴€佹窐瀹濄€佷漢浜虹瓑锛岄兘瀵瑰叾鎻愪緵浜嗚壇濂界殑鏀寔銆備笉鍚岀殑鍘傚晢鏈変笉鍚岀殑OAuth鐗堟湰锛屼絾涓嶈鏄疧Auth1杩樻槸OAuth2锛屽叾鏍稿績鎬濇兂閮芥槸灏嗚祫婧愬仛鏉冮檺鍒嗙駭鍜岄殧绂夥紝ISV寮曞鐢ㄦ埛鍦ㄥ鈎鍙扮鐧婚檰锛屽畬鎴愭巿鏉冿紝鑾峰緱鎺堟潈鍚嶪SV鍙互鍦ㄤ竴瀹氭椂闂存鍐呰闂敤鎴風殑绉佹湁鏁版嵁锛岀敤鎴峰畬鍏ㄦ妸鎺ц繖涓€杩囩▼锛屼笖鎺堟潈鍙彇娑堛€傝繖鏍鳳紝绗笁鏂笽SV鑳藉鍒╃敤骞沖彴鍟嗘墍鎷ユ湁鐨勪竴浜涙暟鎹紝鏉ユ湇鍔$敤鎴鳳紝涓虹敤鎴峰垱閫犱環鍊鹼紝褰㈡垚浜嗕竴涓敓鎬佺郴缁熺殑闂幆銆?

OAuth鎺堟潈鍏跺疄鏄竴涓浉瀵矽緝澶嶆潅鐨勪綋绯夥紝娑電洊绯葷粺鐨勬柟鏂歸潰闈紝鍖呮嫭涔嬪墠鎵€璇寸殑閫氫俊鍔犺В瀵嗭紝浠ュ強鏉冮檺鍒掑垎锛宼oken鐢熸垚鍜屾牎楠岋紝鍏閽ョ殑绠$悊锛岃繕鏈夊悗闈㈠皢瑕佹彁鍒扮殑鍒嗗竷寮弒ession鏈哄埗绛夌瓑銆傜浉瀵逛簬鍓嶅嚑骞存潵璇達紝鐢變簬寮€婧愮ぞ鍖虹殑鍙戝睍锛屼負鍏剁殑瀹炵幇闄嶄綆浜嗕笉灏戦棬妲涳紝鐩墠宸叉湁寰堝寮€婧愮殑瑙e喅鏂規锛岃鎯呰鍙傜収OAuth缃戠珯(http://oauth.net)銆?

session鐨勫畨鍏ㄦ€?

瀵逛簬浜掕仈缃戝簲鐢ㄦ潵璇達紝涓轟簡搴斿楂樺苟鍙戣闂殑鍘嬪姏锛屾敮鎾戝叾涓氬姟鐨勫線寰€涓嶆鏄崟鍙版湇鍔″櫒锛岃€屾槸涓€涓垎甯冨紡闆嗙兢锛宧ttp璇鋒眰鍦ㄤ笉鍚岀殑鏈嶅姟鍣ㄩ棿璺寵漿锛岃繖鏍烽泦缇ら棿session鐨勫悓姝ヤ究鎴愪簡涓嶅緱涓嶈€冭檻鐨勯棶棰樸€?

瀵逛簬涓€鑸瑆eb搴旂敤鏉ヨ锛岄噰鐢╟ookie鑳借В鍐充竴閮ㄥ垎闂锛屼絾闅忕潃搴旂敤瑙勬ā鐨勪笉鏂墿澶э紝cookie浼氫笉鏂殑鑶ㄨ儉锛岃€屾祻瑙堝櫒瀵逛簬姣忎釜鍩熷悕涓嬬殑cookie鐨勪釜鏁頒互鍙婃瘡涓猚ookie鐨勯暱搴︿細鏈夋墍闄愬埗锛屼笉鑳芥弧瓒蟲寔缁€у闀跨殑闇€瑕侊紝骞朵笖锛屽鎴風鐨刢ookie鏁版嵁浼氬瓨鍦ㄤ竴瀹氱殑瀹夊叏鎬ч殣鎮c€傚浜庢湇鍔$璋冪敤鏉ヨ锛岃姹備笉缁忚繃娴忚鍣紝cookie鏄劇劧鏃犳硶婊¤凍闇€姹傦紝闅忕潃绉誨姩浜掕仈缃戠殑鍙戝睍锛屽熀浜巋ttp鐨凷OA鏋舵瀯杩樺皢鍏煎鏃犵嚎瀹㈡埛绔殑璇鋒眰锛屽洜姝わ紝鍩轟簬cookie鐨剆ession鍚屾鏂規宸叉棤娉曟弧瓒抽渶姹傘€?

淺析http平台的安全穩定性架構

鍥? 鍩轟簬cache鐨勫垎甯冨紡session缁撴瀯

濡備笂鍥撅紝鍩轟簬cache鐨勫垎甯冨紡鐨剆ession鍚屾鏈哄埗锛岃兘杈冨ソ鐨勮В鍐充笂杩伴棶棰樸€傚鎴風閫氳繃login鐧婚檰锛屽鏋滃鎴風涓烘祻瑙堝櫒锛屽垯閫氳繃cookie鍥炲啓鐨勬柟寮忥紝璁劇疆sessionid锛屽鏋滄槸鍦ㄧЩ鍔ㄧ鎴栬€呮湇鍔$璋冪敤锛屽垯鐩存帴杩斿洖sessionid锛岃繖鏍鳳紝涓嶇鐢ㄦ埛濡備綍璺寵漿锛屼笉鍚岀殑瀹㈡埛绔拰搴旂敤閮藉彲浠ラ€氳繃sessionid鍒癱ache闆嗙兢涓彇鍒皊ession锛岄伩鍏嶄簡session涓㈠け銆?

鑰屼嬌鐢ㄤ竴鑷存€ash绠楁硶锛岃兘澶熺‘淇濆綋鏌愬彴cache server瀹曟満鍚庯紝涓嶈嚦浜庢暣涓殑key閮介噸鏂癶ash涓€閬嶏紝瀵艱嚧鎵€鏈夌殑鐢ㄦ埛閮介渶瑕侀噸鏂扮櫥褰曪紝杩欐牱涓嶄粎鎻愬崌浜嗙敤鎴蜂綋楠岋紝涔熼檷浣庝簡瀵逛簬login鐨勫帇鍔涳紝涓嶄細鏈夊ぇ閲忕殑鐢ㄦ埛鍍忛洩宕╀竴鏍峰悓鏃跺彂鏉ュぇ閲忕殑鐧誨綍璇鋒眰(杩欏浜庡儚娣樺疂鍙?1鍙?2杩欐牱澶ф祦閲忕殑娲誨姩鏉ヨ锛屽崄鍒嗛噸瑕?銆備嬌鐢╟ache鏉ュ瓨鍌╯ession浼氳瘽锛屽嵆琛ㄧず浼氳瘽鏄彲浠ヤ涪澶辯殑锛屽浜庣郴缁熻璁¤€呮潵璇達紝瀵矽繖涓€鐐歸』鏈夋竻妤氱殑璁よ瘑銆?

鍒嗗竷寮弒ession涔熶細璺熸櫘閫氬崟鏈簊ession涓€鏍鳳紝瀛樺湪session澶辨晥浠ュ強cookie闃茬洍鐢ㄧ瓑绛夐棶棰樸€?

涓烘彁楂榗ache鐨勫埄鐢ㄧ巼浠ュ強鎻愰珮session鐨勫畨鍏ㄦ€э紝椤婚拡瀵筩ache璁劇疆涓€瀹氭椂闀跨殑澶辨晥鏃堕棿锛岄伩鍏嶅湪鐢ㄦ埛鍦ㄧ寮€浣嶇疆鍚巗ession琚叾浠栦漢鐩楃敤锛屼絾鏄紝瀵逛簬鐢ㄦ埛杩炵畫鎬х殑鎿嶄綔锛屽張蹇呴』瀵箂ession鐨勫埌鏈熸椂闂磋繘琛屼笉鏂洿鏂幫紝鍚﹀垯锛屽彲鑳戒細褰卞搷鍒扮敤鎴風殑浣撻獙銆?

瀵逛簬sessionid鏉ヨ锛屾渶濂芥槸灏嗗叾璁劇疆涓篽ttponly锛岄伩鍏嶈法绔欒剼鏈cookie杩涜鐩楃敤锛屽綋鐒訛紝閲囩敤鍒嗗竷寮弒ession鍚庯紝浠諱綍浜洪兘宸茬粡寰堥毦浠巆ookie鏈韓鎻愬彇鍒版湁浠峰€肩殑鏀誨嚮淇℃伅锛屼絾鏄紝濡傛灉閫氳繃绐冨彇sessionid鏉ヤ吉閫犵敤鎴風櫥闄嗭紝鍒欎笉寰椾笉闃詫紝灏ゅ叾鏄氦鏄撶浉鍏崇殑涓氬姟锛屽彲鑳戒細閫犳垚鐩稿綋澶х殑鍗卞锛屽洜姝わ紝闇€灏唖ession鐨勭姸鎬佷笌瀹㈡埛绔殑ip鍦闆潃鎴栬€卪ac鍦闆潃鎸傞挬銆傚鏋滅敤鎴蜂粠ip1鐧婚檰锛岄€氳繃ip2鏉ヨ闂敤鎴蜂俊鎭紝鍗充究ip2璁塊棶鐨勬椂鍊欏甫涓婁簡sessionid锛屼篃闇€瑕侀噸鏂拌繘琛岀櫥闄嗭紝杩欐牱鐨勮瘽锛屽垯鐩稿綋绋嬪害閬垮厤浜嗕細璇濆姭鎸佺殑鍙戠敓銆?

骞沖彴鐨勭ǔ瀹氭€?

瀵逛簬鐢熶駭鐜鐨勫簲鐢ㄩ泦缇ゆ潵璇達紝鏁呴殰鏄緢闅懼畬鍏ㄩ伩鍏嶇殑锛屽緩绔嬪畬鍠勭殑鐩戞帶棰勮鏈哄埗锛岃兘澶熸彁楂橀亣鍒伴棶棰樻椂鐨勫搷搴旈€熷害锛屽府鍔╁揩閫熷彂鐜伴棶棰橈紝鍙婃椂閫氱煡鐩稿叧鎶€鏈漢鍛樺鏁呴殰杩涜淇锛屾湁鏁堢殑閬垮厤鎴栬€呴檷浣庢崯澶便€備笌姝ゅ悓鏃訛紝涔熷繀椤誨仛濂芥祦閲忔帶鍒訛紝闃叉绐佸彂鐨勫ぇ娴侀噺灏嗘湇鍔″櫒鍘嬪灝銆?

1.闆嗙兢鐩戞帶

鐢熶駭鐜鐨勬儏鍐靛線寰€澶嶆潅澶氬彉锛岀敤鎴風殑琛屼負涓嶅彲棰勬祴,鏈夋晥鐨勭洃鎺ф帾鏂戒笉浠呰兘澶熸彁楂橀亣鍒伴棶棰樻椂鐨勫搷搴旈€熷害锛屼篃涓哄簲鐢ㄧ殑鎵╁锛屾€ц兘鐨勪紭鍖栨彁渚涗簡鍙傝€冧緷鎹紝瀵規垜浠強鏃朵簡瑙e簲鐢ㄧ殑姘翠綅锛岃瘎浼闆拰璁劇疆璀︽垝绾挎彁渚涗簡鍗佸垎閲嶈鐨勫府鍔┿€?

甯歌鐨勭洃鎺у彲浠ュ寘鎷涓嬫柟闈紝鏈哄櫒鐨刲oad锛宑pu浣跨敤鐜囷紝鍐呭瓨浣跨敤鐜囷紝缃戠粶traffic锛宲v浠ュ強uv淇℃伅锛孖O绻佸繖绋嬪害锛岀鐩樹嬌鐢ㄧ巼锛屽紓甯竎atch绛夌瓑锛屽鏋滄槸java搴旂敤锛屽簲璇ュ寘鎷爢鏍堢殑浣跨敤鎯呭喌锛宖ullgc鐨勯鐜囩瓑绛夛紝濡傛灉鏄痬ysql DB锛岄渶瑕佸寘鎷瑂elect/ps锛寀pdate/ps锛宼hread running绛夌瓑锛岃繖浜涙寚鏍囦俊鎭兘澶熷熀鏈弽鏄犳満鍣ㄨ繍琛岀殑鍋ュ悍鐘舵€併€備竴鏃︽煇涓寚鏍囧嚭鐜闆紓甯革紝姣斿鍙楁敾鍑誨鑷存祦閲忔縺澧烇紝鍙互鍙戠煭淇℃垨鑰呴偖浠堕€氱煡鐩稿叧搴旂敤璐熻矗浜猴紝杩涜鍙婃椂鐨勫鐞嗐€?

瀵逛簬閲囩敤http鍗忚鐨勫簲鐢ㄦ潵璇達紝鑳藉仛鐨勪笉浠呬粎鍙湁杩欎簺锛岃繕鍙互閲囧彇鍖呮嫭鎺ュ彛鏁版嵁鏍¢獙锛岄儴鍒嗙嚎涓婂洖褰掓祴璇曪紝椤甸潰鐘舵€佹娴嬬瓑绛夋帾鏂斤紝鏇村姞鍏ㄩ潰鐨勫搴旂敤杩涜鍋ュ悍妫€鏌ュ拰鐩戞帶銆?

涓句緥鏉ヨ锛屽浜庡紓姝ヨ繑鍥瀓son銆乯sonp銆亁ml鏍煎紡鏁版嵁鐨勬帴鍙f潵璇達紝鍙互浜嬪厛閫犲ソ涓€閮ㄥ垎鍥哄畾鏁版嵁锛岃鐩栨帴鍙d唬鐮佺殑鍚勪釜鍒嗘敮璺緞锛岀劧鍚庨€氳繃shell鑴氭湰瀹氭椂鎵ц(crontab閮ㄧ講瀹氭椂浠誨姟)鐨勬柟寮忥紝楠岃瘉杩斿洖鐨勬暟鎹槸鍚﹀畬鏁存槸鍚︽纭紝浠ユ瀹屾垚鎺ュ彛鐨勬壂鎻忎笌妫€鏌ャ€?

$CURL_BIN -s -m 100  "${HOSTNAME}${URL}" > $TMP_FILE
if [ "$CHECK_TXT" != "" ]; then
    check_result=`fgrep $CHECK_TXT $TMP_FILE`
    if [[ "$check_result" = "" ]]; then
       CHECK_STATUS="1"
       echo -e "check failure!\t${URL}\n"
    fi
fi      

code1 鎺ュ彛妫€鏌hell鐗囨

鑴氭湰閫氳繃curl鏉ヨ姹傜浉鍏蟲帴鍙rl锛屽皢杩斿洖鍊間笌check_txt(棰勫畾涔夋枃鏈?閫氳繃fgrep姣斿锛屽鏋滀笌棰勮鐨勪笉绗︼紝鍒欒緭鍑篶heck failure锛岀▼搴忔娴嬪埌璇ヨ緭鍑猴紝鍒欏彂閫佺煭淇℃姤璀︺€?

瀵逛簬椤甸潰鏉ヨ锛岃繑鍥炵殑鏁版嵁閲忓ぇ锛屾暣浣撴牎楠岀浉瀵規潵璇翠唬浠瘋緝澶э紝鍙互閽堝涓€浜涙牳蹇冩祦绋嬶紝姣斿鎺ュ彛鐨勮皟鐢紝鍚庣鏁版嵁鐨勮繑鍥烇紝瀹氫箟涓€浜涚姸鎬佺爜锛屽鍒癶ttp鐨刪eader璇鋒眰澶翠腑杩斿洖锛岃繖鏍鳳紝閫氳繃鐩戞帶header涓搴旂殑鐘舵€佸€鹼紝鏉ュ畬鎴愰〉闈㈢殑鐩戞帶銆?

$CURL_BIN -s -I -m 100  "${HOSTNAME}${URL}" > $TMP_FILE
status=` awk -F ":" '{if($1 == "Server_Status"){print $2}}' $TMP_FILE `
status=${status//}
if [ "$status" = "ok" ]; then
CHECK_STATUS="0"
else
CHECK_STATUS="1"
echo  -e  "check failure!\t$URL\n"
fi      

code2聽 涓€娈甸〉闈㈢洃鎺х殑shell鐗囨

鑴氭湰閫氳繃curl鏉ヨ闂浉鍏抽〉闈紝閫氳繃awk杩囨護鍑篽eader涓殑Server_Status鍊?璇ュ€煎湪搴旂敤绔簨鍏堢害瀹氬ソ)锛屽垽鏂叾鏄惁涓簅k鐘舵€侊紝濡傛灉ok锛屽垯蹇界暐锛屽惁鍒欙紝杈撳嚭check failure锛岀▼搴忔娴嬪埌璇ョ姸鎬侊紝鍒欏彂閫佹姤璀︾煭淇°€?

2.骞跺彂涓庢祦閲忔帶鍒?

浠諱綍搴旂敤閮芥湁涓€涓璁℃寚鏍囧拰鑳芥壙杞界殑宄闆€鹼紝褰撳畠鐨勫帇鍔涜秴杩囦簡瀹冭璁$殑宄闆€間互鍚庯紝灏卞ソ姣斾竴搴т負琛屼漢璁捐鐨勭嫭鏈ㄦˉ锛屽嵆浣垮畠鍐嶅潥鍥猴紝涔熸棤娉曡涓€杈嗗潶鍏嬭椹堕€氳繃锛屽湪杩欎釜鏃跺€欙紝涓轟簡璁╂満鍣ㄨ兘澶熸甯歌繍琛岋紝涓嶈嚦浜庡畬鍏ㄧ槴鐥紝闇€瑕佸搴旂敤杩涜娴侀噺鎺у埗銆?

鎺у埗鐨勭瓥鐣ユ湁澶氱锛屽彲浠ョ洿鎺ヤ涪寮冩帀閭i儴鍒嗚秴鍑哄嘲鍊肩殑鐢ㄦ埛璇鋒眰锛岃繖鏍瘋櫧鐒舵瘮杈冪矖鏆達紝浣嗕篃鏄渶绠€鍗曟渶鏈夋晥鐨勬柟娉曪紝杩樻湁涓€绉嶄究鏄墛宄闆~璋鳳紝灏嗕竴閮ㄥ垎鏆傛椂鏉ヤ笉鍙婂鐞嗙殑璇鋒眰鏀懼叆绛夊緟闃熷垪涓紝寰呰祫婧愮┖闂叉椂鍐嶉€愭娑堝寲锛屽叿浣撲嬌鐢ㄥ摢绉嶇瓥鐣ワ紝涓庡簲鐢ㄧ殑鍦烘櫙鐩稿叧銆?

褰撶劧锛岃杩涜娴佹帶锛岄鍏堝緱鏈変竴涓繘琛屾祦鎺ч榾鍊鹼紝杩欏彲涓嶆槸鎷嶆媿鑴戣鎴栬€呬粎鍑粡楠屽氨鑳藉寰楀嚭鏉ョ殑锛屼笉鍚岀殑搴旂敤锛屼笉鍚岀绫葷殑鎺ュ彛锛屼笉鍚岀殑鏈哄櫒閰嶇疆锛屽叾鎵€闈複鐨勬儏鍐典篃涓嶅敖鐩稿悓锛岄榾鍊煎繀瀹氭槸鏈夊樊寮傜殑锛屽繀椤葷粡杩囧嚑杞殑鍘嬪姏娴嬭瘯涓嬫潵锛屾墠鑳藉寰楀埌涓€涓瘮杈冮潬璋辯殑鍊箋€?

娴佹帶鍙互浠庡涓淮搴︽潵杩涜锛屾瘮濡傞拡瀵筿ps(姣忕鏌ヨ鏁?锛屽苟鍙戠嚎绋嬫暟锛岄粦鐧藉悕鍗曪紝鏈嶅姟鍔犳潈鍒嗙駭绛夌瓑锛屾渶鍏稿瀷鏈€鐩磋鐨勶紝渚挎槸閫氳繃瀵筿ps鎴栬€呮槸骞跺彂绾跨▼鏁扮殑鎺у埗锛屾潵杈懼埌闄愭祦鐨勭洰鐨勩€?

浠庡叿浣撳疄鏂界殑瑙掑害鏉ヨ锛屽彲浠ュ湪搴旂敤鐨勮礋杞藉潎琛$(濡俷ginx)瀹屾垚锛岃繖涓€灞傚彲浠ヨ繘琛屾暣浣撶殑姣旇緝绮楃矑搴︾殑鎺у埗锛屾瘮濡傚鎴風鐨勫苟鍙戣姹傛暟锛岃姹傜殑棰戠巼绛夌瓑锛岃繖鏍峰彲浠ヨ繃婊ゆ帀澶ч儴鍒嗘敾鍑昏姹傦紝鎻愰珮ddos鐨勭粍缁囬毦搴︼紝褰撶劧锛屾洿鍔犲鏉傜殑绛栫暐锛屽楠岃瘉鐮侀槻鍒鳳紝榛戝悕鍗曪紝ip灏侀攣绛夌瓑锛屽彲浠ラ€氳繃缂栧啓nginx妯″潡鏉ヨ繘琛屽畾鍒躲€?

Nginx浠?.7鐗堝紑濮嬫彁渚?涓檺鍒剁敤鎴瘋繛鎺ョ殑妯″潡HttpLimitZone Module鍜孒ttpLimitReq Module锛屽彲浠ョ敤鏉ラ檺鍒剁敤鎴瘋姹傜殑棰戠巼鍜屽苟鍙戣繛鎺ユ暟锛?

limit_zone  zone_session_state  $binary_remote_addr  10m;
limit_req_zone  $binary_remote_addr  zone=req_session_state:10m  rate=1r/s;
location /
{
      limit_conn  zone_session_state 1;
      limit_req  zone=req_session_state  burst=5 nodelay;
      鈥?  鈥?}      

code3聽 nginx閰嶇疆闄愭祦

璐熻澆鍧囪 绔綔涓哄簲鐢ㄦ€葷殑娴侀噺鍏ュ彛锛岄噰鍙栫殑闄愭祦鎺柦鍙互鎸℃帀澶ч儴鍒嗙殑鎭舵剰娴侀噺锛屼絾缂轟箯鐏墊椿鎬э紝闅句互鍝嶅簲鍚庣鐨勫彉鍖栵紝骞朵笖鍙楄皟搴︾瓥鐣ョ殑褰卞搷锛屽苟涓嶈兘淇濊瘉钀藉埌姣忎竴鍙版湇鍔″櫒鐨勬祦閲忛兘鏄潎琛$殑锛屽洜姝わ紝涓€鑸殑绛栫暐鏄皢鍏ュ彛闃€鍊奸€傚綋璋冮珮锛岀劧鍚庣粨鍚堝簲鐢ㄧ鍗忓悓鏉ヨ繘琛屾祦鎺с€?

搴旂敤绔祦鎺х殑濂藉渚挎槸鑳藉鏇寸粏绮掑害鐨勫垝鍒嗘祦鎺х殑鍗曚綅(鑳界簿纭埌鎺ュ彛灞傞潰)锛屾洿鍔犳柟渚跨殑璋冭妭娴佹帶闃€鍊鹼紝鍔ㄦ€佺殑淇敼鏈嶅姟鏉冮噸銆佽皟鐢ㄧ殑榛戠櫧鍚嶅崟锛屼互鍙婅繘琛屾湇鍔″垎绾э紝浼樺厛淇濋殰鏍稿績娴佺▼鐨勭ǔ瀹氾紝杩欏湪搴斿澶ф祦閲忛珮骞跺彂鐨勫帇鍔?(濡傛窐瀹濆弻11锛屽弻12)鏃訛紝鏄懼緱灏や負閲嶈銆?

鍏充簬搴旂敤绔祦鎺х殑瀹炴柦锛屾秹鍙婁紬澶氱粏鑺傦紝闄愪簬绡囧箙,绗旇€呭皢鍦ㄤ釜浜哄崥瀹㈠仛璇︾粏浠嬬粛锛屾澶勪究涓嶅啀璧樿堪銆?

灏忕粨

鏈枃浠庡崗璁殑瀹夊叏鎬э紝session鐨勫畨鍏ㄦ€т互鍙婂鈎鍙扮殑绋沖畾鎬т笁涓柟闈紝浠嬬粛浜唄ttp骞沖彴鎼緩杩囩▼涓墍闈複鐨勪竴浜涢棶棰樹互鍙婅В鍐沖姙娉曘€俬ttp鍗忚鍥犲叾鏄庢枃浼犺緭鐨勭壒鎬э紝浣垮緱鍦ㄧ郴缁熻璁¢樁娈碉紝涓嶅緱涓嶅瀹夊叏鎬т綔鍏呭垎鑰冮噺銆傝€屽浜庣敓浜х幆鐨勫搴旂敤鏉ヨ锛屽畬鍠勭殑鐩戞帶棰勮鎺柦锛岃兘纭繚鍦ㄧ涓€鏃堕棿鍙戠幇闂锛屽強鏃堕噰鍙栨伆褰撶殑鎺柦锛岄伩鍏嶆崯澶憋紱鍚堥€傜殑娴佹帶鏈哄埗锛岃兘淇濋殰鍦ㄦ祦閲忕獊澧炵殑鎯呭喌涓嬶紝鏈哄櫒鑳介《浣忓帇鍔涳紝涓嶈嚦浜庡畷鏈恒€?