天天看点

浅析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鍗忚鍥犲叾鏄庢枃浼犺緭鐨勭壒鎬э紝浣垮緱鍦ㄧ郴缁熻璁¢樁娈碉紝涓嶅緱涓嶅瀹夊叏鎬т綔鍏呭垎鑰冮噺銆傝€屽浜庣敓浜х幆鐨勫搴旂敤鏉ヨ锛屽畬鍠勭殑鐩戞帶棰勮鎺柦锛岃兘纭繚鍦ㄧ涓€鏃堕棿鍙戠幇闂锛屽強鏃堕噰鍙栨伆褰撶殑鎺柦锛岄伩鍏嶆崯澶憋紱鍚堥€傜殑娴佹帶鏈哄埗锛岃兘淇濋殰鍦ㄦ祦閲忕獊澧炵殑鎯呭喌涓嬶紝鏈哄櫒鑳介《浣忓帇鍔涳紝涓嶈嚦浜庡畷鏈恒€?