protéger son site web des injections

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

bloubi
Nouveau WRInaute
 
Messages: 18
Inscription: Lun Déc 04, 2006 18:06

Message le Jeu Oct 18, 2007 14:05

Bonjour :P ,


Je voulais vous remercier pour vos idées...
Je viens de passer un moment à regarder le site crawltrack, notamment la démo, ou l'on voit les tentatives d'injection de code et injections SQL. Déjà cela donne une idée du truc...

Par contre encore installer un logiciel juste pour détecter des http et des % dans les url, je trouver que c'est un peu trop... non?

Il y a un détail que je ne comprend pas. Y a-t-il un risque d'injections sur une vrai page html (100% statique)?

Jcaron, tu parle de placeholder et d'api... je sais pas ce que c'est...

Par contre dites moi si je me trompe, mais la fonction mysql_real_escape_string() existe à partir de php5 , non?

Je souhaite garder du "texte" dans mes url pour améliorer le référencement.


Merci
bloubi

jcaron
WRInaute accro
WRInaute accro
 
Messages: 1204
Inscription: Ven Fév 13, 2004 20:33

Message le Jeu Oct 18, 2007 14:34

bloubi a écrit:Jcaron, tu parle de placeholder et d'api... je sais pas ce que c'est...


Une API c'est une interface de programmation. Genre l'API de mysql ça va être toutes les fonctions qui permettent de faire des requêtes mysql.

Les placeholders ("les gardeurs de place") c'est un moyen de séparer la commande elle-même des valeurs. Dans une requête du type "SELECT * FROM matable WHERE id=12", on sépare donc en "SELECT * FROM matable WHERE id=?" et on passe le 12 séparément. Quand la valeur est en "dur" comme ça ça ne change pas grand chose, mais quand elle vient d'une variable ça permet de faire en sorte que l'API (les fonctions utilisées pour exécuter cette requête) s'assurent que la valeur est bien "escapée", en s'assurant que les ' et autres \ ne sont pas passés tels quels (ce qui permettrait de faire de l'injection).

Les placeholders ça existe par exemple dans les API DBI en perl, mysqli et PDO en php (5+). En php 4 à vue de nez ça n'existe pas pour mysql (mais comme je n'utilise jamais php je peux me tromper), donc on est obligé d'utiliser mysql_real_escape_string à chaque coup, ce qui est évidemment facilement oublié :-(

bloubi a écrit:Par contre dites moi si je me trompe, mais la fonction mysql_real_escape_string() existe à partir de php5 , non?


La doc dit que ça existe à partir de la 4.3.0. Avant (à partir de la 4.0.3) il y avait mysql_escape_string mais il a des problèmes de charset, dixit la doc.

bloubi a écrit:Je souhaite garder du "texte" dans mes url pour améliorer le référencement.


Euh, si c'est dans des paramètres genre url=machin, je doute que ça ait beaucoup d'effet... Ceci dit, comme je ne sais pas du tout quel est ton site, et ce que tu fais avec tout ça, c'est du pur wild guess...


Patrice A.
Modérateur
Modérateur
 
Messages: 2413
Inscription: Ven Fév 11, 2005 19:36

Message le Ven Oct 19, 2007 11:08

chtipepere a écrit:2- Dans TOUS tes include de fichiers, effectues un test de présence sur ton serveur (comme vient de le dire medium :
Code: Tout sélectionner
if(file_exists($_GET['ta_variable']))
    inclue('repertoire/'.$_GET['ta_variable'].'extension');
else
{
    //traitement de la tentative d'injection : enregistrement logs BDD, mail, blocage de l'ip, etc...
}

Ce ne sont que des solutions de base, elles ne constituent en rien une protection absolue, mais c'est un bon début je pense.
A bon entendeur.


Si tu penses avoir protégé ton site en procédant de cette façon, alors j'ai une TRES mauvaise nouvelle pour toi.
file_exists() accepte les url distantes (donc celle du spammeur).

bloubi, ton site ne fera pas long feu si tu n'apprends pas quelques notions de base de sécurité. Le conseil qu'on t'a donné (utiliser /site.php?id=925 au lieu de site.php?url=/mapage-truc.php ) est le seul réellement efficace de ce topic. Et encore, à condition que tu utilises mysql_real_escape_string() (ou tout simplement... intval() ) sur ce paramètre $_GET['id']

Toutes les autres inclusions à base de ?url=... sont risquées.

Si tu veux avoir les mots clefs dans ton url, rien ne t'empeche de faire : /site.php?id=925-mon-titre-super-intéressant
Et tu fais un coup de intval() sur le paramètre pour récupérer juste le "925". C'est une solution que tu peux voir à l'oeuvre ici par exemple :
-http://www.grandes-ecoles-paysdeloire.com/grandes-ecoles-pays-de-la-loire.php?ecole=1-CENTRALE%20NANTES

Tu n'as pas répondu à la seule vraie question importante qui nous aurait permis de te conseiller en détail : que fais-tu sur ta page qui reçoit le paramètre url ? que fais-tu de ce paramètre ?

P.

bloubi
Nouveau WRInaute
 
Messages: 18
Inscription: Lun Déc 04, 2006 18:06

Message le Ven Oct 19, 2007 14:04

Bonjour Dj_Apx,


Je te remercie de ton astuce avec un id dans la valeur de la variable.
C'est vraiment très "astucieux"....Je vais voir si je peux appliquer ca sur mon site... Je pense que ca vaut le coup d'essayer...

En fait j'ai 3 ou 4 pages dynamiques qui fonctionnent sur le meme principe:
j'utilise la variable de l'url (après vérification) pour après faire une requete du genre:
SELECT * FROM table WHERE champ = '$variable_de_l_url'

Ainsi, je peux remplir ma page avec les infos qui correspondent avec ce qu'attends l'internaute...

Un truc sympa: avec mon nouvel hébergeur, j'ai pu créer des accès à la base de donnée avec de droits modulés, dont un accès en lecture seule.

merci
bloubi

protéger son site web des injections

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: crocknaboton, viewinn et 0 invités