2011-02-17 64 views
0

我在那里的电子邮件地址被传递的电子邮件地址PARAM未编码像这样:简单的PHP XSS/URLEncode的问题

http://domain/[email protected]

什么PHP逃逸/编码将让我在一个安全的显示电子邮件地址在页面上的输入字段?

一切我试图使编码的字符,而不是显示用户友好的电子邮件地址(即测试%2Btest%40test.com)高达

更新 - 这里就是我已经试过:

[email protected]要:

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

回想一下,我试图把未编码的URL的电子邮件PARAM和安全输出入的值一个输入字段,同时保持加号完好无损。

也许我应该试试这个?

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

最好的办法是首先urldecode,然后用htmlspecialchars吧:) $电子邮件=用htmlspecialchars(urldecode($ _ GET [ '电子邮件']));现在你可以使用$ email;) – ahmet2106 2011-02-17 19:18:25

+0

不,我不认为你明白。该电子邮件地址发送未编码。 – doremi 2011-02-17 19:20:30

+0

请尝试htmlspecialchars ahmet2106指出。 – 2011-02-17 22:31:39

回答

1

这工作:

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

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

0

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

0

如果您验证电子邮件并照原样书写,如果只有电子邮件地址可接受,该怎么办?

1

如果您想要安全地将其输入到输入字段的值中,则需要先用htmlspecialchars对其进行编码。

例子:

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

注意:如果你不使用你的周围是什么输出双引号,则需要应用更多的逃逸。 This page解释一切。