Sistema de quote en SMF querys

Iniciado por yasión, 25 Noviembre 2009, 23:30 PM

0 Miembros y 1 Visitante están viendo este tema.

yasión

Pues con la excusa de la búsqueda del XSS he estado mirando algunas líneas de código de SMF2.0, y resulta que de PHP se más bién poco así que si alguien me puede explicar esto lo agradeceré.
En la Wiki del smf2-review dice:

CitarEs dificil hacer inyecciones SQL porque ahora ya usan un sistema de quote...

¿A que se refiere esto? Lo que yo he visto en las consultas es que usan las funciones de $smcFunc. Por ejemplo:

$smcFunc['db_query'] (identifier, query, values, connection)
$where = 'member_name = {string:member_name}';
$where_params['member_name'] = $_POST['user'];
$request = $smcFunc['db_query']('', '
     SELECT id_member, real_name, member_name, email_address, is_activated, validation_code, lngfile, openid_uri, secret_question
     FROM {db_prefix}members
     WHERE ' . $where . '
     LIMIT 1',
     array_merge($where_params, array())
);


Que hace {string:member_name}? Supongo que convertirá a string $_POST['user'], digo yo que equivaldrá a algo así:

WHERE member_name='.$_POST['user']

El caso es que no veo que mire el contenido en ningún sitio, con que supongo que lo estará haciendo en la parte de {string:variable}...  Cualquier cosa que me cuenten me sirve porqué tengo muy poca idea...  :huh:

Bueno, y luego pasa $request a otra función de $smcFunc, realiza la consulta y etcétera...

Gracias por adelantado!!  ;D

WHK

Lo que quiere decir es que antes de procesar cada query lo pasa por quotes (no siempre)

Código (php) [Seleccionar]
$where = 'member_name = {string:member_name}';
$where_params['member_name'] = $_POST['user'];
echo '
     SELECT id_member, real_name, member_name, email_address, is_activated, validation_code, lngfile, openid_uri, secret_question
     FROM {db_prefix}members
     WHERE ' . $where . '
     LIMIT 1'.array_merge($where_params, array());
exit;


Prueba con eso y verás como queda la query.

Hay algunos casos en que el filtro de quotes no se respeta como en dos casos de dos inyecciones sql que tiene smf actualmente.