你的问题是:
“编辑:我这样做的主要原因是让他们使用自己的 javascript,并拥有自己的 css 和 div 以及不用于输出的东西”。
如果您允许用户提供任意 JavaScript,那么清理输入是不值得的。Cross-Site Scripting (XSS) 的定义基本上是“用户可以提供 JavaScript,而有些用户是坏的”。
现在,一些网站确实允许用户提供 JavaScript,并通过以下两种方式之一降低风险:
- 将单个用户的 CMS 托管在不同的域下。Blogger 和 Tumblr(例如 myblog.blogspot.com与blogger.com)这样做是为了防止用户的模板窃取其他用户的 cookie。您必须知道自己在做什么,并且永远不要在根域下托管任何用户内容。
- 如果用户内容从未在用户之间共享,那么恶意用户提供什么脚本就无关紧要了。但是,CMS 是关于共享的,所以这可能不适用于这里
有一些黑名单过滤器可能有效,但它们仅在今天有效。HTML 规范和浏览器会定期更改,这使得过滤器几乎无法维护。黑名单是解决安全和功能问题的可靠方法。
在处理用户数据时,始终将其视为不受信任。如果您没有在产品早期解决这个问题并且您的场景发生了变化,那么几乎不可能返回并找到所有 XSS 点或修改产品以防止 XSS 而不会让您的用户感到不安。