登录前修改密码

Redact passwords before logging

我试图在登录前使用正则表达式从字符串中隐藏密码

$猫rubytest.rb

str = 'login=luser-name&password=secretpw&otherstuff=dontcare'
print "1: ",str.sub(/password=.+(?<post>(&.+))/,'password=<redacted>\k<post>'),"\n"
print "2: ",str.sub(/password=.+(?<post>(&.+)?)/,'password=<redacted>\k<post>'),"\n"

str = 'login=luser-name&password=secretpw'
print "3: ",str.sub(/password=.+(?<post>(&.+))/,'password=<redacted>\k<post>'),"\n"
print "4: ",str.sub(/password=.+(?<post>(&.+)?)/,'password=<redacted>\k<post>'),"\n"

$ ruby rubytest.rb

1: login=luser-name&password=<redacted>&otherstuff=dontcare
2: login=luser-name&password=<redacted>
3: login=luser-name&password=secretpw
4: login=luser-name&password=<redacted>

1:如果 str 得到的数据多于要编辑的密码,则有效,
2:对 EoL 的编辑不是故意的,
3: 根本不编辑,
4:当密码是 str

中的最后一项时有效

如何组合正则表达式 1 和 4?

你不能,除非 & 不能是密码字符。在那种情况下:

/password=[^&]+(?<post>(&.+)?)/

无论如何,如果它在 url 中,您 必须对符号进行转码。