Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/07/2011, 15:35
Tooj
 
Fecha de Ingreso: noviembre-2009
Mensajes: 64
Antigüedad: 15 años
Puntos: 1
sql inyection en function. cómo resolver

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($request0$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>';
        }
    }