Aller au contenu

Rechercher dans la communauté

Affichage des résultats pour les étiquettes 'niveau intermédiaire'.

  • Rechercher par étiquettes

    Saisir les étiquettes en les séparant par une virgule.
  • Rechercher par auteur

Type du contenu


Forums

  • Discussions communautaires
    • Annonces importantes
    • Suggestions
    • Postulation
    • Présentation des membres
    • Discussions générales
    • Multimédias
    • Jeux vidéos
    • Actualités
    • Aide / Support
    • Études
    • Archives
  • Informatique
    • Projets des membres
    • Autres / Divers / Découvertes
    • Crypto-monnaie(s)
    • Hardware / Electronique
    • Réseaux
    • Gestion de serveur
    • Système d'exploitation : Smartphone
    • Système d'exploitation : Ordinateur
  • Programmation
    • Projets des membres
    • Développement web
    • Développement de logiciels
    • Développement d'applications pour smartphones
    • Outils du développeur
    • Aide / Support
  • Emulation
    • Aion
    • Arma III
    • Dofus
    • Dragonica
    • Emulateurs consoles
    • S4 League
    • FlyFF
    • Grand Theft Auto
    • Minecraft
    • Tera
  • Partenariats
    • <b>WoW Emu - La communauté émulation WoW</b>
    • <b>ActuGaming</b>
    • <b>H-Wars</b>
    • <b>EasyChat - Solution gratuite de chat client et serveur (anciennement Melichat)</b>
    • <b>Le Monde des Lunes</b>
    • <b>DansTonCode</b>

Rechercher les résultats dans…

Rechercher les résultats qui…


Date de création

  • Début

    Fin


Dernière mise à jour

  • Début

    Fin


Filtrer par nombre de…

Inscription

  • Début

    Fin


Groupe


Skype


Site web


AIM


MSN


ICQ


Yahoo


Jabber


Tox


Centres d'interêts


Localisation


Niveau d'étude

2 résultats trouvés

  1. Bonjour à tous, Aujourd’hui je vais vous montrer comment coder un moteur de recherche de base, vous pouvez donc aussi bien améliorer la structure de vos tables que la condition de recherche elle même. Contexte: Le moteur de recherche sert à trouver un joueur et afficher ses statistiques. Structure table: CREATE TABLE `players` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `guild` text NOT NULL, `token` int(11) NOT NULL, PRIMARY KEY (`id`) ) AUTO_INCREMENT=1 ; Le formulaire de recherche (search.php): <form action="./search.php" method="GET"> <label for="name">Nom du joueur</label> <input type="text" name="name"> <input type="submit" value="Rechercher"> </form> Je ne m'attarde pas sur le html vu que c'est un tuto php/my-sql. à la suite du code html vous allons ajouter du php: <table width="100%"> <tr> <th>#</th> <th>Nom</th> <th>Points</th> </tr> <?php $page = 0; if (isset($_GET['name']) { $page = 1; // Page par défaut affichée $np_page = 25; // Nom de résultat par page $name = addslashes($_GET['name']); // suppression faille sql $icxn = mysqli_connect("127.0.0.1", "root", "toor", "game"); //connexion mySQLi // vérification du numéro de la page si elle est indiqué dans l'url en "?page=n" if (isset($_GET['page'])&&is_numeric($_GET['page'])&& $_GET['page']>0&&$_GET['page']<9999999) $page = $_GET['page']; $fourchette = ($page - 1) * $np_page; $iquery = mysqli_query($icxn, "SELECT * FROM `players` WHERE `name` LIKE '%$name%' ORDER BY `name` ASC LIMIT $fourchette, $np_page"); while ($char = mysqli_fetch_array($iquery)) { echo <<<LINE <tr> <td>{$char['id']}</td> <td><b>{$char['name']}</b></td> <td>{$char['token']}</td> </tr> LINE; } } ?> </table> <?php if ($page!=0) { echo "page(s): "; $iquery_count = mysqli_query($icxn, "SELECT * FROM `players` WHERE `name` LIKE '%$name%'"); $count = mysqli_nums_rows($iquery_count); for ($i = 1; $i < $count/$np_page; $i++) { echo '<a href="./search.php?page='.$i.'">'.$i.'</a>&nbsp;'; } } ?> Conseil pour améliorer: -Si la table est beaucoup avec votre moteur faite une colonne de plus où il y a une simplification des caractères (ex: "é" => "e"; "â" => "a"; etc). -Attention aux caractères html utilisiez la fonction strip_tag() ou autre sur ce qui causer des faille xss par exemple si le client peu choisir le nom de son personnage et mettre du code html dedans c'est mort. -Supprimez les caractères "%" et "_" si ils sont présent dans $name et instauré une limite au niveau du nombre de caractères pour la recherche exemple: minimum 4 caractères, pour évites de charger trop de chose. Version pdo pour les gens qui aiment la pdo: <table width="100%"> <tr> <th>#</th> <th>Nom</th> <th>Points</th> </tr> <?php $page = 0; if (isset($_GET['name']) { $page = 1; // Page par défaut affichée $np_page = 25; // Nom de résultat par page $name = $_GET['name']; $cxn = new PDO('mysql:host=127.0.0.1;dbname=game', 'root', 'toor'); //connexion mySQL // vérification du numéro de la page si elle est indiqué dans l'url en "?page=n" if (isset($_GET['page'])&&is_numeric($_GET['page'])&& $_GET['page']>0&&$_GET['page']<9999999) $page = $_GET['page']; $fourchette = ($page - 1) * $np_page; $query = $cxn->prepare("SELECT * FROM players` WHERE `name` LIKE '%:name%' ORDER BY `name` ASC LIMIT :fourchette, :npp"); $query->bindValue(':name', $name, PDO::PARAM_STR); $query->bindValue(':fourchette', $fourchette, PDO::PARAM_INT); $query->bindValue(':npp', $np_page, PDO::PARAM_INT); $query->execute(); while ($char = $query->fetch()) { echo <<<LINE <tr> <td>{$char['id']}</td> <td><b>{$char['name']}</b></td> <td>{$char['token']}</td> </tr> LINE; } } ?> </table> <?php if ($page!=0) { echo "page(s): "; $query_count = $cxn->prepare("SELECT * FROM `players` WHERE `name` LIKE '%:name%'"); $query_count->bindValue(':name', $name, PDO::PARAM_STR); $query_count->execute(); $count = $query_count->rowCount(); for ($i = 1; $i < $count/$np_page; $i++) { echo '<a href="./search.php?page='.$i.'">'.$i.'</a>&nbsp;'; } } ?> Bonne programmation à tous! Cordialement, Mars073
  2. Bonjour à tous, Aujourd'hui je fais essayer de faire un truc plus sérieux, les failles les plus courantes (sql, xss, csrf et exploit cookie). Les failles SQL, c'est le fait que le client peut modifier une requête sql sur vote site, ses failles peuvent permettent de modifier, afficher, supprimer toutes les tables voir la base de donnée. Contexte: J'affiche mes news avec une variable ?page dans l'url <?php $query = mysql_query("SELECT * FROM `news` LIMIT ".$_GET['page'].",10"); ?> normalement l'url va ressemble à: http://mars073.be/faille.php?page=2 .mais si quelqu'un écrit : http://mars073.be/faille.php?page=2;TRUNCATE%20`news`# bah... vous perdez toutes vos news, la requête sera double: SELECT * FROM `news` LIMIT 2; TRUNCATE `news`; #,10 il existe des programmes pour exploiter plus facilement les failles ils permettent aussi de lister les autres tables ._. solution: 1 - vérifier que la variable est un chiffre (numérique); <?php $page = 0; if (isset($_GET['page'])&&is_numeric($_GET['page'])) $page = $_GET['page']; $query = mysql_query("SELECT * FROM `news` LIMIT $page,10"); ?> étrangement cette erreur est très fréquente encore... mais bon parfois y a un pare-feu derrière et c'est pas marrant 2-dans le cadre où il s'agit d'un texte faites appel à la fonction: addslashes(). Exemple: $titre = addslashes($_GET['titre']); 3-Simplement coder en pdo mais ça peut-être dérangeant quand vous n'avez pas codé le site et que vous devez donc tout refaire... Les failles xss, aussi très courantes c'est une faille qui permet au client d'afficher du code html ou javascript, ce qui permet de faire des forkbomb, redirections, voler les logins, etc. Contexte: je débute et j'ai fais une chatbox avec une faille xss: <?php $query = $cxn->query("SELECT * FROM `chat`"); $query->execute(); while ($msg = $query->fetch()) { echo $msg['user']." a dit:".$msg['content']; } ?> maintenant Jean-Kevin envoie le message suivant: <meta http-equiv="refresh" content="0;url=http://JeanKevdu06.free.fr/"> ce qui aura pour effet de rediriger une fois la page charger sur un autre site. pour pallier à ce problème il suffit de faire appel à une fonction: htmlspecialchars(), il existe d'autre fonction avec plus où moins le même effet, c'est à dire convertir le code en caractère lisible. exemple avec le code au dessus: <?php $query = $cxn->query("SELECT * FROM `chat`"); $query->execute(); while ($msg = $query->fetch()) { $msg['content'] = htmlspecialchars($msg['content']); // Dans le contexte le nom d'utilisateur ne peut pas comporter de caractères spéciaux. echo $msg['user']." a dit:".$msg['content']; } ?> je considère les failles "include" comme des failles xss mais si c'est pas totalement vrai, je suppose que vous connaissez tous la fonction include(), vu que c'est la base du php... Bref beaucoup de site utile utilise une variable $_GET (ex: $_GET['p']) et donc il font un code du genre: <?php if (isset($_GET['p'])&&is_file($_GET['p'])) include("pages/".$_GET['p'].".php"); ?> mais bon une fois de plus si le méchant utilisateur change l'url: en ?p=../includes/config bah... ça inclue le fichier config ._.il y a beaucoup de façon différente pour résoudre cette faille mais dans le contexte ej vais utiliser le switch() <?php if (isset($_GET['p'])) { //on test si la page est spécifiée switch (strtolower($_GET['p'])) { // test la valeur de la variable en minuscule pour avoir plus facile case 'home': include("pages/home.php"); //l'acccueil break; case 'contact': include("pages/contact.php"); break; case 'machin': include("pages/machin.php"); // machin break; default: include("pages/404.php"); //page d'erreur } } else { include("pages/home.php"); //si aucune page spécifiée on met l'accueil } ?> Les failles csrf, déjà plus rare, ça consiste dans le faire exécuter par le biais d'une image comme une signature sur un forum, je vais prendre pour exemple un forum.Contexte: Je fais une signature qui va vous déconnecter automatiquement quand vous l'afficherait: je mets le lien pour se déconnecter comme le lien d'une image. [img=http://forum.mars073.be/deconnect.php] Dans ce cas ci il faut utiliser un token, c'est une variable qui va contenir une suite aléatoire.Exemple dans votre script de connexion vous allez surement utiliser des variables $_SESSION, donc il suffit d'ajouter dans votre script de connexion: <?php // ... $_SESSION['token'] = dechex(rand(0, 999999))."-".dechex(rand(0, 999999)); ?> votre bouton déconnexion: <a href="deconnect.php?t=<?=$_SESSION['token']?>">Déconnexion</a> et le script deconnect.php: <?php session_start(); if (isset($_GET['t'])&&$_GET['t']==$_SESSION['token']) { session_unset(); session_destroy(); echo "Vous avez bien été déconnecté"; } else { echo "La requête est incorrect"; } ?> Le forum Melinyel a un système similaire mais en plus n'autorise que certaines extensions mais le systèmes d'extension ne sert à rien vu qu'il peut être trompé avec le ".htaccess". Nous arrivons donc au dernier type de faille les voles de cookies, miam miam... Contexte: mon script php camouflé en "cookie.png" doit voler le cookie du nom de "autolog" qui permet que le compte se connecter automatiquement. /!\Rappel: le cookie est stocké du coté client il y a un risque de modification, donc cryptait le un maximum pour pas qu'il puisse détourner sa connexion sur un autre compte, comme pour les variables caché html ou js. donc nous allons créer votre cookie avec une protection correcte: $crypt = $user['id']."|".md5(sha1($user['name']).$user['haspass']); setcookie( "autolog", $crypt, time()+60*60*24*31, "./marsLogin", "mars073.be", false, true); donc $crypt dans mon exemple est composé de l'id de l'utilisateur et le cumule crypté du nom d’utilisateur crypté et de son mot de passe crypté, même crypté normalement on ne met pas le mot de passe dans le cookie je dis bien normalement.paramètres de mon cookie: 1 - Son nom: "autolog" 2 - sa valeur: $crypt 3 - sa date d'expiration en seconde: 31jours après création 4 - dossier ou je vais le ranger 5 - le seul site (domaine) qui a le droit d'y accéder: "mars073.be" 6 - si le cookie ne peut être utilisé que par des site en https:// : non (si votre site à le https:// mettez "true" si vous voulez) 7 - Interdit la modification du cookie par du javascript par exemple (ne fonctionne pas tout le temps). mais comment faire maintenant pour vérifier l'utilisateur? Comme ça: <?php if (isset($_COOKIE['autolog'])) { $data = explode("|", $_COOKIE['autolog']; // On sépare l'id du reste if (isset($data[1])&&is_numeric($data[0])) { // On vérifie la structure du cookie $query = $db->query("SELECT * FROM `user` WHERE `id` = ".$data[0]." LIMIT 1"); $query->execute(); $user = $query->fetch(); if ($data[1] == md5(sha1($user['name']).$user['haspass'])) { $_SESSION['login'] = $user; echo "Connexion réussite"; } else { echo "cookie incorrect"; } } else { echo "Cookie corrumpue"; } } ?> Je pense avoir fait le tour des trucs les plus courant en php... ps: exemple d'image en php qui passe à travers le filtre du forum avec un simple dossier, quand vous actualisez elle change: Bonne programmation à tous! Cordialement, Mars073
×
×
  • Créer...