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

Pet*_*ung 3 javascript php security blogs

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

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

如何保持安全性和定制?

我应该过滤哪种脚本?

谢谢 :)

Pek*_*ica 7

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

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

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

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


Ric*_*haw 6

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

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

alert(document.cookie)
Run Code Online (Sandbox Code Playgroud)

可以写

゚ω゚ノ= /`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 ^ ^ 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゚])(゚Θ゚))(' ');

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