我正在使用 Microsoft AntiXss 3.1 库。我们有许多使用非拉丁文字的国际网站。我们使用的是对 SEO 友好的 URL,因此我们在 URL 中包含非 ASCII 字符。
AntiXss.UrlEncode(至少在 3.1 中)将“国际字符”视为安全的,因此我们最终使用 IRI 而不是 URI:
http://somesite.com/ja-JP/applications/search/セキュリティ-b200009
HttpUtility.UrlEncode 为 URI (RFC3986) 生成正确的编码:
http://somesite.com/ja-JP/applications/search/%e3%82%bb%e3%82%ad%e3%83%a5%e3%83%aa%e3%83%86%e3%82%a3-b200009
但我宁愿遵循我们使用 AntiXss 库的标准。
我知道 AntiXss/WPL 4.0 已经发布(并且默认情况下似乎不再将国际字符视为安全),但它更改了 API 名称,因此我必须对我们的应用程序进行重大更改才能升级。
因此,我很乐意回答以下任何问题:
- 如何哄 AntiXss 做一个与 Uri 标准兼容的 UrlEncode。
- 一些保证,如果我们使用 AntiXss 库的 IRI 兼容输出(这是更可取的),我们不会设置自己与泰国(或其他任何地方)的旧代理服务器的兼容性问题 - 我们可以针对我们的浏览器矩阵进行测试,但不是我们与客户之间可能存在的所有中间网络设备)。
- HttpUtility.UrlEncode 是我们应该使用的,它的安全性并不明显低于 AntiXss.UrlEncode。
- 还有一些我没有考虑过的更好的解决方案。
谢谢