简单的PHP XSS / Urlencode问题

时间:2011-02-17 19:03:33

标签: php xss urlencode

我有一个电子邮件地址参数,其中电子邮件地址是未编码的,如下所示:

http://domain/script?email=test+test@gmail.com

什么PHP转义/编码可以让我在页面的输入栏上安全地显示电子邮件地址?

我尝试的所有内容都会导致编码的字符显示而不是用户友好的电子邮件地址(即test%2Btest%40test.com)

更新 - 这是我尝试的内容:

?email = test + test@gmail.com 转到:

urlencode($_GET['email']) = test+test%40test.com (@ sign is encoded)
htmlspecialchars($_GET['email']) = test test@test.com (lost the +)
htmlspecialchars(urlencode($_GET['email']) = test+test%40test.com (@ sign encoded)

回想一下,我正在尝试使用未编码的网址电子邮件参数,并将其安全地输出到输入字段的值,同时保持加号完整。

也许我应该试试这个?

str_replace("%40", "@", htmlspecialchars(urlencode($_GET['email'])))

5 个答案:

答案 0 :(得分:1)

如果要在输入字段的值中安全地输出它,则需要先使用htmlspecialchars对其进行htmlencode。

示例:

<input type="email" name="email" value="<?php echo htmlspecialchars($_GET['email']); ?>"

注意:如果您没有对输出内容使用双引号,则需要应用更多转义。 This page解释了这一切。

答案 1 :(得分:1)

这有效:

str_replace("%40", "@", htmlspecialchars(urlencode($_GET['email'])))

答案 2 :(得分:0)

您可能正在寻找urldecode()?这就是将%40,%2B等转换回普通字符的原因。

答案 3 :(得分:0)

凯文建议使用emailaddress = urldecode($_GET['email']);。它会做你需要的任何事情。

答案 4 :(得分:0)

如果您确认电子邮件并按原样写入,如果只接受电子邮件地址,该怎么办?