Sécurité de base pour un site

Répondre
jackbocar
le 03/10/2007 à 19:37
jackbocar
Bonjour,

Une question qui me taraude depuis assez longtemps, pour ce qui est de la sécurité de base d'un site, il faut :
HTMLENTITE pour insérer dans la table, mais sont-ils vraiment utiles si c'est le webmaster seul qui met à jour le site.

Ce qui veut dire personne autre que lui place des news, des textes ou tout autres, pour les membres, c'est lui qui créait le mot de passe en SH1 et l'envoie au membre.

En fait les membres n'ont que le droit de lire.

Faut-il tout de même sécuriser les script du genre :
<?php
$result = $conn->query("SELECT id, nom, dep FROM table WHERE id='25' ORDER BY nom ASC");
while ($obj = $result->fetch_object()) {
?>


Merci de votre réponse

Jack Bocar
LupusMic
le 04/10/2007 à 00:14
LupusMic
Ça dépend des surprises auxquelles tu t'attends. Mais à ce compte, c'est pas la peine d'écrire du PHP : utilises PHPMyAdmin ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
jackbocar
le 04/10/2007 à 07:53
jackbocar
Bonjour,

Qu'entends-tu par surprises ?

Et pour quelles raisons utiliser PhpMyAdmin plutôt que PHP ?

Je pense que pour une modification de texte, ou une nouvelle insertion, il est plus simple et plus rapide d'utiliser des scripts préparés pour cet usage.

Et surtout, lorsque tu as dans une table 3887 entrées donc ID, c'est plus simple de trouver cette ID si elle est affichée sur ta page d'administration. Non ?

Jack Bocar
mojorisin
le 04/10/2007 à 08:01
mojorisin
Bonjour,
si seul le webmaster gère les insertions cela peut suffire, si la sécurité en amont est assurée.
Je mettrais tout de même un bémole :
on ne fait pas un htmlentities() avant insertion mais à l'affichage, les donnéees en table doivent rester brutes.
echo ’16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq’|dc
jackbocar
le 04/10/2007 à 08:16
jackbocar
Bonjour,

Bien sur, c'est une erreur de ma part, HTMLENTITIE est fait pour la l'affichage

Tout comme :
addslashes() pour l'insertion des données
stripslashes() pour l'affichage des données

Jeck Bocar
LupusMic
le 04/10/2007 à 08:51
LupusMic
(jackbobar) Si tu suis un peu mes interventions, tu sais que j'aime pas trop PHPMyAdmin ;) Mais s'il y a bien un cas dans lequel son usage est intéressant, c'est dans la saisie de données, lorsqu'il n'y a pas besoin d'un script aux p'tits oignons. À mon avis, tu devrais protéger ton script, rien que parce que c'est une bonne habitude.

Et ce ne sera pas forcément plus rapide d'utiliser une série de scripts qui vont bien, car une requête SQL, c'est vite tapé.

(mojorisin) Je honnis htmlentities, qui apporte une pseudo-sécurité. Personnelement, et n'en déplaise aux « earlier optimiser » :-D, j'utilise DOMDocument, qui échappe automatiquement gt, lt et amp. Quand à addslashes et stripslashes, ça ne sécurise pas ton script, car tu ne fait qu'échapper le sommet de l'iceberg.

J'ai un article en préparation sur ma manière de coder, promis, vous serez les premiers au courant ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
jackbocar
le 05/10/2007 à 17:13
jackbocar
Bonjour,

Merci de ta réponse LupusMic.

J'avais mis des protections dans mes scripts de mises à jours, mais mon problème était qu'ils me faisaient \\ voir \\\ pour les L\\\' ou autre avec apostrophe.
Tous mes scripts étaient protégés pour l'insertion dans la table avec : mysqli_real_escape_string.

Voir mon message : http://www.lephpfacile.com/forum/1-php-mysql/5489-affichage-donnees

Alors pour afficher mes pages, le problème était de la faire disparaître ces \\\.
Et, là, j'ai pas trouvé de bonne solution pour lire sans ces \\\.
Car même avec : htmlspecialchars, j'avais toujours des \ qui restaient voir quelquefois \\ de suite sur une L\\' ou autres avec apostrophe.

J'ai bien bidouillé mes scripts d'affichages avec plusieurs fois htmlspecialchars, mais ceci ne m'a pas paru être très catholique...

Je suis obligé d'avoir des scripts de mises à jour, car lorsque je mets à jour mes listes de commanderies, je ne peux pas chercher dans PhpMyAdmin la bonne ID sur mes 2000. Lorsque je mets à jour, c'est souvent 20 ou 30 commanderies de l'ID 1 à l'ID 2000.

J'ai donc un script pour lire mes commanderies :
Un script qui affiche uniquement les noms les départements et les ID par ordre alphabétique avec un affichage de 100 ID par page et bien sur, avec une pagination. (Merci aux comment faire du site)

Sur cette page sous chaque nom, j'ai un lien pour ouvrir le texte dans un script avec des <input> pour y faire une modification et l'enregistrer.

Si tu as une solution plus simple avec PHPMYADMIN, explique-moi, je veux bien tester et peut-être l'adopter.

Il est bien entendu que cet espace d'administration est protégé par un htaccess et les pages par une session contrôlée via la base de données par un login et un mot de passe jumelé et codé en SH1.

Je crois qu'avec ces protections, je suis relativement tranquille, je sais bien que la protection à 100% n'existe pas, mais pour les petits bidouilleurs qui essais d'entrer, ils n'ont pas gagnés d'avance.

J'espère avoir été clair dans mes explications.

Jack Bocar
LA GLOBULE
le 05/10/2007 à 17:50
LA GLOBULE
Ce n'est pas normal d'avoir des \' en base, forcement, t'as du faire des addslashes à un moment donné dans la vie de ta base de données.

Le mieux, c'est de traiter ta table en faisant des replace pour virer ces cacas (ce n'est pas forcement facile, car tu peux avoir mis consciemment des \' en base car tu voulais afficher un \').
jackbocar
le 05/10/2007 à 18:42
jackbocar
Bonjour,

Je sais que j'ai fait des erreurs sur mes premiers pas en PHP5, en passant d'un livre à l'autre, d'une façon de codé à une autre.

Puis, j'ai enlevé les mysqli_real_escape_string et tous les autres que j'avais mis. Depuis, plus aucun problème.

Mais, comme je l'ai dit au-dessus, je suis le seul à insérer et à modifier. Faut-il tout de même que je protège mes scripts ?


Dis-moi, quelle protection tu materais sur ce script :

<?php
include ('../_require/db_membres.php');
$conn = db_connect();
if (isset($_GET['go']) && $_GET['go'] == 'ok') {
if (!empty($_POST['titre']) && !empty($_POST['news'])) {

$result = $conn->query('INSERT INTO ma_table VALUES("", "'.$_POST['titre'].'", "'.$_POST['news'].'")');
header('Location: index.php');
exit();

}
else {
$message = 'Au moins un des champs obligatoires est vide.';
}
}
if (isset($_POST['titre'])) $_POST['titre'] = $_POST['titre'];
if (isset($_POST['news'])) $_POST['news'] = $_POST['news'];
?>


<?php
if (isset($message)) {
echo '<br /><span class="R">'.$message.'</span>';
}
?>



Mon script d'affichage :
<?php
$conn = db_connect();
$result = $conn->query("SELECT id, titre, news FROM ma_table WHERE id='1'");
while ($obj = $result->fetch_object()) {

printf ('<h2>%s</h2> %s', $obj->titre, nl2br($obj->news));
}
$result->close();
$conn->close();
?>


Merci

Jack Bocar
Cart
le 09/10/2007 à 09:46
Cart
Mais, comme je l'ai dit au-dessus, je suis le seul à insérer et à modifier. Faut-il tout de même que je protège mes scripts ?


C'est pas parceque tu es le seul a utiliser une arme qu'il ne faut pas securiser l'access a cette arme. Non ?

En faisant une recherche google tu trouvera plein d'articles interessant qui explique pk et comment securiser ses scripts.
Répondre
LoadingChargement en cours