LupusMic

  • Signature
    Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
  • Site web
  • Nombre de sujets
    26
  • Nombre de messages
    1 684
  • Nombre de commentaires
    4
  • Nombre de news
    Aucune
  • Niveau en PHP
    Gourou

Ses derniers messages sur les forums

LupusMic
le 04/10/2009 à 03:25
* Editer le message * Accepter cette réponse * Rapporter le message * Répondre en citant le message Récupérer BDD d'un site via un XML
Tu as plusieurs outils disponible pour parser du XML : SimpleXML et DOM. Le premier est plus simple pour la consulation.

Ensuite, il suffit d'écrire un code qui parcours les nœuds en les traduisant en SQL.

Même s'il est conseillé de décoreler le code de lecture de la classe de l'insertion en base. Mais si tu es débutant, ça peut s'avérer assez difficile.

Et pourquoi ne faites-vous pas appel à un développeur professionnel ? C'est, si j'ai bien compris, votre cœur de métier.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 04/10/2009 à 03:18
Problème avec File Field
Je ne sais pas quel navigateur pourri vous utilisez (en fait, j'ai ma petite idée), mais le mien ne prend pas en compte la valeur fournie dans un élément input de type file. Pour des raisons évidentes de sécurité.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 03/10/2009 à 09:59
Chekced = true
Il faut que l'input correspondant au radio button activé ait l'attribut checked.

<input type='radio'
name='option'
<?php if(!empty($_GET['option']) && $_GET['option'] == 1) echo 'checked=\'checked\'' ?>
value='1' />
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 01/10/2009 à 18:38
affichage des résultats d'une requête SQL
Je te présente tout de même mes excuses. Avec le recul, mon premier message était un peu sec. Parce que bon, il faut noter que c'est difficile de créer des composants réutilisables.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 01/10/2009 à 04:26
affichage des résultats d'une requête SQL
La classe est aussi blindée de trous.

<?php
define ("CURRENT_PAGE", basename($_SERVER['PHP_SELF'])); // page courante


$_SERVER['PHP_SELF'] est une donnée provenant de l'extérieur. Il faut donc la contrôler plus que ça. Sinon, il peut y avoir desinjections d'HTML et de Javascript.

<?php
private function _getUrlOrdreListe($a_colone,$a_sens)

{

$lien = $_SERVER['QUERY_STRING'];

if (strlen($this->m_arguments)>0)

$lien .= ( strlen($lien)>0 ? "&" : "" ) . $this->m_arguments;

$lien = preg_replace("/&?ord=.*&sens=.*/","",$lien);

$lien .= (strlen($lien)>0 ? "&" : "") . "ord=".$a_colone."&sens=".$this->_setSens($a_sens,$a_colone);

return (CURRENT_PAGE."?".$lien);

}


Il manque les nombreux urlencode ou urldecode nécessaires dans la reconstruction de la query string.

L'expression régulière est boguée. Je sens les URL dans les quelles tu vas perdre des paramètres HTTP. En règle générale, il ne faut pas utiliser le point.

Une meilleure expression régulière serait :

'^?(?:ord=(?<ord>:[^&]*)|sens=(?<sens>:[^&]*)|(?:\w+=\w+))*$'

À partir de la fonction headList, tu fournis tout un tas de fonctions qui génèrent du HTML. Dans aucune d'entre elles tu ne protèges correctement les données que tu intègres au HTML avec htmlentities
ou htmlspecialchars.

D'ailleurs tu n'utilises jamais preg_escape.

Les points suivants ne sont pas à proprement parler des problèmes de sécurité. Ils ont plus traits ux performances et aux bonnes pratiques.

Ton constructeur fait beaucoup d'initialisations alors qu'elles pourraient être faites dans la définition de la classe, au niveau de la définition des attributs.

Tu places les méthodes et variables public en fin de définition de la classe. Une bonne pratique consiste plutôt à placer tout ce qui est public en tête, pour faciliter l'adoption de la classe : l'utilisateur de la classe n'a pas besoin de connaître les détails intimes de la classe. Mais je te concède que c'est essentiellement esthétique.

Les méthodes telles que setPas() écrivent directement dans la session. Pourquoi ne pas le faire à la destruction de l'objet ?

Je remarque aussi pas mal de choses qui peuvent être écrites plus simplement, sans nuire à l lisibilité.

Par exemple, if($variable == true) se remplace par if($variable). if(isset($variable) && strlen($variable) > 0) se remplace par if(!empty($variable)). La fonction empty peut s'appliquer sur les index de tableau indéfinis. Pareil pour if (count($matches[1])>0) qui peut être écrit if(!empty($matches[1])).

Appeler exit au milieu d'une classe, c'est mal. Surtout pour une condition invalide aussi ridicule qu'une page négative. Dans ce genre de cas, il vaut mieux forcer un nombre de page, ou lever une exception si aussi catastrophique. L'usage d'une exception permet à l'utilisateur de la classe d'intégrer plus facilement cette dernière. La pagination n'est pas forcément ce qu'il y a de plus important dans le déroulement de l'application développée avec ta classe.
Dans tout les cas, saupoudrer son code d'appels aux fonctions d'assassinat du processus n'est jamais une bonne idée, car cela rend le déboguage difficile et pénible.

Il y a aussi une mauvaise pratique au niveau de la génération de ton HTML, concernant le style. Tu imposes un style particulier au code produit, ce qui rend impossible l'intégration à une charte graphique, sans devoir modifier massivement le code de la classe. Il serait plus pertinent d'utiliser l'attribut class des éléments. Mais en fait, il y a la un gros problème d'architecture de ta classe.

Car malheureusement, comme beaucoup, tu crois qu'une classe est un module. C'est-à-dire que tu concentre toute l'intelligence de l'application dans une seule classe qui sait tout faire : gestion de l'URL, gestion de de la persistance des données, génération du code HTML, gestion du comportement, etc. Tout ces concepts devraient être encapsulés dans leurs propres classes, afin de permettre une meilleure modularisation, en permettant la personnalisation des composant. Par exemple, en découplant la création de la sortie HTML, ça permet à un utilisateur de ton système de dériver la classe et de personnaliser le comportement. Par exemple, il peut vouloir générer du XHTML2 ou de l'HTML5. Une autre classe serait encore la gestion de l'URL. Comment font ls utilisateurs qui jouent de l'URL Rewriting pour utiliser ta classe ?

Quand j'affirme qu'un code n'est pas sécurisé, j'ai raison dans 90% des cas.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 30/09/2009 à 03:53
affichage des résultats d'une requête SQL
À la rigueur, l'emploi de mots en français dans du code ça peut passer. Mais les trous de sécurité qu'il y a un peu partout, ça me défrise.

Tu n'as jamais entendu parler de htmlentities ou de mysqli::real_escape_string ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 30/09/2009 à 00:03
Outil ETL en langue étrangere
Ça m'étonnerait fortement que le logiciel produit des « scripts java ».
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 30/09/2009 à 00:01
Modification de format de date
La fonction date est aussi utile. Elle permet de formater une date à partir d'un timestamp, en prenant en compte la localistion.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 23/09/2009 à 18:55
Problème envoie de mails
Rassures-moi, ce n'est pas en production ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LupusMic
le 19/09/2009 à 02:25
Piratage
Peut-être que la vulnérabilité se trouve dans les fichiers inclus, à commencer par header.php, menu.php ou footer.php.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
LoadingChargement en cours