【问题标题】:Query doesn't work with amp inside URL查询不适用于 amp inside URL
【发布时间】:2011-10-15 00:23:45
【问题描述】:

让我尽可能解释清楚。

我有一个名为 funcs.php 的 PHP 文件,其中正是这个 PHP 代码:

$q = $_GET["q"];

$sql = "SELECT * FROM bl_zrify WHERE Name = '".$q."'";

$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
  {

  if ($row['State'] == '') {
    $SchoolState = 'Unknown';
  }
  else if ($row['State'] == 'AL') {
    $SchoolState = 'Alabama';
  } 
  else if ($row['State'] == 'AK') {
    $SchoolState = 'Alaska';
  } 
  else if ($row['State'] == 'AZ') {
    $SchoolState = 'Arizona';
  }
  else if ($row['State'] == 'AR') {
    $SchoolState = 'Arkansas';
  }

  print 'This school is in';
  print $SchoolState;
  }

当我在浏览器中调用时:

网址示例 => http://www.domain.com/funcs.php?q=ABRAHAM BALDWIN AGRICULTURAL COLLEGE

它正常工作并返回 => 这所学校在阿拉巴马州

但是,当我在浏览器中调用任何包含 & (&) 的 URL 时,将根本无法工作:

url 示例 => http://www.domain.com/funcs.php?q=BRYANT 和 STRATTON 商学院 - 布法罗

我不知道为什么,但由于某种原因,当 URL 中有 amp (&) 时我没有得到任何结果,请帮助!

【问题讨论】:

  • 在查询中使用传递的参数是一种非常糟糕的做法。你至少应该逃避它。
  • Little Bobby Tables 将拜访您。
  • Aleks 是对的 - 你要求被该代码破解
  • :-) Bobby 真是个好孩子
  • 进入表格并输入以下学校名称:Foo'); DROP TABLE bl_zrify; -- 然后阅读bobby-tables.com

标签: php mysql get


【解决方案1】:
funcs.php?q=BRYANT & STRATTON BUSINESS INSTITUTE - BUFFALO

您正在传递两个变量。做一个var_dump($_GET);,你会看到。

你的意思可能是:

funcs.php?q=BRYANT+%26+STRATTON+BUSINESS+INSTITUTE+-+BUFFALO

要在 URL 中传递参数值,它们需要正确的编码。也称为 url 编码。 &是特殊字符,需要写成%26,空格也是特殊字符,可以写成+%2b。也称为百分比或三元组编码。

执行此操作的 PHP 函数是:urlencodeDocs

在任何情况下,您都需要对 SQL 查询的搜索词进行正确编码,否则您会允许其他人更改 SQL 查询并执行诸如搜索超出您想要的范围之类的操作,甚至删除您的数据库。这比丢失一半变量的值更严重。

请参阅:Best way to stop SQL Injection in PHP

【讨论】:

  • 好的,我修改了代码,使得:funcs.php?q=BRYANT+%26+STRATTON+BUSINESS+INSTITUTE+-+BUFFALO 但这仍然没有返回任何东西,而:funcs.php?q=BRAHAM+BALDWIN+AGRICULTURAL+COLLEGE 正常返回结果!
  • 检查您的数据库查询。它可能只匹配一个空记录集。看看为什么不对。进行正确的 HTTP 查询并不意味着数据库查询也正确。
【解决方案2】:

'&' 分隔 URL 参数。您的第二个查询有一个等于“BRYANT”的参数q 和一个没有值的参数STRATTON BUSINESS…

【讨论】:

    猜你喜欢
    • 2022-12-19
    • 2018-08-18
    • 2023-03-08
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2021-02-19
    • 2020-09-06
    • 2013-08-11
    相关资源
    最近更新 更多