gpt4 book ai didi

regex - 使用 Positive LookAhead 和 LookBehind 屏蔽数据库连接字符串中的密码

转载 作者:行者123 更新时间:2023-12-01 00:11:46 27 4
gpt4 key购买 nike

我的 VB.NET 应用程序中有一个异常处理程序方法,该方法从发生的最后一个异常中检索详细信息,并将该信息通过电子邮件发送给我们的帮助台(我)以进行诊断和故障排除。一个可能的异常实例是当应用程序尝试在我们的数据库服务器之一上连接或执行某些 SQL 时。在这些情况下 - 特别是当异常是因为连接失败时 - 我想查看用于确保其格式正确的数据库连接字符串。

但是,数据库连接字符串通常包含用户的 ID 和密码,我想在字符串中屏蔽密码。然而,挑战在于我们连接到多种数据库类型(例如 PostgreSQL、MySQL、SQLite、MS Access 等),并且根据数据库的不同,连接字符串中可能有也可能没有密码。此外,连接字符串格式因提供商而异。

我对 RegEx 非常不熟悉,但是,使用 https://regexr.com/ ,我设法想出了以下似乎有时有效的正则表达式模式:
(?<=;?[Pp][Aa][Ss][Ss].*=)(.*?)(?=;)|$
示例连接字符串如下所示:
Host=SERVERNAME;Port=####;Database=DBNAME;Username=USERID;Password=MyPa$$Word;Integrated Security=False
上面的模式正确匹配 MyPa$$Word如果按此顺序明确,则在字符串中,但如果我移动 Password键/值对更接近连接字符串的开头,如下所示:
Host=SERVERNAME;Port=9999;Password=MyPa$$Word;Database=DBNAME;Username=USERID;Integrated Security=False
然后它匹配 MyPa$$Word , DBNAME , 和 USERID .如果我将它移动到字符串的末尾:
Host=SERVERNAME;Port=9999;Database=DBNAME;Username=USERID;Integrated Security=False;Password=MyPa$$Word
该模式没有找到任何匹配项。只是为了确保带有空格的键/值( Integrated Security=False )不会混淆模式,我从字符串中删除了它并得到了相同的结果。

因为连接字符串可以根据数据库类型、用户输入等以多种方式构建,所以我希望能够使用 RegEx 来查找(不区分大小写的)密码键/值对连接字符串,仅提取实际密码值,并将其替换为某些内容(例如 [HIDDEN] )。我知道我可能只是做一个 String.Split(Convert.ToChar(";"))在整个连接字符串上并检查每个键/值对,但如果可能的话,我更愿意使用 RegEx 来完成。

最佳答案

这样的事情可以工作:

((^|;)Password=)(.*?)(;|$)

密码将在 $3所以只需确保在执行替换时省略该捕获组。

单击此页面左侧的“代码生成器”以查看它在 PHP 中的运行情况。

https://regex101.com/r/gxztmy/1

关于regex - 使用 Positive LookAhead 和 LookBehind 屏蔽数据库连接字符串中的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58015807/

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