2010-03-03 57 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