Ruby 板


LINE

http://lightyror.blogspot.com/2006/11/html-filter.html 一般来说,通常使用者 input 的 field 都会作一些 filter 的动作,避免你塞一些危险的 HTML code (script之类)进去。而这部份 Ruby on Rails 作法很简单,就是在前面加上一个 h() 即可。h 在Ruby on Rails 作什麽事情呢?他是 html_escape 的 alias ,他会将所有的 < 还有 > 变成 & lt; ,& gt;,比如 <sctipt>alert('a'); </sctipt> 会变成 & lt;sctipt& gt;alert('a'); & lt;/sctipt& gt; 这样你就完全作不了乱啦,因为所有 tag 都不见了。但是这样通常嫌太过严格一点了,有时候我们会希望开放一些字型大小,颜色的tag 给你用,这时候 h() 通杀的特性会让一切都变得很麻烦。所以这时候 Ruby on Rails 就出现 sanitize() 这个 function,根据 Ruby on Rails 的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 ,以及 onClick onLoad 之类的 attribute ,你没有机会执行 javascript ,那就会让你 key-in 任何东西都如 sanitize 字面上一样『完全无害』。但是,Ruby on Rails 预设的 sanitize 管制方式又有点大方,你还是可以塞一些 div 或是 iframe 之类的 tag 让你的网站版面烂掉。 所以我们需要一个可以自订的 HTML Filter ,可以自由指定我们放行那些 tag 。这时候我发现了这个网页,这是 Brad Choate's 写的 perl 函式 sanitize_html 的 Ruby porting,你可以到这里下载 Ruby 的版本。这只有一个函式,请将这个函式放在任何可以 loading 的地方,然後使用 sanitize( HTML 程式码 ) 即可。我们来仔细研究一下怎麽使用,他的第一行 def sanitize( html, okTags='a href, b, br, i, p' ) okTags 代表的意思是就是他允许的 tag ,目前有 a ,b , br , i , p 之类的 tag 。如果你输入 <iframe>aaa</iframe>之类的不允许的 code ,他会出现 aaa 这样的结果,所有不被允许的 tag 一律被滤掉。如果你想加入 span,font 这个两个 tag ,那就将他变成 def sanitize( html, okTags='a href, b, br, i, p, span, font' ) 以此类推,很简单吧。至於第一个的 a href 代表什麽意思呢?第一个 a 代表 sanitize 允许 a 这个 tag ,第二个 href 跟第一个 a 中间没有逗号分开,代表 sanitize 允许 a 这个 tag 使用 href 这个 attribute。你要是不信的话,打入 <a href="http://lightyror.blogspot.com" target="_blank">Haha</a>之类的程式,他只会出现 <a href="http://lightyror.blogspot.com">Haha</a> 只有 href 这个 attribute 会被保留,其他的删无赦 XD。如果你想让 a 这个 tag 加入 target attribute ,那麽就这样写吧。 def sanitize( html, okTags='a href target, b, br, i, p' ) 如此他就会保留 href 跟 target 这两个 attribute。最後,当我们输入这样的 HTML <a href="http://lightyror.blogspot.com">Haha 有头无尾的 html code ,神奇的是他居然会补齐 tag 成 <a href="http://lightyror.blogspot.com">Haha</a> 恩,这个东西实做相当完整,看起来十分有用。 -- lighty RoR 是一个介绍 lighttpd , SQLite , Ruby and Rails 的 Blog http://lightyror.blogspot.com/ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.218.90.242







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP