Nueva opción "menéame diario" (daily) #27

Open
wants to merge 4 commits into
from

Conversation

Projects
None yet
2 participants
@jordisan
Contributor

jordisan commented Mar 29, 2016

Modificar la página "populares" para que pueda verse una determinada fecha (hemeroteca), en formato de diario tradicional; ver ejemplo en http://meneame.jordisan.net/topstories.php?date=2016-01-25&format=daily

Inicialmente no habría cambios visibles si no se accede a la URL con esos parámetros, así que se podrían optimizar los cambios antes de "hacerla pública" (por ejemplo, dándole una URL propia y añadiéndo un enlace al submenú).

@ghost

This comment has been minimized.

Show comment
Hide comment
@ghost

ghost Jun 5, 2016

¡Hola amigo!
Ese código tiene vulnerabilidades, un abrazo.

ghost commented Jun 5, 2016

¡Hola amigo!
Ese código tiene vulnerabilidades, un abrazo.

@jordisan

This comment has been minimized.

Show comment
Hide comment
@jordisan

jordisan Jun 9, 2016

Contributor

@Dimitrix10 , ¿podrías ser un poco más específico?
¿Dónde está la vulnerabilidad?

Contributor

jordisan commented Jun 9, 2016

@Dimitrix10 , ¿podrías ser un poco más específico?
¿Dónde está la vulnerabilidad?

// Select a month and year
if (!empty($_GET['month']) && !empty($_GET['year']) && ($month = (int) $_GET['month']) > 0 && ($year = (int) $_GET['year'])) {
$sql = "SELECT SQL_CACHE link_id, link_votes as votes FROM links, sub_statuses WHERE id = ".SitesMgr::my_id()." AND YEAR(date) = $year AND MONTH(date) = $month AND status = 'published' AND link = link_id ORDER BY link_votes DESC ";
$time_link = "YEAR(date) = $year AND MONTH(date) = $month AND";
+} else if (!empty($date)) {
+ $sql = "SELECT SQL_CACHE link_id, link_votes as votes FROM links, sub_statuses WHERE id = ".SitesMgr::my_id()." AND DATE(date) = '$date' AND status = 'published' AND link = link_id ORDER BY link_votes DESC ";

This comment has been minimized.

@sergioregueira

sergioregueira Dec 26, 2016

No se está validando el parámetro date, así que es susceptible de SQL injection.

Por ejemplo, si envías el siguiente valor ' OR 2 != '1 la query resultante incluiría la siguiente cláusula WHERE:

[...] AND DATE(date) = '' OR 2 != '1' AND status = 'published' [...]

De primeras lo único que sucedería es que no se aplicaría ningún filtro por fecha, pero se podría aprovechar para hacer JOINs con otras tablas y adivinar así correos electrónicos, emails o ips.

@sergioregueira

sergioregueira Dec 26, 2016

No se está validando el parámetro date, así que es susceptible de SQL injection.

Por ejemplo, si envías el siguiente valor ' OR 2 != '1 la query resultante incluiría la siguiente cláusula WHERE:

[...] AND DATE(date) = '' OR 2 != '1' AND status = 'published' [...]

De primeras lo único que sucedería es que no se aplicaría ningún filtro por fecha, pero se podría aprovechar para hacer JOINs con otras tablas y adivinar así correos electrónicos, emails o ips.

This comment has been minimized.

@jordisan

jordisan Dec 26, 2016

Contributor

Sí, supongo que antes se podría hacer algo como esto para forzar que sea un formato de fecha:

$date = date('Y-m-d', DateTime::createFromFormat('Y-m-d', $date)->getTimestamp());

pero vamos, de todas formas no me han dicho nada sobre este pull y ya no creo que lo incorporen, así que no voy a dedicarle más tiempo.

Gracias.

@jordisan

jordisan Dec 26, 2016

Contributor

Sí, supongo que antes se podría hacer algo como esto para forzar que sea un formato de fecha:

$date = date('Y-m-d', DateTime::createFromFormat('Y-m-d', $date)->getTimestamp());

pero vamos, de todas formas no me han dicho nada sobre este pull y ya no creo que lo incorporen, así que no voy a dedicarle más tiempo.

Gracias.

@sergioregueira

Ver comentario sobre SQL injection.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment