【问题标题】:GET variables with spaces - they work, but is it correct or ok?获取带空格的变量 - 它们可以工作,但它是正确的还是好的?
【发布时间】:2011-04-11 01:57:32
【问题描述】:

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

这很好用——但我一直认为任何变量、URL/GET 或其他变量都不应该有空格。我完全有能力用下划线替换空格,或者删除它们,然后将它们放回查询中......等等 - 但我想我会先问一下,以防空格完全没问题,而且它是只是我的迷信告诉我不然。

【问题讨论】:

    标签: php variables


    【解决方案1】:

    空格很好,一般用+编码。

    为了更加安全,如果手动将值添加到 GET 参数,请在值上使用 urlencode()

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

    CodePad.

    否则,如果您的表单作为 GET 参数提交,请保持原样:)

    然后我获取 $city GET 变量并针对 citys.name 运行 MySQL 查询。

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

    【讨论】:

    • 如果我发送“New+York”,然后与我的数据库进行比较,它会匹配,还是我必须用 str_replace 替换“+”?
    • @Dave 你可以使用urldecode()
    【解决方案2】:

    不使用 encodeURI() 或 encodeURIComponent() 可以很好地处理从 Javascript 到 Php 或 Python 的带有空格的参数。

    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。见this SO post
    【解决方案3】:

    网址中的空格很好。您需要注意的一件事是,无论何时使用从您的控制之外获取的变量(URL 变量、Cookie 等)。切记清理干净,防止sql注入、XSS等恶意攻击。

    【讨论】:

    • 很高兴知道,谢谢。我正在使用 CakePHP 查询,所以 - 我相信这会为我清理查询(对吗?)。
    猜你喜欢
    • 2023-03-05
    • 2016-09-17
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多