如果您可以找到任何其他让用户发布内容的方式,即不涉及HTML的内容,请执行此操作。有许多可用于生成HTML的用户端光标记系统。
所以我想作出一些正则表达式来摆脱所有的脚本代码和所有的JavaScript属性像onload事件,的onclick等
算了。您无法以任何有用的方式使用正则表达式处理HTML。更不用说当涉及安全问题时,攻击者可能会故意向您发送格式错误的标记。
如果您可以说服您的用户输入XHTML,那么解析起来就容易多了。你仍然不能用正则表达式来实现,但是你可以把它放到一个简单的XML解析器中,并遍历结果节点树来检查每个元素和属性是否是已知的,并且删除那些不是的,然后重新-serialise。
HTML Purifier编辑HTLM,重要的是HTML保持它的发布方式。
为什么?
如果是这样他们就可以在他们的原始形式编辑它,那么答案很简单,就是净化它出要显示在浏览器的方式,不的方式在提交时间。
如果必须让用户输入自己的自由形式的HTML - 和一般我会建议反对 - 然后HTML过滤,用白名单的方式(禁止/属性,它们不知道安全的所有元素)大致如此。这是非常非常复杂的,你可能需要在发现黑客时保持它的最新状态,但是在任何你想用正则表达式来破解自己的东西之前,它都是街道。
但我不想为此购买新域名。
只要任何身份验证令牌(特别是Cookie)不能在子域之间交叉,就可以使用子域名。 (这对于饼干他们不能被默认为域参数设置为只在当前的主机名。)
你的脚本功能信任你的用户?如果不这样做不能让他们拥有了它,否则你会得到攻击脚本和iframe中的俄罗斯开发/恶意软件网站所有的地方...
谢谢你提出这个问题。如果每个创建Web应用程序的人都在开始之前就问过这个问题,那么Web将会更好(更安全!)。 – 2009-08-23 10:57:32