[PHP] Script de news

Hello, j’ai eu quelques problèmes de sécurité avec mon posteur de news que j’ai codé moi même en PHP, je recherche donc un très bon script de news, n’ayant pas le temps de le recoder moi même.

Je recherche un bon script fiable, sécurisé surtout ^^

Si vous avez de bons scripts merci de m’en parler :wink:

Bonne journée :slight_smile:

Le seul que je connaisse est Cutenews :confused: !

Il est en anglais :frowning:

Personne ne connais de bon scripts de news français, sécurisé et fiable ?

Hello, j’ai trouvé un bon script de news, qui s’apelle CapNews, mais le seul problème est que le HTML n’est pas pris en compte dans la rédaction d’une news :

Voir la Démo sur mon site

Je vous ai mis a disposition les fichiers du script :

Admin.php (format TXT)

Index.php (format TXT)

J’ai omis volontairement Config.php et le fichier CSS car il ne vous apprendra rien.

Si vous pouviez me dire quels élémetns du code a supprimer pour pouvoir insérer du HTML (lien, gras) dans ma news ce serait sympa.

Merci bien :slight_smile:

a premiere vu je dirais
fonction htmlspecialchars() : qui convertit les caractères spéciaux en entités HTML
et
fonction htmlentities() : qui convertit tous les caractères éligibles en entités HTML

mais il y en a peu etre d’autre je ne suis pas super pro

En général htmlspecialchars ou htmlentities (un nom dans le genre)

Cela se trouve dans Admin.php, voici les endroits ou il y a ces deux caractères :

Ligne 14 :

if(isset($_POST)) {
    foreach($_POST as $k => $v) {
        $_POST[$k] = trim(htmlspecialchars($v));
    }
}
if(isset($_GET)) {
    foreach($_GET as $k => $v) {
        $_GET[$k] = trim(htmlspecialchars($v));
    }
}

Et je l’ai 3 fois sur les lignes 67 environ :

            <form action="admin.php" method="post">
            <strong>Modification d\'une news :</strong><br /><br />
            Titre<br />
            <input type="text" name="titre" maxlength="120"
            value="'.htmlentities($data['titre']).'"/><br />
            Auteur<br />
            <input type="text" name="auteur" maxlenght="60"
            value="'.htmlentities($data['auteur']).'" /><br />
            Date de la News<br />
            <input type="text" name="date" size="10" value="'.$data['date'].'" />
            News (sans html)<br />
            <textarea name="news" cols="40"
            rows="6">'.htmlentities($data['news']).'</textarea>
            <br /><input type="submit" value="Valider" />
            <input type="hidden" name="newsId" value="'.$_GET['edit'].'" />
            <input type="hidden" name="send" value="update" />
            </form>

Que dois-je supprimer ?

logiquement la fonction a supprimer devrait se trouver sur la page d’affichage.
Je pense que si on mets un coup d’htmlentities avant l’enregistrement, à la lecture il devrait ressortir sans. A confirmer.

A l’index.php, aucun htmlentities ou specialchars :confused:

Je pense qu’il faut supprimer un élément dans admin.php, la ou j’ai cité, mais je vois pas quoi et comment le supprimer.

Si vous pouviez m’aider, merci bien :slight_smile:

Bonne journée :slight_smile:

Exact, reste justement à savoir si les données enregistrées sont “codées” html, ou si la conversion se fait à l’affichage.

if(isset($_POST)) {
   foreach($_POST as $k => $v) {
       $_POST[$k] = trim($v);
   }
}
if(isset($_GET)) {
   foreach($_GET as $k => $v) {
       $_GET[$k] = trim($v);
   }
}
            <form action="admin.php" method="post">
           <strong>Modification d\'une news :</strong><br /><br />
           Titre<br />
           <input type="text" name="titre" maxlength="120"
           value="'.$data['titre'].'"/><br />
           Auteur<br />
           <input type="text" name="auteur" maxlenght="60"
           value="'.$data['auteur'].'" /><br />
           Date de la News<br />
           <input type="text" name="date" size="10" value="'.$data['date'].'" />
           News (sans html?#41;<br />
           <textarea name="news" cols="40"
           rows="6">'.$data['news'].'</textarea>
           <br /><input type="submit" value="Valider" />
           <input type="hidden" name="newsId" value="'.$_GET['edit'].'" />
           <input type="hidden" name="send" value="update" />
           </form>

Je crois que le problème est réglé, j’ai remplacé le premier code par :

if(isset($_POST)) {
    foreach($_POST as $k => $v) {
        $_POST[$k] = trim($v);
    }
}
if(isset($_GET)) {
    foreach($_GET as $k => $v) {
        $_GET[$k] = trim($v);
    }
}

Et ca marche :slight_smile:

Par contre, pourriez vous me dire si mon code est bien sécurisé ?

Car le but de ce script, je l’ai pris car il me parraissait bien, mais pour les failles de sécurité je ne sais pas…

N’oublies pas le code que je t’ai montré pour la modification d’articles, sinon quand tu vas modifier il va te bloquer le html.

Pour ce qui est des failles, j’ai pas le temps de regarder le code source, mais là tu créé une faille assez importante en enlevant le bloquage du html. Le mieux serait de se créer une fonction utilisateur basique avec des str_replace et en te créant un langage genre bbcode.

Je m’explique :

function mycode($string)
{
  $string=str_replace('[b]','<b>',$string);
  $string=str_replace('[/b]','</b>',$string);
}

Ainsi ton texte posté de la forme "

Salut, [b]News N°1[/b]

" sera en gras, et après tu laisses le htmlentities et tu rajoute même voir la fonction qui supprime tout html (strip_tags()).

Sinon après tu peux utiliser cette fonction strip_tags() et indiquer les seuls codes html que tu autorises.

Mais si l’accès a Admin.php est bien sécurisé (htaccess et htpasswrd), il n’y a aucune faille exploitable directement ?

Si, lors de son utilisation. Le fait d’enregistrer et d’afficher directement du HTML peut etre une faille exploitable par l’utilisateur.

+1. Le soucis est simplement que tu permets à un posteur de news d’exploiter ta faille. Après si l’accès t’es uniquement réservé au postage, pas de soucis à part si tu te fais piquer ton mot de passe…

Oui, je suis le seul a pouvoir l’utiliser, donc aucun soucis :wink:

Encore merci :slight_smile:

Bonne soirée

Bonsoir, je reviens sur le script de news, car ceci :

print ''.$data['date'].'';

affiche ca : 2007-05-26

Le problème, c’est le format de la date. Comment modifier pour que ce soit 25.05.2007 quis 'affiche ?

La date est stockée sur une base Mysql.

Bonne nuit :slight_smile:

Il y a une méthode un peu lourde mais efficace pour modifier le format d’une date dans une requetes SQL.

Il suffit de faire :

SQL
[color=blue;font-weight:bold]SELECT[/color] date_format(date,'d.m.Y') as datefr FROM matable

Quand est ce qu’il faut que j’éxécute cette requête ?

Au moment d’afficher la news ou juste après je l’ai postée ?

C’est une requête d’affichage, puisque nous utilisons SELECT. Il faut donc l’utiliser au moment de l’affichage, pour récupérer la bonne date. Par contre, ce que DarkCham a ommis de préciser, c’est qu’il te faut modifier egalement l’autre requete, ainsi que la variable qui contient la date dans l’affichage, afin de la remplacer par la nouvelle date.