gpt4 book ai didi

sql-server - 控制 SQL Server 最适合的 unicode 转换

转载 作者:行者123 更新时间:2023-12-02 23:37:14 24 4
gpt4 key购买 nike

最近的一次白帽扫描让我意识到 SQL Server 最适合的 unicode 转换。这意味着,当包含 unicode 字符的字符串转换为非 unicode 字符串时,SQL Server 将对字符进行最适合的替换,以免用问号破坏数据。例如:

SELECT 'ŤĘŞŤ'

输出“测试”

每个字符都被替换为“相似的”ASCII 等效字符。这也可以在单个字符上看到,其中 unicode 字符 65308 (<) 转换为 ASCII 字符 60 (<)。

SELECT ascii(NCHAR(65308))

输出“60”

主要问题是,这个记录到底在哪里?我在 Google 上搜索了各种短语并阅读了 Microsoft 文档,但我所能找到的只是人们希望进行手动转换,而没有任何记录 SQL Server 明显的自动最适合 unicode 转换的内容。此外,可以关闭或配置它吗?

虽然这种行为对于不将字符串存储为 unicode 的应用程序来说很方便,并且在大多数情况下可能会完全被注意到,但渗透测试将此报告为“高”漏洞,因为 unicode 转换可用于规避验证例程并导致漏洞例如 XSS。

最佳答案

(以下摘录 self 对 DBA.StackExchange 上相关问题的回答: Automatic Translation when Converting Unicode to non-Unicode / NVARCHAR to VARCHAR )

这些“最适合”的映射已被记录,只是不是在最容易找到的地方。如果您访问以下 URL,您将看到一个包含多个文件的列表,每个文件均以其将 Unicode 字符映射到的代码页命名:

ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/

大多数文件的最后更新时间(或至少放置在那里)是在 2006 年 10 月 4 日,其中一个文件的更新时间是 2012 年 3 月 14 日。这些文件的第一部分将 ASCII 代码映射到等效的 Unicode 代码点。但每个文件的第二部分将 Unicode 字符映射为其 ASCII“等效项”。

我编写了一个测试脚本,它使用代码页 1252 映射来检查 SQL Server 是否真正使用这些映射。这可以通过回答以下两个问题来确定:

  1. 对于所有映射的代码点,SQL Server 是否将它们转换为指定的映射?
  2. 对于所有未映射的代码点,SQL Server 是否会将其中任何一个转换为非“?”字符?

测试脚本太长,无法放在这里,所以我将其发布在 Pastebin 上:

Unicode to Code Page mappings in SQL Server

运行脚本将显示上述第一个问题的答案是"is"(意味着遵守所有提供的映射)。它还将显示第二个问题的答案是“否”(意思是,没有任何未映射的代码点转换为除了“未知”字符之外的任何内容)。因此,该映射文件非常准确:-)。

Furthermore, can this be turned off or configured?

我不这么认为,但这并不意味着不可能做到其中之一或两者兼而有之。但是,应该注意的是,这些映射是“Microsoft”映射,因此适用于 Windows 和 SQL Server;它们不是特定于 SQL Server 的。因此,即使可以找到配置这些内容的位置,更改也可能是一个坏主意,因为它会影响操作系统上运行的所有内容。

关于sql-server - 控制 SQL Server 最适合的 unicode 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32705760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com