New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wants to merge 4 commits into
base: master
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.

ghost commented Jun 5, 2016

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

@jordisan

This comment has been minimized.

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.

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.

@sergioregueira

Ver comentario sobre SQL injection.

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