带有空格的GET变量 - 它们可以工作,但是否正确或可行?

16

我有一个PHP页面,在通过“city”URL/GET变量传递城市名称。目前,即使含有空格(例如.php?city=New York),它也会传递实际的城市名称。然后,我取得$ city GET变量并针对cities.name运行MySQL查询。

这样做完全没有问题 - 但是我一直认为任何变量,无论是URL / GET还是其他方式都不应该有空格。我可以轻松地将空格替换为下划线,或者删除它们,并将其重新放入查询中...等等 - 但是如果空格是完全正常的,而这只是我的迷信告诉我相反,所以我想先问问。

3个回答

25

空格没问题,通常用 + 进行编码。

如果需要手动将值添加到 GET 参数中,请为其使用 urlencode() 来保证更安全。

echo urlencode('New York'); // New+York

CodePad

否则,如果您的表单以GET参数形式提交,只需将它们保留即可 :)

然后我拿$city GET变量并针对cities.name运行MySQL查询。

确保您使用适当的数据库转义机制以防止SQL注入。


1
如果我发送“New+York”,然后与我的数据库进行比较,它会匹配吗?还是我需要使用str_replace()函数替换“+”符号? - Dave
4
你可以使用urldecode()函数。 - alex

2

在从Javascript到Php或Python传递带有空格的参数时,不使用encodeURI()或encodeURIComponent()也可以正常工作。

echo shell_exec("python test.py \"".$_POST['ytitle']."\" \"".$_POST['yurl']."\"");

感谢来自 https://stackoverflow.com/users/8712097/tom-aranda 的提示。 以下是更安全的代码。

system(escapeshellcmd("python GreaseMonkey_Php_Youtube_srt_generator.py ".$_POST['yurl']));

虽然这样做在技术上可能有效,但我强烈反对将用户输入连接到 shell_exec 命令中。这样做可能会使您的服务器容易受到黑客攻击。如果您的 Web 服务器正在以特权用户身份运行,则黑客可能会接管您的服务器。作为最小安全措施,我建议使用 escapeshellcmd,但如果可能的话最好避免使用 shell_exec。请参见此 SO 帖子 - Tom Aranda

1

URL 中的空格是可以的。但需要注意的是,每当使用来自外部的变量(URL 变量、Cookies 等等)时,一定要记得清理它们,以防止 SQL 注入、XSS 和其他恶意攻击。


1
好的,谢谢。我正在使用CakePHP查询,所以 - 我相信它会为我清理查询(对吗?)。 - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接