Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 双引号的URL编码_Javascript_Php_Html - Fatal编程技术网

Javascript 双引号的URL编码

Javascript 双引号的URL编码,javascript,php,html,Javascript,Php,Html,我知道url中不允许使用双引号字符,它被编码为%22,这是通过utf-8编码完成的。但如果我构建了一个浏览器,它不执行url编码和带有双引号的查询,这在utf-8编码方案中是允许的,那么会发生什么呢。例如:www.google.com/“a”。此外,当服务器中的url解析脚本遇到双引号时会发生什么情况 由于您正在向服务器传递无效的URI,服务器可能会响应HTTP 400错误请求状态,但可能不会。不同的服务器对此有不同的行为。例如,Apache2.4服务器的响应是403禁止。他们似乎意识到这是SQ

我知道url中不允许使用双引号字符,它被编码为
%22
,这是通过utf-8编码完成的。但如果我构建了一个浏览器,它不执行url编码和带有双引号的查询,这在utf-8编码方案中是允许的,那么会发生什么呢。例如:
www.google.com/“a”
。此外,当服务器中的url解析脚本遇到双引号时会发生什么情况

由于您正在向服务器传递无效的URI,服务器可能会响应
HTTP 400错误请求
状态,但可能不会。不同的服务器对此有不同的行为。例如,Apache2.4服务器的响应是
403禁止
。他们似乎意识到这是SQL注入的尝试,并立即予以抑制。nginx服务器的响应为
404notfound

您不需要构建一个不执行URL编码的浏览器来进行检查。您可以从简单的telnet程序执行此查询,该程序是大多数操作系统的一部分(但默认情况下可能未安装)。如果已安装,只需在终端窗口中执行telnet www.google.com 80,粘贴以下两行:

GET /"a" HTTP/1.1
Host: www.google.com

然后按Enter键两次。您将得到
404notfound
的响应。如果您对stackoverflow.com也这样做,响应将是
400错误请求

可能可以通过
mod_rewrite
处理。我不认为引号是一个问题。引号被视为特殊字符的唯一原因是URI通常用于引号作为分隔符的环境中
href=“/%22引用%22”
,诸如此类。如果我将引号输入为
%22
。我不认为是浏览器在那里翻译。但是真正的特殊字符,如
/
#
,确实需要特别注意。这个问题的前提是有缺陷的<代码>%22是URL转义,与UTF-8无关。无论您是否构建非标准web浏览器。像Apache这样的服务器在处理url之前会对url进行unescape(解码)。那么,如果你把熟食送给厨师又有什么意义呢?安全不。你只是不遵守标准,自己犯错误:)