直接从POST请求中获取的‘Pages’和‘POSTS_PER_PAGE’参数是否存在安全问题?

时间:2017-01-11 作者:ptf

我想知道这是否会带来任何安全风险:

$current_page = $_POST[\'page\'];
$posts_per_page = $_POST[\'posts_per_page\'];

$result = new \\WP_Query([
    \'posts_per_page\' => $posts_per_page,
    \'paged\' => ++$current_page,
    \'post_type\' => \'post\'
]);
自从我posts_per_pagepaged 直接从POST xhr请求,用户可以输入他们想要的任何值。

我明白了here 那个posts_per_pagepaged 列为int, 但在这种情况下,是否有人可以使用SQL注入?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

目前,我们在WP_Query 类别(参见here):

$q[\'posts_per_page\'] = (int) $q[\'posts_per_page\'];
if ( $q[\'posts_per_page\'] < -1 )
    $q[\'posts_per_page\'] = abs($q[\'posts_per_page\']);
elseif ( $q[\'posts_per_page\'] == 0 )
    $q[\'posts_per_page\'] = 1;
以及here:

if ( isset($q[\'page\']) ) {
    $q[\'page\'] = trim($q[\'page\'], \'/\');
    $q[\'page\'] = absint($q[\'page\']);
}
而不是针对每个用户输入运行查询,希望core可以在某个地方处理它,validate 它会提前执行,并且只有在类型和范围正确时才运行查询。您可以在此处检查正整数,并设置允许的最大值,例如100,因为您不希望允许可能严重降低整个站点速度的值,例如999999。

相关推荐

Security updates to 3.3.2

我知道所有的安全更新都很重要,但从1到10的范围来看,从3.1.3升级到3.3.2有多重要。我有一些网站需要升级,但主机将我锁定在一个旧版本的php中,限制我使用3.1.3。我目前正在运行php的5.2.3版本。谢谢Bart