Changeset 50029 in spip-zone


Ignore:
Timestamp:
Jul 27, 2011, 9:12:46 PM (10 years ago)
Author:
cedric@…
Message:

Upload d'un svg : remplacer le test sur le statut auteur par un appel a autoriser(televerser,script) qui peut etre deroge dans un cron
+ ref biblio sur la purification SVG

Par ailleurs, si on sanitize SVG pour eviter les scripts quand l'auteur n'est pas de confiance, il faut en faire autant sur du HTML
=> sanitization du HMTL sur le meme principe, dans les memes conditions

(bruno, emmanuel)

Location:
_core_/plugins/medias
Files:
2 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _core_/plugins/medias/metadata/html.php

    r49953 r50029  
    1212
    1313if (!defined('_ECRIRE_INC_VERSION')) return;
     14include_spip('inc/autoriser');
    1415
    1516/**
    16  * Determiner les dimensions d'un svg, et enlever ses scripts si necessaire
     17 * enlever les scripts de html si necessaire
     18 * on utilise safehtml
    1719 *
    1820 * @param string $file
    1921 * @return array
    2022 */
    21 // http://doc.spip.org/@traite_svg
    22 function medata_svg_dist($file){
     23function medata_html_dist($file){
    2324        $meta = array();
    2425
    25         $texte = spip_file_get_contents($file);
    26 
    27         // Securite si pas admin : virer les scripts et les references externes
     26        // Securite si pas autorise : virer les scripts et les references externes
    2827        // sauf si on est en mode javascript 'ok' (1), cf. inc_version
    2928        if ($GLOBALS['filtrer_javascript'] < 1
    30         AND $GLOBALS['visiteur_session']['statut'] != '0minirezo') {
     29          AND !autoriser('televerser','script')) {
     30                $texte = spip_file_get_contents($file);
    3131                include_spip('inc/texte');
    3232                $new = trim(safehtml($texte));
    3333                // petit bug safehtml
    34                 if (substr($new,0,2) == ']>') $new = ltrim(substr($new,2));
    35                 if ($new != $texte) ecrire_fichier($file, $texte = $new);
     34                if ($new != $texte) ecrire_fichier($file, $new);
    3635        }
    37 
    38         $width = $height = 150;
    39         if (preg_match(',<svg[^>]+>,', $texte, $s)) {
    40                 $s = $s[0];
    41                 if (preg_match(',\WviewBox\s*=\s*.\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+),i', $s, $r)){
    42                         $width = $r[3];
    43                         $height = $r[4];
    44                 } else {
    45         // si la taille est en centimetre, estimer le pixel a 1/64 de cm
    46                 if (preg_match(',\Wwidth\s*=\s*.(\d+)([^"\']*),i', $s, $r)){
    47                         if ($r[2] != '%') {
    48                                 $width = $r[1];
    49                                 if ($r[2] == 'cm') $width <<=6;
    50                         }
    51                 }
    52                 if (preg_match(',\Wheight\s*=\s*.(\d+)([^"\']*),i', $s, $r)){
    53                         if ($r[2] != '%') {
    54                                 $height = $r[1];
    55                                 if ($r[2] == 'cm') $height <<=6;
    56                         }
    57                 }
    58            }
    59         }
    60         $meta['largeur'] = $width;
    61         $meta['hauteur'] = $height;
     36       
    6237        return $meta;
    6338}
  • _core_/plugins/medias/metadata/svg.php

    r44460 r50029  
    1212
    1313if (!defined('_ECRIRE_INC_VERSION')) return;
     14include_spip('inc/autoriser');
    1415
    1516/**
    1617 * Determiner les dimensions d'un svg, et enlever ses scripts si necessaire
     18 * on utilise safehtml qui n'est pas apropriee pour ca en attendant mieux
     19 * cf http://www.slideshare.net/x00mario/the-image-that-called-me
     20 * http://heideri.ch/svgpurifier/SVGPurifier/index.php
    1721 *
    1822 * @param string $file
     
    2529        $texte = spip_file_get_contents($file);
    2630
    27         // Securite si pas admin : virer les scripts et les references externes
     31        // Securite si pas autorise : virer les scripts et les references externes
    2832        // sauf si on est en mode javascript 'ok' (1), cf. inc_version
    2933        if ($GLOBALS['filtrer_javascript'] < 1
    30         AND $GLOBALS['visiteur_session']['statut'] != '0minirezo') {
     34          AND !autoriser('televerser','script')) {
    3135                include_spip('inc/texte');
    3236                $new = trim(safehtml($texte));
  • _core_/plugins/medias/plugin.xml

    r49925 r50029  
    33        <auteur>Collectif SPIP, Cedric Morin &amp; Romy Duhem-Verdiere pour la mediatheque</auteur>
    44        <icon>prive/themes/spip/images/portfolio-32.png</icon>
    5         <version>2.0.5</version>
     5        <version>2.1.0</version>
    66        <version_base>0.14.0</version_base>
    77        <etat>test</etat>
Note: See TracChangeset for help on using the changeset viewer.