osmcz / api

issue tracker for guidepost api
0 stars 1 forks source link

Znak # v názvu souboru způsobí, že soubor nelze zobrazit #46

Closed mkyral closed 7 years ago

mkyral commented 7 years ago

Uživatel nahrál soubor pojmenovaný VO 493 2 2015.07.10#56 Pod Boubínem 1352 m.jpg. Znak '#' v názvu způsobil, že se na soubor nelze odkázat. Server vrátí chybu:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /img/guidepost/VO 493 2 2015.07.10 was not found on this server.</p>
<hr>
<address>Apache/2.2.22 (Debian) DAV/2 SVN/1.6.17 PHP/5.4.45-0+deb7u8 mod_ssl/2.2.22 OpenSSL/1.0.1t mod_apreq2-20090110/2.8.0 mod_perl/2.0.7 Perl/v5.14.2 Server at api.openstreetmap.cz Port 80</address>
</body></html>
mkyral commented 7 years ago

V github.com/vvito/chyrp jsem našel tuhle pěknou funkci:

/**
  * Function: sanitize
  * Returns a sanitized string, typically for URLs.
  *
  * Parameters:
  *     $string - The string to sanitize.
  *     $force_lowercase - Force the string to lowercase?
  *     $anal - If set to *true*, will remove all non-alphanumeric characters.
  *     $trunc - Number of characters to truncate to (default 100, 0 to disable).
  */
################################################################################
function sanitize($string, $force_lowercase = true, $anal = false, $trunc = 100) {
    $strip = array("~", "`", "!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "_", "=", "+", "[", "{", "]",
                    "}", "\\", "|", ";", ":", "\"", "'", "&#8216;", "&#8217;", "&#8220;", "&#8221;", "&#8211;", "&#8212;",
                    "—", "–", ",", "<", ".", ">", "/", "?");
    $clean = trim(str_replace($strip, "", strip_tags($string)));
    $clean = preg_replace('/\s+/', "-", $clean);
    $clean = ($anal ? preg_replace("/[^a-zA-Z0-9]/", "", $clean) : $clean);
    $clean = ($trunc ? substr($clean, 0, $trunc) : $clean);
    return ($force_lowercase) ?
        (function_exists('mb_strtolower')) ?
            mb_strtolower($clean, 'UTF-8') :
            strtolower($clean) :
        $clean;
}

Ale nejsem si jist, zda je dobré ji nasadit - hrozí vznik duplicit. Když někdo nahraje stejný soubor podruhé, tak může mít jiné jméno a projde tak přes kontrolu.

Možná bude statšit jen přidat do kontroly #, závorky a další rezervované znaky .

walley commented 7 years ago

duplicity by se meli kontrolovat taky, jmeno souboru je hlavni identifikator, zadne duplicity nastat nemuzou

mkyral commented 7 years ago

Ne. Myslím to tak, že když někdo nahrál soubor s nějakým podivným jménem, tak teď jej bude moci nahrát znova, protože se ta jména nebudou rovnat.

Ale těch případů asi nebude moc, pokud vůbec nejaký.

walley commented 7 years ago

ano, to je pravda.

nicmene v tomto pripade by se tak stat nemelo protoze: fotka se puvodne jmenovala (redakcne zkraceno:) a#b.jpg upravil sem to na ab.jpg pri pokusu nahrat to znovu se to automaticky upravi na ab.jpg a pri odmazani mrizky je z toho zase ab.jpg takze v tomhle pripade by se muselo jmeno uplne predelat aby se to zase uploadlo.

mkyral commented 7 years ago

A můžeš teda smazat ty duplicity?

http://api.openstreetmap.cz/table/id/12082 http://api.openstreetmap.cz/table/id/12084

http://api.openstreetmap.cz/table/id/12083 http://api.openstreetmap.cz/table/id/12085

Díky

walley commented 7 years ago

jo tak ono to tam uz 2x je, to sem nevedel, kterej nazev teda nechat, ten kratsi?

mkyral commented 7 years ago

Ono to je jedno. Hoď si korunou ;-)

walley commented 7 years ago

done