2010-03-03 66 views
1

想象一下這個簡單的形式什麼是編碼URL的字符?瀏覽器還是PHP?

<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post"> 
    <fieldset> 
     <legend>Contact Me</legend> 
     <label for="email">Email:</label> 
     <input type="text" name="email" id="email" /> 
     <button type="submit">Submit</button> 
    </fieldset> 
</form> 

現在想象一下,它通過form.php?hack=" onsubmit="alert('xss')

輸出進行訪問時,我查看源代碼是

<form action="/things/?hack=%22%20onsubmit=%22alert(%27xss%27)" method="post"> 

是什麼編碼這 - 就是它的瀏覽器或PHP?

出於好奇,我總是在htmlspecialchars()內回覆$_SERVER['REQUEST_URI']

+0

你可以通過瀏覽器的等式來檢查這種事情。我有些驚訝,你沒有通過telnet到Web服務器來自己調查。 – outis 2010-03-03 13:27:57

+0

@outis我認爲你承擔了太多的我。我不知道該怎麼做。雖然我會研究它。謝謝。 – alex 2010-03-03 14:00:29

+0

@alex:幸運的是,考慮到HTTP的簡單性,它並沒有太多。易於調試是HTTP是純文本協議而不是二進制協議的兩個主要原因之一。如果您想要迷你指南,則有大量顯示基本信息的網頁(http://www.google.com/search?q=http+telnet)。 – outis 2010-03-03 14:49:15

回答

2

這是由瀏覽器完成的,如果你在某個PHP框架下,他們中的一些人也會改變它。這與您使用PHP的urlencode函數執行的操作類似。

+0

沒有框架 - 謝謝你的回答。 – alex 2010-03-03 13:07:44

+0

@alex:歡迎您:) – Sarfraz 2010-03-03 13:13:57

1

如果您在瀏覽器的地址欄中輸入form.php?hack=" onsubmit="alert('xss'),則會將其轉換爲form.php?hack=%22%20onsubmit=%22alert(%27xss%27),因爲"和空格字符不允許存在於URI中。所以他們必須被編碼。 '允許在URI中,但也可以進行編碼。

+0

任何用戶代理都不會這樣做嗎? – alex 2010-03-03 13:26:24

+0

@alex:Lynx 2.8.6rel.5似乎不適用於一個。 – outis 2010-03-03 13:29:44

+0

@alex:希望是的。 – Gumbo 2010-03-03 13:32:29