2011-02-17 95 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解釋一切。