我有一个这样的表格,用于登录到我的网站的用户:
<form>
<input name="fontColor"><input type="submit">
</form>
这允许用户使用字体颜色自定义他们自己的页面(其他登录用户也可以看到他们的页面)。这种字体颜色进入页面的方式是通过页面头部的动态样式表,其结构如下:
body { color: <fontColor>; }
假设用户为 fontColor 输入了这个:
default; behavior: url(http://www.myscript.com/script.htc)
然后CSS会导致
body {color: default;behavior: url(http://www.myscript.com/script.htc)}
这意味着用户“会员页面”将在页面上插入 script.htc,因此访问该会员页面的其他成员将执行该脚本(从而导致对其他访问者的攻击)。
为了防止这种情况,服务器将忽略字符:;{}
输入到“fontColor”字段中的字符。
在这种情况下,产生的 CSS 将是无效的,并且无法正常工作。
body {color: defaultbehavior: url(http://www.myscript.com/script.htc)}
基本上我的问题归结为这些:
- 还有一种方法可以在不使用
{};
字符的情况下插入脚本吗? - 假设
{};
被允许,是否有其他方式(除了在 IE 中工作的行为样式)不需要的脚本可以插入到 CSS 中?
我知道这里最好的解决方案是验证 fontColor,这样用户就没有太多的颜色自由了,但出于学术目的,我仍然想尽可能多地了解可能发生的情况。