3

我给出了一个分页问题:

$num_por_pagina = 5; 
$paginac = $_GET[paginac]; 
if (!$paginac) {
   $paginac = 1;
}

我想只取整数以避免 PHP / SQL 注入

例如访问:

http://www.mysite.com/index.php?paginac=3.3http://www.mysite.com/index.php?paginac=3,3

结果 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 7 行的 '4.6, 2' 附近使用正确的语法

从:

访问 www.mysite.com/index.php?paginac=3.3 或 www.mysite.com/index.php?paginac=3,3

结果错误,此页面未激活。

4

5 回答 5

1

缺少引号

$paginac = $_GET["paginac"];

www.mysite.com/index.php?page=3.3

您将“page”作为获取参数传递,捕获该参数而不是“paginac”

$paginac = $_GET["page"];

如果您在 mysql 中遇到错误,请也发布该代码。

于 2012-07-30T19:27:23.853 回答
1

如果您知道您将收到一个号码(或者应该收到),您可以将其作为第一道防线:

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

page代表一个常数。您应该使用引号作为键。

如果您收到非数字字符串,您只需请求第 0 页即可。

其次,您将需要阅读有关如何正确防止注射的信息,而不是在大多数情况下仅使用一些技巧来使其正确。

于 2012-07-30T19:28:13.650 回答
1

尝试

$paginac = intval($_GET[paginac]);
于 2012-07-30T19:29:01.190 回答
0

看起来您的测试似乎is_numeric()仍然允许编写和执行 SQL 语句,这会引发您的错误。

确保如果 GET 变量不是数字,则查询不会执行。

此外,在访问关联数组索引时使用引号。如果你通过 get 传递paginac

$paginac = $_GET['paginac'];

如果您通过 get传递页面:

$paginac = $_GET['page'];
于 2012-07-30T19:27:12.380 回答
-1

我会做这样的事情:

if ($paginac < 2)
{
    $paginac = 1;
}

如果变量是字符串,PHP 会将其强制转换为 1,因此此方法会将任何文本强制转换为 1,并且还有助于防止出现负数

于 2012-07-30T19:27:22.463 回答