@@ -3248,7 +3248,7 @@ public void StyleByPassTest()
3248
3248
var sanitized = sanitizer . Sanitize ( html , "http://www.example.com" ) ;
3249
3249
3250
3250
// Assert
3251
- Assert . Equal ( "aaabc<style>x[x=\" \\ 3c/style> \\ 3cimg src onerror=alert(1)> \" ] { }</style>" , sanitized ) ;
3251
+ Assert . Equal ( "aaabc<style>x[x=\" \\ 3c/style> \\ 3cimg src onerror=alert(1)> \" ] { }</style>" , sanitized ) ;
3252
3252
}
3253
3253
3254
3254
[ Fact ]
@@ -3497,4 +3497,59 @@ public void Number469Test()
3497
3497
var sanitized = sanitizer . Sanitize ( html ) ;
3498
3498
Assert . Equal ( @"<div style=""height: 0; background-image: url("https://example.com/1.jpg"), url("https://example.com/2.jpg"), url("https://example.com/3.jpg"); display: none""></div>" , sanitized ) ;
3499
3499
}
3500
+
3501
+ [ Fact ]
3502
+ public void BypassTest ( )
3503
+ {
3504
+ var sanitizer = new HtmlSanitizer ( ) ;
3505
+ sanitizer . AllowedTags . Add ( "svg" ) ;
3506
+ sanitizer . AllowedTags . Add ( "title" ) ;
3507
+ sanitizer . AllowedTags . Add ( "xmp" ) ;
3508
+ var bypass = @"<svg></p><title><xmp></title><img src=x onerror=alert(1)></xmp></title>" ;
3509
+ var sanitized = sanitizer . Sanitize ( bypass , "https://www.example.com" ) ;
3510
+ var expected = @"<svg><p></p><title><xmp></title><img src=x onerror=alert(1)></xmp></title></svg>" ;
3511
+ Assert . Equal ( expected , sanitized ) ;
3512
+ }
3513
+
3514
+ [ Fact ]
3515
+ public void Bypass2Test ( )
3516
+ {
3517
+ var sanitizer = new HtmlSanitizer ( ) ;
3518
+ sanitizer . AllowedTags . Add ( "form" ) ;
3519
+ sanitizer . AllowedTags . Add ( "math" ) ;
3520
+ sanitizer . AllowedTags . Add ( "mtext" ) ;
3521
+ sanitizer . AllowedTags . Add ( "mglyph" ) ;
3522
+ sanitizer . AllowedTags . Add ( "xmp" ) ;
3523
+ var bypass = @"<form><math><mtext></form><form><mglyph><xmp></math><img src onerror=alert(1)>" ;
3524
+ var sanitized = sanitizer . Sanitize ( bypass , "https://www.example.com" ) ;
3525
+ var expected = @"<form><math><mtext><form><mglyph><xmp></math><img src onerror=alert(1)></xmp></mglyph></form></mtext></math></form>" ;
3526
+ Assert . Equal ( expected , sanitized ) ;
3527
+ }
3528
+
3529
+ [ Fact ]
3530
+ public void Bypass3Test ( )
3531
+ {
3532
+ var sanitizer = new HtmlSanitizer ( ) ;
3533
+ sanitizer . AllowedTags . Add ( "svg" ) ;
3534
+ sanitizer . AllowedTags . Add ( "title" ) ;
3535
+ sanitizer . AllowedTags . Add ( "noscript" ) ;
3536
+ var bypass = @"<svg></p><title><noscript></title><img src=x onerror=alert(1)></noscript></title>" ;
3537
+ var sanitized = sanitizer . Sanitize ( bypass , "https://www.example.com" ) ;
3538
+ var expected = "<svg><p></p><title><noscript></title><img src=x onerror=alert(1)></noscript></title></svg>" ;
3539
+ Assert . Equal ( expected , sanitized ) ;
3540
+ }
3541
+
3542
+ [ Fact ]
3543
+ public void Bypass4Test ( )
3544
+ {
3545
+ var sanitizer = new HtmlSanitizer ( ) ;
3546
+ sanitizer . AllowedTags . Add ( "svg" ) ;
3547
+ sanitizer . AllowedTags . Add ( "p" ) ;
3548
+ sanitizer . AllowedTags . Add ( "style" ) ;
3549
+ sanitizer . RemovingComment += ( s , e ) => e . Cancel = true ;
3550
+ var bypass = @"<svg></p><style><!--</style><img src=x onerror=alert(1)>-->" ;
3551
+ var sanitized = sanitizer . Sanitize ( bypass , "https://www.example.com" ) ;
3552
+ var expected = "<svg><p></p><style><!--</style><img src=x onerror=alert(1)>--></style></svg>" ;
3553
+ Assert . Equal ( expected , sanitized ) ;
3554
+ }
3500
3555
}
0 commit comments