从输出中提取数据

时间:2013-05-30 00:58:31

标签: php

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

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

是否有办法只能选择密码行,并用 * 替换加密密码,无论其在输出中的位置如何?

3 个答案:

答案 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...">

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

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