熱心網(wǎng)友

關(guān)于這一類問題,在網(wǎng)上找到類似資料,你看一下吧。希望能對(duì)你有用。如果還是搞不定,建議你用上網(wǎng)助手修復(fù)一下應(yīng)該就可以了。3月8日博客園出現(xiàn)首頁不顯示內(nèi)容的問題,是由于。Text程序沒有對(duì)用戶顯示名稱進(jìn)行腳本過濾造成的。。Text中,還有不少地方存在這樣的問題。實(shí)際上,每個(gè)用戶輸入的并且會(huì)在頁面上顯示的內(nèi)容都要進(jìn)行腳本過濾,不然難免安全隱患?! ext中如何對(duì)用戶輸入的內(nèi)容進(jìn)行過濾的呢?主要通過EntryValidationHandler與CommentFormatHandler兩個(gè)類來完成的,它們?cè)跀?shù)據(jù)被提交到數(shù)據(jù)庫之前對(duì)數(shù)據(jù)進(jìn)行檢查與處理?!ntryValidationHandler主要是檢查,發(fā)現(xiàn)不合法的內(nèi)容就進(jìn)行錯(cuò)誤提示,不向數(shù)據(jù)庫提交,但。Text的檢查方法好像有點(diǎn)問題,從Word復(fù)制過來的html內(nèi)容,比如:從VS。NET復(fù)制到Word再復(fù)制。Text中,。Text總是無法通過檢查,沒辦法,博客園為了方便大家,只能自己寫代碼處理,現(xiàn)在只是簡(jiǎn)單過濾掉script?!ommentFormatHandler主要作用是將評(píng)論中html標(biāo)記轉(zhuǎn)換成文本,這樣就避免了評(píng)論中的惡意內(nèi)容。顯然,。Text中對(duì)惡意腳本的處理存在不足:1、在EntryValidationHandler中,只對(duì)文章的內(nèi)容進(jìn)行檢查,在。Text中文章用一個(gè)Entry實(shí)體類來表示,。Text尋Enrty。Body進(jìn)行了檢查,實(shí)際上Enry類的很多屬性也要進(jìn)行惡意腳本檢查與過濾。2、。Text中還有一個(gè)重要的實(shí)體類BlogConfig,BlogConfig中的很多數(shù)據(jù)是要用戶去維護(hù)的,所以對(duì)BlogConfig的某些屬性進(jìn)行檢查也是必要的,博客園出現(xiàn)的問題,也就是由于。Text沒有這個(gè)實(shí)體類進(jìn)行檢查。3、博客園中增加了高級(jí)評(píng)論功能,所以顯示評(píng)論時(shí),要允許html代碼,而原來的。Text中是不允許html的(所以不必?fù)?dān)心惡意內(nèi)容),但現(xiàn)在博客園的程序必須對(duì)評(píng)論進(jìn)行處理,實(shí)際上評(píng)論也是用Enry類表示,只要對(duì)Enry類進(jìn)行處理就解決了評(píng)論的問題。應(yīng)該如何有效過濾惡意腳本?我想過三種方法:1、當(dāng)用戶在表單中輸入數(shù)據(jù)提交時(shí),進(jìn)行檢查。但這種方法無法對(duì)Blog桌面工具發(fā)表的文章進(jìn)行檢查,這類文章還要單獨(dú)處理。2、在顯示時(shí)進(jìn)行過濾,這種很明顯,既麻煩又容易出現(xiàn)問題,只要一處忘了進(jìn)行過濾,就會(huì)前功盡棄。3、在數(shù)據(jù)提交到數(shù)據(jù)庫之前進(jìn)行過濾,。Text就是采用這種方法,但不足之處是在每個(gè)數(shù)據(jù)更新操作之前,都要進(jìn)行檢查?!∥矣X得這三種方法都不是很有效的方法,好的方法應(yīng)該在一個(gè)統(tǒng)一的地方對(duì)進(jìn)行惡意內(nèi)容進(jìn)行過濾。為何不把目光關(guān)注到這兩個(gè)實(shí)體類?只要對(duì)這兩個(gè)實(shí)體類進(jìn)行檢查與過濾,那不就解決問題了嗎?既然所有的操作都是圍繞這兩個(gè)實(shí)體類,只要我們對(duì)這兩個(gè)實(shí)體類中的相關(guān)屬性進(jìn)行檢查與過濾,那就不擔(dān)心其他地方會(huì)出現(xiàn)未過濾的內(nèi)容。雖然。Text有的地方顯示數(shù)據(jù)時(shí),沒有訪問實(shí)體類,但所有更新數(shù)據(jù)的操作都是通過實(shí)體類傳遞數(shù)據(jù)的。我現(xiàn)在想到的一種方法是在實(shí)體類相關(guān)屬性的Get中進(jìn)行處理,在Get返回之前,對(duì)屬性值進(jìn)行過濾。這是一種簡(jiǎn)單有效的方法,但不是完美的方法,我們要盡可能減少對(duì)實(shí)體類的修改。能不能用設(shè)計(jì)模式去解決這個(gè)問題,用DECORATOR模式?很多模式是針對(duì)接口與方法的,而這里的實(shí)體類是用于表示數(shù)據(jù)的,全是屬性,沒有方法。JGTM的文章A Taste of AOP from Solving Problems with OOP and Design Patterns 也是討論相關(guān)問題的,文章我還沒全部理解,但那也是針對(duì)在調(diào)用對(duì)象的方法之前進(jìn)行附加的處理,而對(duì)屬性該如何處理?請(qǐng)大家提供一些好的思路,或者有什么簡(jiǎn)單的辦法,請(qǐng)指點(diǎn)!文章有不妥之處,請(qǐng)見諒,畢竟出于一個(gè)。NET技術(shù)水平不高的作者之手。其他朋友的相關(guān)評(píng)論;a。實(shí)際上可以直接利用 mlencode(內(nèi)容)將所有的轉(zhuǎn)換成相應(yīng)的= 然后修改的時(shí)候就可以server。HtmlDecode(內(nèi)容)來下午解碼就可以了。也省去了replace來替代。 不知道這樣子行嗎? ml是要顯示的, 目前主要是過濾script代碼。c。我認(rèn)為在Entry實(shí)體類的更新操作中進(jìn)行過濾是比較好的方式。d。。AOP適用于普遍情況,針對(duì)性的特別情況(尤其在有代碼的情況下)不需要使用這些復(fù)雜技術(shù),看來是被我誤導(dǎo)了。:) 這種情況可以考慮在Get/Set方法內(nèi)部返回/保存內(nèi)容之前調(diào)用一個(gè)ValidateContent()虛方法(TEMPLATE METHOD),把對(duì)內(nèi)容的驗(yàn)證邏輯潛入到已有邏輯中(并可以在子類中重載改變),或者如果對(duì)所有子類的驗(yàn)證邏輯都是一致的話,不實(shí)現(xiàn)為虛方法也可以。 BTW: 屬性其實(shí)就是一對(duì)兒方法(getter/setter),沒有什么本質(zhì)的區(qū)別。e。第一樓的方法看著簡(jiǎn)單,其實(shí)是把所有HTML都槍斃了,這還不如把內(nèi)容都用XMP置標(biāo)括起來呢。;)f。實(shí)際上用Decorate模式是恰當(dāng)?shù)摹?chuàng)建一個(gè)名為EntryDecorate(由于要求比較簡(jiǎn)單,用Concret Decorate就好了)的類,在需要的時(shí)候,調(diào)用該類的RemoveHtml方法,實(shí)現(xiàn)過濾。在普通的情況下,這個(gè)EntryDecorate類是透明的。這樣可以有很好的靈活性。g?,F(xiàn)在假如對(duì)Entry類的每個(gè)屬性都要過濾惡意腳本, 如果通過Get/Set在增加一個(gè)方法調(diào)用來實(shí)現(xiàn), 很麻煩, 如果有很多實(shí)體類, 對(duì)每個(gè)實(shí)體的屬性都要進(jìn)行更改。是不是建立一個(gè)專門進(jìn)行過濾的類, 在這個(gè)類中定義過濾策略, 對(duì)哪些類的哪些屬性進(jìn)行過濾, 這個(gè)類相當(dāng)于一個(gè)代理, 在對(duì)實(shí)體類的屬性進(jìn)行訪問之前, 這個(gè)代理類負(fù)責(zé)檢查、過濾。h?,F(xiàn)在假如對(duì)Entry類的每個(gè)屬性都要過濾惡意腳本, 如果通過Get/Set在增加一個(gè)方法調(diào)用來實(shí)現(xiàn), 很麻煩, 如果有很多實(shí)體類, 對(duì)每個(gè)實(shí)體的屬性都要進(jìn)行更改。是不是建立一個(gè)專門進(jìn)行過濾的類, 在這個(gè)類中定義過濾策略, 對(duì)哪些類的哪些屬性進(jìn)行過濾, 這個(gè)類相當(dāng)于一個(gè)代理, 在對(duì)實(shí)體類的屬性進(jìn)行訪問之前, 這個(gè)代理類負(fù)責(zé)檢查、過濾。h?,F(xiàn)在假如對(duì)Entry類的每個(gè)屬性都要過濾惡意腳本, 如果通過Get/Set在增加一個(gè)方法調(diào)用來實(shí)現(xiàn), 很麻煩, 如果有很多實(shí)體類, 對(duì)每個(gè)實(shí)體的屬性都要進(jìn)行更改。是不是建立一個(gè)專門進(jìn)行過濾的類, 在這個(gè)類中定義過濾策略, 對(duì)哪些類的哪些屬性進(jìn)行過濾, 這個(gè)類相當(dāng)于一個(gè)代理, 在對(duì)實(shí)體類的屬性進(jìn)行訪問之前, 這個(gè)代理類負(fù)責(zé)檢查、過濾。i。過濾策略可以結(jié)合自定義屬性定義甚至連接到外部的配置數(shù)據(jù)(可以考慮使用Regex),用RealProxy是可行的,但對(duì)于這個(gè)場(chǎng)合不一定是最好的。這種情況下需要改變對(duì)象的行為需要用的技術(shù)還是傳統(tǒng)的重構(gòu)技術(shù)——尤其在你有源碼的情況下。 不過——dudu的實(shí)踐精神我是十分鼓勵(lì)和贊賞的!什么事情你不親自做一下你怎么知道就不行或者不好呢?所以還是鼓勵(lì)大家遇到問題的時(shí)候多動(dòng)手、多動(dòng)腦!GJGJ…… :)。