【问题标题】:DB query and quotes数据库查询和报价
【发布时间】:2010-08-21 19:56:56
【问题描述】:

如果我使用 http://site.com/index.php?page=45 一切看起来都不错(需要的页面加载)。

但是当我通过http://site.com/index.php?page=45'http://site.com/index.php?page=45"(在数字后添加引号)页面打印错误:

Unhandled Exception (Debug)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'
 ORDER BY datePub DESC
 LIMIT 10' at line 9
SELECT *, date_format(date, '%d') AS day, date_format(date, '%m') AS month, date_format(date, '%Y') AS year FRO...
// and paths to my scripts

对于黑客来说,这就像比萨啤酒。

如何过滤不需要的符号(如引号),这样页面就不会显示我的数据库查询(可能是我自己的错误文本)?

我已关闭错误报告,但它不是解决方案(不能在任何地方使用它)。

【问题讨论】:

    标签: php security url quotes


    【解决方案1】:
    $page = (int) $_GET['page'];
    

    $page = preg_replace('~[^0-9]~','',$_GET['page']);
    

    【讨论】:

    • 你是什么意思它没有帮助?显示你的代码,你是如何使用它的...转换为 int 将强制它被评估为一个 int,在数字之后砍掉任何东西。 preg_replace 将删除任何不是数字的东西。如果这些都没有帮助,那么您的问题还有更多。
    • (int) 类型将变量转换为整数。查找类型转换
    • >在数字之后很好,但是数字的中间或开头呢?它可以在那里使用。
    • 好吧,然后选择 preg_replace 选项。但是在那个时间点显然有人试图破解你,所以你想尝试将它解决到他们显然不想到达的某个页面,在第 1 页踢他们,或者对他们试图破解的事情做些什么你呢?
    【解决方案2】:

    类型转换 page 变量:

    可能的解决方案一:

    $page = (int) $_GET['page'];
    

    测试用例:

    $str = '45"';
    echo (int) $str;
    

    结果:

    45
    

    可能的解决方案 2:

    或者您可以使用is_numericctype_digit 函数拒绝此类无效值:

    if (!ctype_digit($_GET['page'])){
       die('Invalid page value !!');
    }
    else{
     // continue with the query...
    }
    

    可能的解决方案 3:

    您可以使用此正则表达式删除不需要的字符:

    $page = preg_replace("/[^0-9]+/", "", $_GET['page']);
    

    更新:

    对于文本,你应该使用mysql_real_escape_string函数。

    【讨论】:

    • 如果引号用在数字中间还是开头呢?
    • quote 也可以用于一些类似文本的变量,例如 ?type=news'。那怎么过滤呢?
    • @WorkingHard:在这种情况下,你应该考虑像我展示的其他方法。
    • 数字为真,类似文字的呢? :)
    • @WorkingHard:对于文本,使用mysql_real_escape_string函数。
    【解决方案3】:

    使用 (int)$_GET['page']。如果这不起作用,则您正在获取 url,这意味着您需要使用正则表达式。我不明白你为什么要抓取 URL,所以你应该没问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 2012-12-11
      • 2021-10-08
      • 2017-03-22
      • 2015-05-31
      相关资源
      最近更新 更多