XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESystem

【Rust】XFE系统,基于Rust和汇编

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Text;
using XFESystem.NativeRuntime.Application.Web;

namespace XFESystem.HttpProtocol.Tests;

public sealed class NativeBingHeadersTests
{
    [Fact]
    public void DiagnosticHeadersKeepFramingButRemoveCredentialsAndCookieValues()
    {
        const string headers = "GET /search?q=actual HTTP/1.1\r\nHost: bing.test\r\nCookie: sid=secret\r\nSet-Cookie: session=secret; HttpOnly\r\nAuthorization: Bearer secret\r\n\r\n";
        string redacted = NativeHttpProtocol.RedactSensitiveHeaders(headers);
        Assert.DoesNotContain("secret", redacted); Assert.Contains("Host: bing.test", redacted);
        Assert.StartsWith("GET /search?q=actual HTTP/1.1\r\n", redacted); Assert.EndsWith("\r\n\r\n", redacted);
    }
    [Fact]
    public void MultipleCspPoliciesAndCookieHeadersRemainSeparateAtEveryPacketBoundary()
    {
        byte[] wire = Encoding.ASCII.GetBytes("HTTP/1.1 200 OK\r\nContent-Length: 0\r\nContent-Security-Policy: script-src 'nonce-a' 'strict-dynamic'\r\nContent-Security-Policy: script-src 'none'\r\nSet-Cookie: one=1; Path=/\r\nSet-Cookie: two=2; HttpOnly\r\n\r\n");
        for (int packet = 1; packet <= wire.Length; packet++)
        {
            using var stream = new MemoryStream(wire);
            var response = NativeHttpProtocol.ReadResponse((target, offset, count) => stream.Read(target, offset, Math.Min(packet, count)), 1024);
            Assert.Equal("script-src 'nonce-a' 'strict-dynamic', script-src 'none'", response.ContentSecurityPolicy);
            Assert.Equal(new[] { "one=1; Path=/", "two=2; HttpOnly" }, response.SetCookies);
        }
    }
}