ROR中h()方法和sanitize的區別及Html Filter

 

通常來講,一般使用input的field都會作一些filter的動做,避免被不懷好意之徒塞一些危險的HTML code(script等)進去搞破壞。在ROR中,咱們在前面加一個h()(通常不用括號?不容易看到?)便可,h在ROR中起什麼做用呢?他是html_escape的alias(別名),他會將全部的"<xx>"變成&lt;,&gt,好比:
js 代碼
  1. <script>alert('a');</script> 
會變成:
    &lt;script&gt;alert('a');&lt;/script&gt;
這樣就徹底作不了亂了。由於全部的tag都被搞掉了。這樣太嚴格了,有時候咱們須要開放一些字體,顏色等tag給用戶使用,用h()就不行了,正好ROR中還有個方法,sanitize()這個方法能夠幫你實現這個願望。ROR API中:
    Sanitizes the given HTML by making form and script tags into regular text, and removing all "onxxx" attributes (so that arbitrary Javascript cannot be executed). Also removes href attributes that start with "javascript:".        
        它會砍掉script這個tag,以及onXxxx之類的attribut,你沒有機會執行javascript,可是你還能夠塞一些div或iframe之類的tag讓你的版面爛掉。
         因此咱們須要自定義一個html filter,能夠自由的指定咱們放行的那些tag。網上發現了這個sanitize.rb,完美的幫咱們實現願望。如何使用:
第一行:
ruby 代碼
  1. def sanitize( html, okTags='a href, b, br, i, p' ) 
okTags表明就是容許的tag,目前有a,b,br,i,p之類的tag,若是輸入<iframe>xxx</iframe>之類的不容許的code,就會出現
xxx.不容許的結果都將被砍掉。若是想增長span,或font這樣的tag,則能夠:
ruby 代碼
  1. def sanitize( html, okTags='a href, b, br, i, p, span, font' ) 
a href之間沒有用逗號隔開,是表明sanitize容許a這個tag使用href這個attribute,好比:
<a href=" [url]http://blackanger.javaeye.com[/url]" _fcksavedurl="http://lightyror.blogspot.com" target="_blank">Haha</a>
只會出現: <a href= [url]http://blackanger.javaeye.com[/url]>Haha</a>,只有href這個屬性能夠保留,其餘的被無情的砍掉。當咱們輸入這樣的代碼:
           <a href= [url]http://blackanger.javaeye.com[/url]>Haha
會自動幫你補齊tag:
           <a href= [url]http://blackanger.javaeye.com[/url]>Haha</a>
相關文章
相關標籤/搜索