Hola. tengo un script en el que acunetix scanner me detecta un fallo de sql inyection.
el script es de paginación, venía ya incluído en un software que estoy probando para aprender a programar, que es una vieja version de b2.
ya he probado el error y efettivamente salta un warning mysql.
basicamente la cuestion es que teniendo una url del tipo
http://url.com/secciones.php?cat=2&paged=X
donde x puede ser el numero de paginas de post publicados en una misma categoría.
pero que también es la puerta para el sql inyection.
entonces, lo que quiero es poder cerrar la puerta, pero aun no he sabido como asi ojala alguien pudiera orientarme.
si consideran que es mejor reemplazar ese script por uno mejor, pues asi lo hare, pero si tiene solución el fallo, pues mejor.
a continuacion pongo el scrpit. hay uno para anterior y otro para siguiente. solo pongo el de siguiente
gracias
saludos
Código PHP:
function next_posts($max_page = 0) { // original by cfactor at cooltux.org
global $_SERVER, $siteurl, $blogfilename, $p, $paged, $what_to_show, $pagenow;
global $querystring_start, $querystring_equal, $querystring_separator;
if (empty($p) && ($what_to_show == 'paged')) {
$qstr = $_SERVER['QUERY_STRING'];
if (!empty($qstr)) {
$qstr = preg_replace("/&paged=\d{0,}/","",$qstr);
$qstr = preg_replace("/paged=\d{0,}/","",$qstr);
} elseif (stristr($_SERVER['REQUEST_URI'], $_SERVER['SCRIPT_NAME'] )) {
if ('' != $qstr = str_replace($_SERVER['SCRIPT_NAME'], '',
$_SERVER['REQUEST_URI']) ) {
$qstr = preg_replace("/^\//", "", $qstr);
$qstr = preg_replace("/paged\/\d{0,}\//", "", $qstr);
$qstr = preg_replace("/paged\/\d{0,}/", "", $qstr);
$qstr = preg_replace("/\/$/", "", $qstr);
}
}
if (!$paged) $paged = 1;
$nextpage = intval($paged) + 1;
if (!$max_page || $max_page >= $nextpage) {
echo $pagenow.$querystring_start.
($qstr == '' ? '' : $qstr.$querystring_separator) .
'paged'.$querystring_equal.$nextpage;
}
}
}
function next_posts_link($label='pag. siguiente >>', $max_page=0) {
global $p, $paged, $result, $request, $posts_per_page, $what_to_show;
if ($what_to_show == 'paged') {
if (!$max_page) {
$nxt_request = $request;
if ($pos = strpos(strtoupper($request), 'LIMIT')) {
$nxt_request = substr($request, 0, $pos);
}
$nxt_result = mysql_query($nxt_request);
$numposts = mysql_num_rows($nxt_result);
$max_page = ceil($numposts / $posts_per_page);
}
if (!$paged) $paged = 1;
$nextpage = intval($paged) + 1;
if (empty($p) && (empty($paged) || $nextpage <= $max_page)) {
echo '<a href="';
echo next_posts($max_page);
echo '">'. htmlspecialchars($label) .'</a>';
}
}
}