【问题标题】:How to allow users to write javascript with security?如何让用户编写安全的javascript?
【发布时间】:2011-04-03 16:20:56
【问题描述】:

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

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

如何同时兼顾安全性和自定义性?

我应该过滤什么样的脚本?

谢谢:)

【问题讨论】:

  • 每个博客都在自己的域上吗?
  • 我计划使用虚拟子域,例如指向“myblog.com/blogs/USER_NAME/”的“USER_NAME.myblog.com”。

标签: php javascript security blogs


【解决方案1】:

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

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

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

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

【讨论】:

  • 您如何看待将所有博客放在与管理区域不同的域中?即,就像 Blogger 在 blogspot.com 上托管他们的博客,而他们的网站和管理员在 blogger.com 上。
【解决方案2】:

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

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

alert(document.cookie)

可以写

゚ω゚ノ= /`m´)ノ ~┻━┻ //´∇`/ ['']; o=(゚ー゚) ==3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^^o)/ (o^^o);(゚Д゚)={゚Θ゚: '' ,゚ω゚ノ : ((゚ω゚ノ==3) +'') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '')[o^^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'')[゚ー゚] }; (゚Д゚) [゚Θ゚] =(((゚ω゚ノ==3) +'') [c^^o];(゚Д゚) ['c'] = ((゚Д゚)+'') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'') [゚Θ゚];(゚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^ em>^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゚]) (゚Θ゚)) ('');

一个愚蠢的例子,但您可以看到手动过滤它是多么困难。

【讨论】:

    【解决方案3】:

    没有办法过滤任何东西,但是 javascript 可以创建独立的上下文。博客框架在一个上下文中执行他们的(重要的)javascript 代码,并允许博主在另一个上下文中执行代码。这些上下文无法相互获取:博主不能编写与博客的框架 JS 冲突或否定或破坏它的 JS。

    【讨论】:

      【解决方案4】:

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

      如果您要允许经过身份验证的用户将 js 放入他们的帖子中,那么您已经让您的情况变得困难了。如果您想允许 adsense 或 google 分析,您可以通过为那些可以放置在内容中的小部件创建某种小部件来简化您的工作,并且您可以检查粘贴到这些小部件中的 js 代码是否符合您对 adsense/分析的期望/等等...

      虽然 Rich 有一个很好的观点,即代码可以被模糊到无法识别的程度。您可以过滤将人们带离现场的 URL,并且您可能要求 javascript 中的任何 URL 都是本地的,或者说是谷歌的 CDN。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-16
        • 1970-01-01
        • 2018-01-01
        相关资源
        最近更新 更多