我有一个记录登录的api记录系统,但我不想在日志中存储密码。
这是日志的请求字符串示例:
注意:字符串不会完全相同,并且将包含不同顺序的参数,所以我想也许某些REGEX可以处理这个?
api.my.geatapim/live/?action=login_user&username=joe@bloggs.com&password=PassWord&session_length=10080
我需要做的是:
api.my.geatapim /活/动作= login_user&安培; username=joe@bloggs.com&密码=混淆&安培; session_length = 10080
我试过这个但不起作用:$request_string = preg_replace("/password=\d+/", "password=OBFUSCATED", $request_string);
答案 0 :(得分:1)
\d+
代表数字([0-9]
)。考虑到您提供的字符集使用[A-Za-z]
,您希望为密码添加更多字符集。
$request_string = preg_replace("/password=\w+/", "password=OBFUSCATED", $request_string);
但是,考虑到典型的密码,其字符集将大于[a-zA-Z0-9_]
,考虑到特殊字符(但由于它在网址中,它可能是{{1} }例如,urlencoded()
将成为P&ssW0rd!
。)
P%26ssW0rd!
这个逻辑不会修改放入Apache / Nginx / Whatever $request_string = preg_replace("/password=[^&]+/", "password=OBFUSCATED", $request_string);
的内容(除非您将这些日志写入access_log
或其他空白位置)。如果您将密码从/dev/null
更改为HTTP GET
(或HTTP POST
)并在正文中包含凭据,或,则也无法在日志中写入密码strong>,使用HTTP Authentication headers。
虽然您的问题很容易解决,但它与您的实际问题无关。你永远不应该通过
HTTP PUT
转移密码数据 - 它是处理凭据的重要原因之一。 - Franz Gleichmann
答案 1 :(得分:0)
尝试使用此代码,它可以正常工作
<?php
$request_string = "api.my.geatapim/live/?action=login_user&username=joe@bloggs.com&password=PassWord&session_length=10080";
echo $request_string = preg_replace("/password=\w+/", "password=OBFUSCATED", $request_string);
?>
输出:api.my.geatapim / live /?action = login_user&amp; username=joe@bloggs.com& password = OBFUSCATED&amp; session_length = 10080