我的屏幕上显示以下输出,该输出分配给变量
<pre>
$content = First Name: ajkhfsadf
Last Name: asdfasf
password: jkasdfhasdf2234h234j23 (encrypted. variable length)
objectClass: asdfjkashdf
</pre>
输出中的上述行可以改变顺序。有没有办法我只能提取密码字段并用 ** ?
替换它我有一个静态的解决方法,它要求我预先选择单词,但它不能与代码一起使用,因为输出行可以按顺序动态。
$word1 = "password: ";
$word2 = "objectClass";
$word3 = "Password: ******** \n";
$between=substr($contents, strpos($contents, $word1), strpos($contents, $word2) - strpos($contents, $word1));
$output = str_replace($between,$word3,$contents);
是否有办法只能选择密码行,并用 * 替换加密密码,无论其在输出中的位置如何?
答案 0 :(得分:3)
$string = preg_replace('/Password: .*/', 'Password: ********', $string);
答案 1 :(得分:0)
您使用PHP的explode。我假设您一次性读取整个输出并将其存储在变量$var
中。
首先,您使用换行符$var
作为分隔符来展开\n
。现在,您将所有行分开。
现在循环遍历行,进一步展开:
上的每一行并检查新数组的第一个组件,看它是否与password
匹配。重建数组(使用implode),你就完成了。
奖励:通过用星号替换$password
的所有字符,您可以让攻击者知道密码有多少个字符(除非您的加密方案输出固定长度的字符串)。
答案 2 :(得分:0)
回复您的评论,当您从数据库中检索该值或您正在使用的存储时,您无需屏蔽此值;
您需要做的是让您的文本框在HTML中显示如下:
<input type="password" value="...Stored Password...">
但要注意,这不是很安全!
你最终想要达到的目标是什么?