如何在HTML表单上正确转义密码字段?

时间:2011-10-17 09:51:02

标签: php

与文本输入相比,密码的输入字段通常接受多种字符。在HTML表单上转义输入的常规方法是在输入内容上使用htmlspecialchars($_POST['content'])

如果在验证密码更新过程失败的情况下,我需要在HTML表单上重新填充新密码,该怎么办?像'> yeah之类的东西会导致表单出现故障,使用htmlspecialchars会产生完全不同的密码。

有什么建议吗?

如图所示的html部分:

<INPUT type=password name=password1 value=''&gt;&lt;script&gt;try' size=15 maxlength=15>

相应的php代码:

function h($str) {echo htmlspecialchars($str);}
echo "<INPUT type=password name=password1 value='", h(@$_POST['password1']), "' size=15 maxlength=15>";

空白显示在表单输入字段中。

更新

问题出在我的htmlspecialchars上,默认情况下不会转义单引号。现在添加ENT_QUOTES参数可以转义单引号并解决我的问题。 deceze和CodeCaster是正确的,htmlspecialchars不会更改密码。谢谢大家。

4 个答案:

答案 0 :(得分:3)

将显示逻辑与数据逻辑分开。

在想要在html页面上显示数据之前,请使用htmlspecialchars()。如果您要将其存储在数据库中,请使用适当的sql转义方法(如mysql_real_escape_string()

顺便说一下,如果输入元素包含例如&gt,则在发布时会将其视为>;

答案 1 :(得分:3)

不,htmlspecialchars不会产生完全不同的密码。它会产生value="&gt; yeah",当浏览器解析时,它被读作> yeah。密码字段在处理特殊字符或非特殊字符时没有任何特殊之处。

答案 2 :(得分:1)

您可以使用htmlspecialchars_decode()解密密码。

http://www.php.net/manual/en/function.htmlspecialchars-decode.php

但是,如果密码错误,我没有看到重新输入密码输入的原因,也不认为它是安全的。我也希望你不要在数据库中以文本格式保存密码。

答案 3 :(得分:1)

  

在HTML表单上转义输入的常规方法是在输入内容上使用htmlspecialchars($ _ POST ['content'])。

这不是正常而是错误的方式 转义HTML通常用于输出,而不用于输入。

  

如果在验证密码更新过程失败的情况下,我需要在HTML表单上重新填充新密码,该怎么办?

这是危险的做法,大多数服务要求用户在这种情况下重新输入密码。

  

在HTML表单上重新填充?

这是HTML转义。与其他情况不同,当您要填充表单值时,HTML转义是强制性