如何让用户编写带安全性的JavaScript?

时间:2011-04-03 16:20:56

标签: php javascript security blogs

Tumblr和Blogger等博客提供商允许用户在自己的博客中编写脚本。

它使用户可以轻松地将AdSense,Google Analytics和计数器添加到他们的博客中。

如何保持安全性和自定义?

我应该过滤哪种脚本?

Thx:)

4 个答案:

答案 0 :(得分:7)

如果每个博客都是在自己的域(不是像blogname.myblog.com这样的共享二级域名!),则根本不需要过滤任何内容。

同源策略将阻止站点访问任何重要内容(例如可能被劫持的会话cookie以侵入其他博客或管理URL)。

恶意用户总是存在添加iframe指向受恶意软件感染的网站或做其他恶事的危险。但是你没有机会可靠地阻止它。允许客户上传HTML的每家托管公司都有完全相同的问题。我想除了疏忽之外什么都不能做,除非让每个博主签署一些条款和条款。条件,并踢出任何违反他们的人。

如果您计划在共享域上运行博客,则可能会更加困难,因为博客可以访问彼此之类的内容,也可能访问管理区域内的cookie。你必须要注意许多事情。

答案 1 :(得分:6)

这是一个难题,它实际上取决于你想要的严格程度。一种方法是让他们用你预先处理成JS的新语言写,这意味着只有你允许的东西是可能的,另一种方法是尝试将明显的东西列入黑名单以避免XSS和cookie窃取。

真正的问题是你不能只做字符串查找和替换:

alert(document.cookie)

可以写

  

゚ω゚ノ= /`m')ノ〜┻━┻// '∇` / [''];   o =(゚ー゚)= = 3; c =(゚Θ゚)=(゚ー゚) - (゚ー゚);   (゚Д゚)=(゚Θ゚)=(o ^ ^ o)/   (o ^ ^ o);(゚Д゚)= {゚Θ゚:'',゚ω゚ノ:   ((゚ω゚ノ== 3)+'')[゚Θ゚],゚ー゚ノ:(゚ω゚ノ+   '')[o ^ ^ o - (゚Θ゚)],゚Д゚ノ:((゚ー゚== 3)   +'')[゚ー゚]}; (゚Д゚)[゚Θ゚] =((゚ω゚ノ== 3)+'')[c ^ ^ o];(゚Д゚)['c'] = ((゚Д゚)+'')[(゚ー゚)+(゚ー゚) - (゚Θ゚)   ];(゚Д゚)['o'] =((゚Д゚)+'')   [゚Θ゚];(゚゚=)=(゚Д゚)['c'] +(゚Д゚)   ['o'] +(゚ω゚ノ+'')[゚Θ゚] +((゚ω゚ノ== 3)   +'')[゚ー゚] +((゚Д゚)+'')[(゚ー゚)+(゚ー゚)] +((゚ー゚== 3) + '')   [゚Θ゚] +((゚ー゚== 3)+'')[(゚ー゚) -   (゚Θ゚)] +(゚Д゚)['c'] +((゚Д゚)+'')   [(゚ー゚)+(゚ー゚)] +(゚Д゚)['o'] +((゚ー゚== 3)   +'')[゚Θ゚];(゚Д゚)[''] =(o ^ ^ o)[゚o゚] [゚o゚];(゚ε゚)=((゚ー゚== 3)+'')[゚Θ゚] +   (゚Д゚)。゚Д゚ノ+((゚Д゚)+'')[(゚ー゚)+   (゚ー゚)] +((゚ー゚== 3)+'')[o ^ ^ o    - ゚Θ゚] +((゚ー゚== 3)+'')[゚Θ゚] +(゚ω゚ノ+'')[゚Θ゚]; (゚ー゚)+ =(゚Θ゚); (゚Д゚)[゚ε゚] = '\'; (゚Д゚)。゚Θ゚ノ=(゚Д゚+   ゚ー゚)[o ^ ^ o - (゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ   +'')[c ^ ^ o];(゚Д゚)[゚o゚] ='\'';(゚Д゚)['']((゚Д゚)[''](゚ε゚+(゚Д゚)[゚゚] +   (゚Д゚)[゚ε゚] +(゚Θ゚)+(゚ー゚)+(゚Θ゚)+   (゚Д゚)[゚ε゚] +(゚Θ゚)+((゚ー゚)+(゚Θ゚))+   (゚ー゚)+(゚Д゚)[゚ε゚] +(゚Θ゚)+(゚ー゚)+((゚ー゚)   +(゚Θ゚))+(゚Д゚)[゚ε゚] +(゚Θ゚)+((o ^ ^ o)+(o ^ ^ o))+(( o ^ ^ o) - (゚Θ゚))+(゚Д゚)[゚ε゚] +(゚Θ゚)+((o ^ ^ o)+(o ^ = O))+   (゚ー゚)+(゚Д゚)[゚ε゚] +((゚ー゚)+(゚Θ゚))+   (c ^ ^ o)+(゚Д゚)[゚ε゚] +(゚Θ゚)+(゚ー゚)+   (゚ー゚)+(゚Д゚)[゚ε゚] +(゚Θ゚)+((゚ー゚)+   (゚Θ゚))+((゚ー゚)+(o ^ ^ o))+   (゚Д゚)[゚ε゚] +(゚Θ゚)+(゚ー゚)+(o ^ ^ o)+   (゚Д゚)[゚ε゚] +(゚Θ゚)+((o ^ ^ o)+(o ^ ^ o))+   ((゚ー゚)+(゚Θ゚))+(゚Д゚)[゚ε゚] +(゚Θ゚)+   ((゚ー゚)+(゚Θ゚))+((゚ー゚)+(゚Θ゚))+   (゚Д゚)[゚ε゚] +(゚Θ゚)+(゚ー゚)+((゚ー゚)+   (゚Θ゚))+(゚Д゚)[゚ε゚] +(゚Θ゚)+((゚ー゚)+   (゚Θ゚))+((o ^ ^ o)+(o ^ ^ o))+   (゚Д゚)[゚ε゚] +(゚Θ゚)+((o ^ ^ o)+(o ^ ^ o))+   (゚ー゚)+(゚Д゚)[゚ε゚] +((゚ー゚)+(゚Θ゚))+   ((o ^ ^ o)+(o ^ ^ o))+(゚Д゚)[゚ε゚] +(゚Θ゚)+   (゚ー゚)+(o ^ ^ o)+(゚Д゚)[゚ε゚] +(゚Θ゚)+   ((゚ー゚)+(゚Θ゚))+((゚ー゚)+(o ^ ^ o))+   (゚Д゚)[゚ε゚] +(゚Θ゚)+((゚ー゚)+(゚Θ゚))+   ((゚ー゚)+(o ^ ^ o))+(゚Д゚)[゚ε゚] +(゚Θ゚)+   ((゚ー゚)+(゚Θ゚))+(o ^ ^ o)+   (゚Д゚)[゚ε゚] +(゚Θ゚)+((゚ー゚)+(゚Θ゚))+   (゚Θ゚)+(゚Д゚)[゚ε゚] +(゚Θ゚)+(゚ー゚)+((゚ー゚)   +(゚Θ゚))+(゚Д゚)[゚ε゚] +((゚ー゚)+(゚Θ゚))+(゚Θ゚)+(゚Д゚)[゚o゚]) (゚Θ゚))('');

一个愚蠢的例子,但你可以看到手动过滤它有多难。

答案 2 :(得分:0)

无法过滤任何内容,但javascript可以创建独立的上下文。博客框架在上下文中执行其(重要的)javascript代码,并允许博客者在另一个上下文中执行代码。这些上下文无法相互联系:博主不能编写与博客框架JS冲突的JS,或者否定它或破坏它。

答案 3 :(得分:0)

如果用户自己将恶意js添加到他们的页面中,那么应该有某种禁止机制。我将更多地关注确保您的登录,身份验证和发布过程是安全的,以便未登录的访问者不会将脚本标记注入到毫无戒心的用户页面主体中。

如果您要允许经过身份验证的用户将js放入其帖子中,那么您的情况就已经很难了。如果您想允许adsense或google analytics,您可以通过为可放置在内容中的内容创建某种窗口小部件来简化您的工作,并且可以根据您对adsense / analytics的期望来检查粘贴到这些窗口小部件中的js代码/等...

虽然Rich对于代码可能被模糊到无法识别这一事实有着重要的意义。您可以过滤掉将人们带到网站外的网址,并且您可能要求javascript中的任何网址都是本地网址或者说是Google的CDN。