【问题标题】:Compression HTTP Module that can escape inline scripts可以转义内联脚本的压缩 HTTP 模块
【发布时间】:2009-03-27 20:24:06
【问题描述】:

我有一个压缩 HTTP 请求的 HTTP 模块。

public override void Write(byte[] buffer, int offset, int count)
{
    byte[] data = new byte[count];
    Buffer.BlockCopy(buffer, offset, data, 0, count);
    string html = System.Text.Encoding.Default.GetString(buffer);

    Regex reg = new Regex(@"(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}");
    html = reg.Replace(html, string.Empty);

    byte[] outdata = System.Text.Encoding.Default.GetBytes(html);
    _sink.Write(outdata, 0, outdata.GetLength(0));
}

如何转义所有内联脚本? 这是我的脚本正则表达式。

Regex reg = new Regex("<script[^>]*?>[\\w|\\t|\\r|\\W]*?</script>", (RegexOptions.Singleline | RegexOptions.IgnoreCase));

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    我真的怀疑你想使用Encoding.Default,这是特定于你的系统的。除此之外,为什么不使用更标准的压缩方式,即 gzip 二进制数据而不是进行文本操作?我怀疑这会产生更大的影响,并且在意外破坏 HTML 方面几乎没有那么脆弱。此外,您无需再担心编码问题。

    【讨论】:

    • 如果您已经在 gzip 压缩,这真的有很大的不同吗?您是否对其进行了测量,以及进行编码/解码/正则表达式替换所带来的性能损失?然后就有可能弄错了......
    • 我同意你的评论。它并没有提高性能,但我们将其用于 SEO 优化。
    • Closer html 元素到 更准确的内容是。我们所有的 JS 和 CSS 都是使用 HTTP 处理程序加载的,它工作正常。我们使用 HTTP 代理加载的网站的某些部分和 HTML 内容具有 JS 内联。
    • 我们无法控制此 HTML。如果我们使用 HTTP 模块压缩这个请求,我们会收到 JS 错误。所以现在我们不得不因为第 3 方 HTML 而禁用 HTTP 模块。我正在尝试修改我们的 HTTP 模块以跳过内联 JS,并且我正在寻求帮助来更新我们的 RegEx。提前致谢
    • 在此期间,我会尝试联系第三方,向我们提供他们所有的 JS 函数,并要求他们删除所有内联函数。
    猜你喜欢
    • 2010-10-28
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    相关资源
    最近更新 更多