偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

WEB應(yīng)用安全設(shè)計(jì)思想 續(xù)

安全 應(yīng)用安全
網(wǎng)絡(luò)攻擊是千變?nèi)f化的,我們同時(shí)提供了相應(yīng)的防御方案。到底什么特性使得攻擊者的成本升高了,風(fēng)險(xiǎn)降低了。這中間是否有什么共同的東西呢?安全的本質(zhì)究竟是什么呢?

安全問(wèn)題的討論中,我們已經(jīng)向大家介紹了訪(fǎng)問(wèn)控制的安全設(shè)計(jì)核心和信任關(guān)系的劃分問(wèn)題,本文將繼續(xù)向大家介紹。

數(shù)據(jù)與代碼分離的思想是安全設(shè)計(jì)的原則

最典型的體現(xiàn)數(shù)據(jù)與代碼分離思想的是模板系統(tǒng)。

比如velocity,在渲染html的時(shí)候,程序員可以寫(xiě)vm模板,一些靜態(tài)寫(xiě)死的內(nèi)容就是代碼,而通過(guò)變量,經(jīng)過(guò)渲染才最終展現(xiàn)的內(nèi)容則稱(chēng)之為數(shù)據(jù)。一個(gè)典型的例子如下:

  1. -code--------------------------------------------

    test
    -------------------------------------------------

代碼與數(shù)據(jù)如果沒(méi)有分離,就會(huì)導(dǎo)致代碼混亂,數(shù)據(jù)變成代碼的一部分去執(zhí)行。比較常見(jiàn)的例子就是PHP里的SQL寫(xiě)法:

 

  1. -code----------------------------------------------------
  2. $sql = "SELECT * FROM article WHERE articleid='".$_GET[id]."'";  
  3. ---------------------------------------------------------  

 

如果參數(shù) id 中帶有單引號(hào),就會(huì)閉合掉代碼中的單引號(hào),從而導(dǎo)致數(shù)據(jù)變成代碼執(zhí)行。
所以這個(gè)注射的本質(zhì)問(wèn)題還是沒(méi)有做好數(shù)據(jù)與代碼的分離。

比較好的做法是如下java代碼中的使用變量綁定,很好的做到了代碼與數(shù)據(jù)分離

  1. -code----------------------------------------------------  
  2.  
  3. String sql="Insert into table VALUES(?,?)";  
  4. List values = new ArrayList();  
  5. values.add(Integer.toString(id));  
  6. values.add(operator);  
  7. try{  
  8. executeStatement(sql, values);  
  9. result=true;  
  10. }catch(Exception e){  
  11. e.printStackTrace();  
  12. }  
  13. ---------------------------------------------------------  
  14.  

 

但是并不是說(shuō)使用了模板系統(tǒng)就一定分離了數(shù)據(jù)與代碼。

因?yàn)樵陬?lèi)似“render”或者是“transform”的過(guò)程中,往往存在一個(gè)將數(shù)據(jù)進(jìn)行規(guī)范化的過(guò)程。這個(gè)過(guò)程也可能出現(xiàn)問(wèn)題,從而導(dǎo)致代碼可以混淆數(shù)據(jù)進(jìn)行執(zhí)行。

比較好的做法是,數(shù)據(jù)中不能包含有在代碼中存在語(yǔ)義的字符。

參考如下例子:

  1. -code----------------------------------------------------  
  2. Set-Cookie: name=id\r\nP3P: xxxxxxxxxxxxxx\r\n  
  3. --------------------------------------------------------- 

 

紅字部分是用戶(hù)的輸入。

在HTTP的標(biāo)準(zhǔn)中,冒號(hào)“:”,等號(hào)“=”,換行符CRLF“\r\n”,百分號(hào)“%”等字符都是有具體的語(yǔ)義的,屬于代碼部分。所以正常的用戶(hù)數(shù)據(jù)中不應(yīng)該包含有這些字符。

如果出于需求一定要包含怎么辦?按照標(biāo)準(zhǔn)將這些字符全部encode。

在HTTP標(biāo)準(zhǔn)中可以使用urlencode,比如等號(hào)就變成了“%3d”。

這樣就做到了代碼與數(shù)據(jù)的分離。

代碼與數(shù)據(jù)分離原則的本質(zhì)還是體現(xiàn)了安全問(wèn)題是信任問(wèn)題這一思想。

代碼是否應(yīng)該信任數(shù)據(jù),或者說(shuō)代碼應(yīng)該信任怎樣的數(shù)據(jù),是這個(gè)原則的本質(zhì)。

在應(yīng)用中,比較好的例子是json、XSLT,這些方法都比較好的做到了數(shù)據(jù)與代碼分離,所以在開(kāi)發(fā)中多使用這些比較好的方法,無(wú)形中就提高了安全性。

最佳實(shí)踐一:Secure By Default

經(jīng)常可以看到一些權(quán)威文檔上推薦使用“default denied”,這就是“Secure By Default”
的一種體現(xiàn)。

“Secure By Default”可以說(shuō)是一個(gè)最佳實(shí)踐。在很多時(shí)候,這個(gè)思想應(yīng)該上升到戰(zhàn)略的高度。只有真正做到“Secure By Default”,才能保證網(wǎng)站的安全。

因?yàn)殡S著時(shí)間的推移和系統(tǒng)的發(fā)展、膨脹,會(huì)變得越來(lái)越臃腫。一個(gè)大系統(tǒng)發(fā)展到后期,基本上沒(méi)有一個(gè)人能了解系統(tǒng)的全部,而變化卻每天都在發(fā)生。所以,在這種情況下,只有使用“Secure By Default”的思想來(lái)制定安全方案。

白名單往往是實(shí)現(xiàn)“Secure By Default”的方法。與黑名單不同,白名單的思想很好的體現(xiàn)了“default denied”。下面以XSS的防御問(wèn)題舉例。

對(duì)于一些HTML的標(biāo)簽和事件,黑名單的做法是列出危險(xiǎn)的標(biāo)簽和事件,然后禁止他們。

WEB安全的設(shè)計(jì)思想就像大家介紹完了,希望大家已經(jīng)掌握了。

【編輯推薦】

  1. Web云安全技術(shù)應(yīng)用
  2. WEB應(yīng)用安全設(shè)計(jì)思想
  3. Web安全網(wǎng)關(guān)采購(gòu)指南 注重性能

 

責(zé)任編輯:佚名 來(lái)源: 服安資訊
相關(guān)推薦

2011-03-11 17:07:16

2009-07-19 10:32:44

2012-03-20 10:28:43

2011-03-25 11:39:29

2011-03-11 16:43:51

2014-02-28 09:49:11

2013-10-10 14:11:30

2011-08-02 11:08:54

2012-12-18 17:11:58

2011-07-26 15:30:32

jQuery

2009-07-29 17:19:14

2012-10-26 11:37:12

2011-02-15 11:46:41

2010-08-10 10:10:28

系統(tǒng)架構(gòu)

2014-10-27 09:51:19

Web設(shè)計(jì)HTML

2013-03-28 13:08:15

Web緩存

2010-09-15 12:15:23

NessusWEB應(yīng)用安全掃描

2010-07-12 14:15:56

2013-09-26 10:19:34

2015-05-27 14:55:45

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)