0

我的屏幕上显示了以下输出,该输出分配给了一个变量

<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);

有没有办法只选择密码行并将加密密码替换为*而不管其在输出中的位置如何?

4

3 回答 3

3
$string = preg_replace('/Password: .*/', 'Password: ********', $string);
于 2013-05-30T01:09:25.360 回答
0

你使用 PHP 的explode。我假设您一口气阅读了整个输出并将其存储在一个变量$var中。

首先,您$var使用换行符\n作为分隔符进行爆炸。您现在将所有行分开。

现在你循环这些行,进一步分解每个行:并检查新数组的第一个组件以查看它是否匹配password。重建数组(使用implode),你就完成了。

奖励:通过用$password星号替换所有字符,您可以让攻击者知道密码有多少个字符(除非您的加密方案输出固定长度的字符串)。

于 2013-05-30T01:09:12.430 回答
0

响应您的评论,当您从数据库中检索该值或您正在使用的存储时,您无需屏蔽此值;

你需要做的是让你的文本框在 HTML 中看起来像这样:

<input type="password" value="...Stored Password...">

但请注意,这不是很安全!

你最终想要达到什么目标?

于 2013-05-30T01:10:39.840 回答