Un raccourcisseur d'URL

Posted on

Aujourd’hui je me suis mis en tête de me faire un script php me permettant de raccourcir mes url.

Pourquoi ? Parce-que …

Parce-que j’avais besoin d’un raccourcisseur d’url qui n’espionne pas les liens que je souhaite raccourcir.

Voici le commentaire de début de mon script :

/***************************/
/* Auteur : Purexo : http://twitter.com/Purexo_
/*
/* Ceci est un raccourcisseur d'url
/* Il fonctionne en 3 temps :
/* 1- l'utilisateur rentre son lien à raccourcir
/* 2- le lien est rentré dans la base de donné, la page fournit à l'utilisateur son lien
/* 3- le lien fourni contient une variable a contenant l'id du lien demandé une requete sql fourni le lien grace à l'id puis la page redirige vers le lien
/*
/* Conseil d'utilisation :
/* - utiliser ce script sous le non de index.php dans la racine du serveur qui lui seras "dédié"
/* - faire un peu d'urlrewriting afin que http://hostname/id redirige vers http://hostname/index.php?a=id (afin d'avoir le lien le plus court possible)
/* - avoir un nom de domaine très court genre li.fr
/*
/* Pourquoi avoir fait mon raccourcisseur d'url ? :
/* - Pour m'entrainer
/* - j'en souhaitais un le plus minimaliste possible : pas de pub, pas de temps d'attente, pas de vérification d'url (ce qui est à la fois un avantage et un désavantage)
/*
/* Avantage et désavantage : 
/* le script ne vérifie rien, n'altère rien : il exécute, j'imagine que par conséquent il y a de grosse faille de sécurité, mais cela me permet d'entrer des liens
/* auto-destructible via zerobin sans que celui-ci ne soit analysé et donc détruit par une machine automatiquement.
/*
/* idée d'amélioration :
/* - fournir le lien avec l'id en hexadécimal. (toujours pour grappiller un peu de place)
/* - le remettre en décimal pour exécuter la requête sql avec redirection
****************************/

Je pense qu’après cela il n’y à pas grand chose à rajouter hormis le fait que j’utilise le SGBD mysql pour faire tourner ma BDD.

Voici mes sources :

short.php :

<?php
/***************************/
/* Auteur : Purexo : http://twitter.com/Purexo_
/*
/* Ceci est un raccourcisseur d'url
/* Il fonctionne en 3 temps :
/* 1- l'utilisateur rentre son lien à raccourcir
/* 2- le lien est rentré dans la base de donné, la page fournit à l'utilisateur son lien
/* 3- le lien fourni contient une variable a contenant l'id du lien demandé une requete sql fourni le lien grace à l'id puis la page redirige vers le lien
/*
/* Conseil d'utilisation :
/* - utiliser ce script sous le non de index.php dans la racine du serveur qui lui seras "dédié"
/* - faire un peu d'urlrewriting afin que http://hostname/id redirige vers http://hostname/index.php?a=id (afin d'avoir le lien le plus court possible)
/* - avoir un nom de domaine très court genre li.fr
/*
/* Pourquoi avoir fait mon raccourcisseur d'url ? :
/* - Pour m'entrainer
/* - j'en souhaitais un le plus minimaliste possible : pas de pub, pas de temps d'attente, pas de vérification d'url (ce qui est à la fois un avantage et un désavantage)
/*   Je pense rajouter une regex pour tester si c'est un lien, mais c'est tout (en meme temps si c'est pas un lien qui est fourni il n'y a aucun interet, que ce sois pour l'user, ou pour son stockage dans la BDD)
/*
/* Avantage et désavantage : 
/* le script ne vérifie rien, n'altère rien : il exécute, j'imagine que par conséquent il y a de grosse faille de sécurité, mais cela me permet d'entrer des liens
/* auto-destructible via zerobin sans que celui-ci ne soit analysé et donc détruit par une machine automatiquement.
/*
/* idée d'amélioration :
/* - fournir le lien avec l'id en hexadécimal. (toujours pour grappiller un peu de place)
/* - le remettre en décimal pour exécuter la requête sql avec redirection
****************************/

    $mysqli = new mysqli("localhost", "root", "********", "shorter"); //connection à la bdd (shorter c'est le nom de la base de donné')
    
    if(isset($_GET["a"])){
        $req = "SELECT link FROM links WHERE id = " . $_GET['a'] ;
        $res = $mysqli->query($req);
        $row = $res->fetch_assoc();
        $link = $row['link'];
        //echo $link;
        $test = header('Location: '.$link);
        //echo $test;
    }

?>
<!DOCTYPE html>
<html>
  <head>
    <title> Raccourcisseur d'url </title>
  </head>
  <body>
    <center>
        <h1> Bienvenue sur ce racoursisseur d'url </h1>
            <?php
                
                if(isset($_POST['lien'])){
                    $req = 'INSERT INTO links ( link ) VALUES ("'.$_POST['lien'].'")';
                    $mysqli->query($req);
                    $link = "https://purexo.tk/short.php?a=".$mysqli->insert_id; // ligne à changer en fonction de votre hébergement : http://hostname/nomduscript.php?a=
                    echo '<p><a href="'.$link.'">Votre Lien</a></p>';
                }
                
            ?>
            <form method="post" action="short.php"> <!-- nom de votre fichier.php -->
                <p>Votre lien à raccourcir</p>
                <textarea name="lien">https://purexo.tk/</textarea><br />
                <input type="submit" value="Envoyer" />
            </form>
    </center>
  </body>
</html>

shorter.sql :

CREATE DATABASE shorter;
USE shorter;

CREATE TABLE links (
  id bigint unsigned NOT NULL AUTO_INCREMENT,
  link text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (id)
);

Si vous avez des questions, des conseils (genre faille de sécurité) n’hésitez pas ^^ !

En attendant vous pouvez tester ça ici : short.php

 

EDIT : j’ai maintenant un nom de domaine dédié pour ce service, le code source est dispo sur github et j’ai finalement opté pour SQLite3