Commit 3182cdfd authored by Cellophile's avatar Cellophile 🎨
Browse files

Merge branch 'amélioration1.03' into 'main'

Amélioration1.03

See merge request !1
parents 41f622af c0b6f345
......@@ -3,3 +3,7 @@ RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE,QSA]
# CUSTOM ERROR PAGES
ErrorDocument 400 /index.php?echec=404
ErrorDocument 404 /index.php?echec=404
# PersonaLink
Version 1.02
Version 1.03
04/05/2021
Auteur : Théophile Bellintani (theophile at captp.fr)
Licence : TROC (voir Licence)
PersonaLink est un raccourcisseur et personnalisateur d'URLs codé en php, bien plus facile à installer que Lstu.
**Démonstration : https://url.captp.fr**
**Avantages par rapport au LSTU** (Let's Shorten That URL) :
- Pas besoin de faire des manips pour l'installation, tout est fonctionnel.
- Pas besoin de faire des manips compliquées pour l'installation, tout est décrit ci-dessous.
- Anonymise les liens, pour que personne ne puis retrouver ce qu'on a mis derrière un lien.
- Anonymise les liens, pour que personne ne puisse retrouver ce qu'on a mis derrière un lien.
Ce n'est pas le cas sur LSTU, qui nous dit que le texte est déjà pris, mais du coup qui révèle le lien par la même...
Pour la confidentialité, c'est pas top.
- Vérifie que l'URL vers où rediriger existe bien. ça ne fait pas de lien mort d'avance. (Sauf si la page internet décède après création du lien...)
- Ne nécessite pas de database !!! Fonctionne avec un fichier csv.
- Aucune information utilisateur n'est enregistrée, aucune analyse des liens, ... Parce que l'ignorance, c'est le bonheur.
- Vérification par captcha, pour éviter les robots spammeurs.
- Connectable en api (qualibrée pour répondre à privatebin) Toutes les informations sont dans le fichier /api/lis-moi.txt
# INSTALLATION
......@@ -29,7 +38,8 @@ PersonaLink est un raccourcisseur et personnalisateur d'URLs codé en php, bien
Pour enlever le /d/ dans l'URL, et donc cacher le dossier, et raccourcir l'URL, voici la marche à suivre :
1. Sous un premier (sous-)domaine, installer le présent programme.
2. sous un second (sous-)domaine, déposer simplement un .htaccess contenant :
2. Dans le fichier config.php, renseigner la variable $urlcourte avec votre premier (sous-)domaine.
3. sous un second (sous-)domaine, déposer simplement un .htaccess contenant :
```
RewriteEngine on
......@@ -46,9 +56,8 @@ Pour enlever le /d/ dans l'URL, et donc cacher le dossier, et raccourcir l'URL,
Où il faut remplacer premierdomaine.fr par le premier domaine où l'on a installé le programme, c'est tout simple.
3. Dans le fichier a.php, renseigner en face de "$urlcourte =" l'url du second (sous-)domaine.
4. Dans le dossier /d/, modifier le fichier index.php pour qu'il renvoit vers https://premierdomaine.fr. C'est très important, sinon quand on tape l'adresse https://seconddomaine.fr, on voit tous les fichiers de redirection qu'il y a dans le dossier /d/ !!!
4. Dans le fichier a.php, renseigner en face de "$urlcourte =" l'url du second (sous-)domaine.
5. Dans le dossier /d/, modifier le fichier index.php pour qu'il renvoit vers https://premierdomaine.fr. C'est très important, sinon quand on tape l'adresse https://seconddomaine.fr, on voit tous les fichiers de redirection qu'il y a dans le dossier /d/ !!!
**Il n'y a rien d'autre à tripoter pour que ça fonctionne !**
......
Version 1.03
04/05/2021
- Création d'un fichier config pour centraliser quelques infos
- Création d'un fichier fonctions pour regrouper les fonctions
- Allègement du fichier a.php en sortant les fonctions
- suppression des 4 vérifs, maintenant, c'est "tant que c'est pas bon, continue à chercher"
- Suppression du message d'erreur lié à l'impossibilité des 4 vérifs
- Création d'une interface d'api
- Pour connecter avec privatebin, particulièrement
- htaccess n'autorisant qu'un site (ou plusieurs en *), transfert GET, ...
- encodage en json de manière générale, privatebin ne comprend pas le json, donc le retour se fait aussi en echo simple.
- Ajout d'une redirection 404 avec message d'erreur.
Version 1.02.1
16/03/2021
- Changement des liens du code source pour pointer sur framagit.
......
<?php
session_start();
//Initiatisation :
$av = "a";
$aw = "b";
$ax = "c";
$ay = "d";
$urlbase = "e";
$returnerror = 0;
$urlcourte = "https://u.captp.fr/";
$reponse = 0;
include_once "config.php";
include_once "fonctions.php";
// Vérification du captcha : vrai ou faux ?
......@@ -16,7 +9,7 @@ if(isset($_POST['captcha'])) {
if($_POST['captcha'] == $_SESSION['captcha']) {
}
else {
header("location: index.php?echec=3");
header("location: index.php?echec=2");
exit();
}
}
......@@ -32,7 +25,7 @@ if (isset($_POST["ubase"]) && isset($_POST["uperso"]) !== FALSE){
$urlbasetest = fopen($urlbase, "r");
if (empty($urlbasetest)){
header("location: index.php?echec=2");
header("location: index.php?echec=1");
exit();
}
......@@ -40,179 +33,25 @@ if (isset($_POST["ubase"]) && isset($_POST["uperso"]) !== FALSE){
$urlav = str_replace(' ','-', $urlav);
// Sécurisation de l'adresse personnalisée en lui ajoutant une chaine de caractères aléatoires :
include "fonction_securisation_url.php";
// On a 4 possibilités à tester :
$av = $chaine1."-".$urlav;
$aw = $chaine2."-".$urlav;
$ax = $chaine3."-".$urlav;
$ay = $chaine4."-".$urlav;
// On vérifie qu'au moins une des 4 possibilités est unique :
// On vérifie que l'adresse personnalisée est unique
// en lui ajoutant une chaine de caractères aléatoires :
// Premier test :
if (($fp = fopen("urlperso.csv", "r")) !== FALSE) {
// Récupère les données de chaque lignes
while (($data = fgetcsv($fp, ",")) !== FALSE) {
// Récupère les données de chaque cases
$upersoval = $data [0];
$ubaseval = $data [1];
// teste si l'URL perso existe déjà. Si oui, on change la sécurisation et on passe à la boucle suivante.
if ($av == $upersoval) {
$av1 = 1;
fclose($fp);
break;
}
else {
$av1 = 0;
}
}
// deuxième test :
if ($av1==1){
// Si la première boucle n'a pas marché, on fait une seconde boucle.
if (($fp = fopen("urlperso.csv", "r")) !== FALSE) {
// Récupère les données de chaque lignes
while (($data = fgetcsv($fp, ",")) !== FALSE) {
// Récupère les données de chaque cases
$upersoval = $data [0];
$ubaseval = $data [1];
// teste si l'URL perso existe déjà. Si oui, on change encore.
if ($aw == $upersoval) {
$aw2 = 1;
fclose($fp);
break;
}
else {
$aw2 = 0;
}
}
}
// troisième test :
if ($av1==1 && $aw2==1){
if (($fp = fopen("urlperso.csv", "r")) !== FALSE) {
while (($data = fgetcsv($fp, ",")) !== FALSE) {
$upersoval = $data [0];
$ubaseval = $data [1];
if ($ax == $upersoval) {
$ax3 = 1;
fclose($fp);
break;
}
else {
$ax3 = 0;
}
}
}
// quatrième test :
if ($av1==1 && $aw2==1 && $ax3==1){
if (($fp = fopen("urlperso.csv", "r")) !== FALSE) {
while (($data = fgetcsv($fp, ",")) !== FALSE) {
$upersoval = $data [0];
$ubaseval = $data [1];
if ($ay == $upersoval) {
$ay4 = 1;
fclose($fp);
break;
}
else {
$ay4 = 0;
}
}
// Si aucune URL n'a été testé unique, on demande à l'utilisateur de changer son texte :
if ($av1==1 && $aw2==1 && $ax3==1 && $ay4==1){
$returnerror = 1;
header("location: index.php?echec=1");
exit();
}
}
// Le quatrième test est validé :
else {
$upersok = $ay;
}
}
// Le troisième test est validé :
else {
$upersok = $ax;
}
$averifier = "false";
while($averifier=="false"){
$av = $urlav."-".random(3);
$averifier = uniciteurl($av,$srcfichiercsv);
}
//le deuxième test est validé :
else {
$upersok = $aw;
}
}
// Si le premier test a marché, on valide la première URL :
else {
$upersok = $av;
}
}
$upersok = $averifier;
// Puis on enregistre cette url dans le doc csv:
$reponse = 1; //permet d'afficher le message avec l'URL raccourcie.
if ($returnerror==0){
$list = array(
array ($upersok, $urlbase)
);
$fp = fopen("urlperso.csv", "ab");
foreach ($list as $field){
fputcsv($fp, $field);
}
fclose($fp);
// on lit ce qu'on vient d'écrire :
$lecture = fopen ("urlperso.csv", "r+");
$id = 0;
while ($id<1){
$info = fgetcsv($lecture, ",");
$info0 = $info[0];
$info1 = $info[1];
//DEBUG echo "<br><br>les infos enregistrées sont : <br> Texte de l'URL choisi : $info0 <br>URL à personnaliser : $info1.<br>";
$id++;
}
fclose($lecture);
// Ensuite on crée un fichier php pour établir la retirection :
$nfphp = 'd/'.$upersok.'.php';
$fichieredirect = fopen($nfphp, "w");
fwrite($fichieredirect, "<?php
header('Status: 301 Moved Permanently', false, 301);
header('Location: ".$urlbase."');
exit();
?>");
fclose($fichieredirect);
// on lit ce qu'on vient d'écrire :
$relecture = fopen($nfphp, "r");
$contenu = fgets($relecture, 500);
fclose($relecture);
//DEBUG echo "le titre du fichier est : $nfphp <br>";
//DEBUG echo "le contenu du fichier est : <br>$contenu<br> (c'est normal que rien ne s'affiche, on a écrit dans le header et pas dans le body).<br>";
//DEBUG echo "<a href=\d/$upersok.php\>cliquez ici.</a>";
$enregistrement = creer($upersok,$urlbase,$srcfichiercsv);
if($enregistrement == "true"){
$reponse = 1; //permet d'afficher le message avec l'URL raccourcie.
}
$urlfinale = $urlcourte.$upersok;
}
//Fin de traitement, Affichage du formulaire et des messages :
?>
......@@ -254,7 +93,7 @@ if (($fp = fopen("urlperso.csv", "r")) !== FALSE) {
echo $urlbase;
print ("<br>
L'URL raccourcie : ");
echo "<a href=$urlcourte$upersok\>$urlcourte$upersok</a>";
echo "<a href=$urlfinale\>$urlfinale</a>";
print ("</div>");
}
......@@ -263,7 +102,7 @@ if (($fp = fopen("urlperso.csv", "r")) !== FALSE) {
<p>Les URLS sont complétées par des caractères aléatoires. Ainsi personne ne pourra avoir la même URL que vous, même en choisissant le même texte de personnalisation, et surtout personne ne pourra retrouver votre url si vous ne lui la donnez pas !</p>
<br>
<p>Ceci est mon premier programme. Toute proposition d'amélioration est la bienvenue !</p>
<p>Version 1.02 — 23/02/2021 — © Théophile Bellintani — Licence <a href="licence.php">TROC</a>, <a href="https://framagit.org/Cellophile/personalink/">Opensource</a> et gratuit !</p>
<p><? echo $version; ?> — © Théophile Bellintani — Licence <a href="licence.php">TROC</a>, <a href="https://framagit.org/Cellophile/personalink">Opensource</a> et gratuit !</p>
</div>
</div>
</body>
......
<?php
//Initiatisation :
$av = "a";
$aw = "b";
$ax = "c";
$ay = "d";
$urlbase = "e";
$returnerror = 0;
$urlcourte = "https://u.captp.fr/";
$reponse = 0;
$srcfichiercsv = __DIR__ . "/urlperso.csv";
$version = "Version 1.03 — 04/05/2021";
?>
\ No newline at end of file
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>PersonaLink</title>
</head>
<body>
<?php
//chaine n°1 :
function random1($car1) {
$string1 = "";
$chaine1 = "0123456789abcdefghijklmnopkrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for($i=0; $i<$car1; $i++) {
$string1 .= $chaine1[rand()%strlen($chaine1)];
}
return $string1;
}
$chaine1 = random1(3);
//chaine n°2 :
function random2($car2) {
$string2 = "";
$chaine2 = "0123456789abcdefghijklmnopkrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for($i=0; $i<$car2; $i++) {
$string2 .= $chaine2[rand()%strlen($chaine2)];
}
return $string2;
}
$chaine2 = random2(3);
//chaine n°3 :
function random3($car3) {
$string3 = "";
$chaine3 = "0123456789abcdefghijklmnopkrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for($i=0; $i<$car3; $i++) {
$string3 .= $chaine3[rand()%strlen($chaine3)];
}
return $string3;
}
$chaine3 = random3(3);
//chaine n°4 :
function random4($car4) {
$string4 = "";
$chaine4 = "0123456789abcdefghijklmnopkrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for($i=0; $i<$car4; $i++) {
$string4 .= $chaine4[rand()%strlen($chaine4)];
}
return $string4;
}
$chaine4 = random4(3);
?>
</body>
</html>
\ No newline at end of file
<?php
//chaine n°1 :
function random($car1) {
$string1 = "";
$chaine1 = "0123456789abcdefghijklmnopkrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
for($i=0; $i<$car1; $i++) {
$string1 .= $chaine1[rand()%strlen($chaine1)];
}
return $string1;
}
function uniciteurl($verif,$srcfichiercsv) {
if (($fp = fopen($srcfichiercsv, "r")) !== FALSE) {
// Récupère les données de chaque lignes
while (($data = fgetcsv($fp, ",")) !== FALSE) {
// Récupère les données de chaque cases
$upersoval = $data [0];
$ubaseval = $data [1];
// teste si l'URL perso existe déjà. Si oui, on change la sécurisation et on passe à la boucle suivante.
if ($verif == $upersoval) {
$verif1 = "false";
return $verif1;
fclose($fp);
break;
}
else {
$upersok = $verif;
return $upersok;
}
}
}
}
function creer($upersok,$urlbase,$srcfichiercsv){
// Puis on enregistre cette url dans le doc csv:
if ($returnerror==0){
$list = array(
array ($upersok, $urlbase)
);
$fp = fopen($srcfichiercsv, "ab");
foreach ($list as $field){
fputcsv($fp, $field);
}
fclose($fp);
// on lit ce qu'on vient d'écrire :
$lecture = fopen ($srcfichiercsv, "r+");
$id = 0;
while ($id<1){
$info = fgetcsv($lecture, ",");
$info0 = $info[0];
$info1 = $info[1];
//DEBUG echo "<br><br>les infos enregistrées sont : <br> Texte de l'URL choisi : $info0 <br>URL à personnaliser : $info1.<br>";
$id++;
}
fclose($lecture);
// Ensuite on crée un fichier php pour établir la retirection :
$nfphp = __DIR__ . '/d/'.$upersok.'.php';
$fichieredirect = fopen($nfphp, "w");
fwrite($fichieredirect, "<?php
header('Status: 301 Moved Permanently', false, 301);
header('Location: ".$urlbase."');
exit();
?>");
fclose($fichieredirect);
// on lit ce qu'on vient d'écrire :
$relecture = fopen($nfphp, "r");
$contenu = fgets($relecture, 500);
fclose($relecture);
//DEBUG echo "le titre du fichier est : $nfphp <br>";
//DEBUG echo "le contenu du fichier est : <br>$contenu<br> (c'est normal que rien ne s'affiche, on a écrit dans le header et pas dans le body).<br>";
//DEBUG echo "<a href=\d/$upersok.php\>cliquez ici.</a>";
$retour = "true";
return $retour;
}
}
?>
\ No newline at end of file
......@@ -26,6 +26,7 @@
</form>
<?php
session_start();
include_once "config.php";
$reponse = 1;
if ($reponse==0){
......@@ -46,19 +47,19 @@
if ($_GET['echec']==1){
echo '
<div id="reponse-negative">
Malgré nos efforts de sécurisation, le texte de personnalisation choisi a déjà été utilisé trop de fois. <br>Veuillez en choisir un autre.
URL invalide. Merci de rentrer une adresse URL qui existe.
</div>';
}
if ($_GET['echec']==2){
echo '
<div id="reponse-negative">
URL invalide. Merci de rentrer une adresse URL qui existe.
Captcha invalide. Veuillez réessayer. Pour info, les lettres sont toutes en majuscules.
</div>';
}
if ($_GET['echec']==3){
if ($_GET['echec']==404){
echo '
<div id="reponse-negative">
Captcha invalide. Veuillez réessayer.
Ce lien court n\'existe pas. Vous vous êtes peut-être trompé·e en le recopiant ?
</div>';
}
}
......@@ -67,7 +68,7 @@
<div id= "footer">
<p>Les URLS sont complétées par des caractères aléatoires. Ainsi personne ne pourra avoir la même URL que vous, même en choisissant le même texte de personnalisation, et surtout personne ne pourra retrouver votre url si vous ne lui la donnez pas !</p>
<br>
<p>Version 1.02 — 23/02/2021 — © Théophile Bellintani — Licence <a href="licence.php">TROC</a>, <a href="https://framagit.org/Cellophile/personalink/">Opensource</a> et gratuit !</p>
<p><?php echo $version; ?> — © Théophile Bellintani — Licence <a href="licence.php">TROC</a>, <a href="https://framagit.org/Cellophile/personalink">Opensource</a> et gratuit !</p>
</div>
</div>
......
# PersonaLink
Version 1.02
23/02/2021
Version 1.03
04/05/2021
Auteur : Théophile Bellintani (theophile at captp.fr)
Licence : TROC (voir Licence)
......@@ -11,18 +11,23 @@ PersonaLink est un raccourcisseur et personnalisateur d'URLs codé en php, bien
**Avantages par rapport au LSTU** (Let's Shorten That URL) :
- Pas besoin de faire des manips pour l'installation, tout est fonctionnel.
- Pas besoin de faire des manips compliquées pour l'installation, tout est décrit ci-dessous.
- Anonymise les liens, pour que personne ne puis retrouver ce qu'on a mis derrière un lien.
- Anonymise les liens, pour que personne ne puisse retrouver ce qu'on a mis derrière un lien.
Ce n'est pas le cas sur LSTU, qui nous dit que le texte est déjà pris, mais du coup qui révèle le lien par la même...
Pour la confidentialité, c'est pas top.
- Vérifie que l'URL vers où rediriger existe bien. ça ne fait pas de lien mort d'avance. (Sauf si la page internet décède après création du lien...)
- Ne nécessite pas de database !!! Fonctionne avec un fichier csv.
- Aucune information utilisateur n'est enregistrée, aucune analyse des liens, ... Parce que l'ignorance, c'est le bonheur.
- Vérification par captcha, pour éviter les robots spammeurs.
- Connectable en api (qualibrée pour répondre à privatebin) Toutes les informations sont dans le fichier /api/lis-moi.txt
# INSTALLATION
......@@ -33,7 +38,8 @@ PersonaLink est un raccourcisseur et personnalisateur d'URLs codé en php, bien
Pour enlever le /d/ dans l'URL, et donc cacher le dossier, et raccourcir l'URL, voici la marche à suivre :
1. Sous un premier (sous-)domaine, installer le présent programme.
2. sous un second (sous-)domaine, déposer simplement un .htaccess contenant :
2. Dans le fichier config.php, renseigner la variable $urlcourte avec votre premier (sous-)domaine.
3. sous un second (sous-)domaine, déposer simplement un .htaccess contenant :
```
RewriteEngine on
......@@ -50,9 +56,8 @@ Pour enlever le /d/ dans l'URL, et donc cacher le dossier, et raccourcir l'URL,
Où il faut remplacer premierdomaine.fr par le premier domaine où l'on a installé le programme, c'est tout simple.
3. Dans le fichier a.php, renseigner en face de "$urlcourte =" l'url du second (sous-)domaine.
4. Dans le dossier /d/, modifier le fichier index.php pour qu'il renvoit vers https://premierdomaine.fr. C'est très important, sinon quand on tape l'adresse https://seconddomaine.fr, on voit tous les fichiers de redirection qu'il y a dans le dossier /d/ !!!
4. Dans le fichier a.php, renseigner en face de "$urlcourte =" l'url du second (sous-)domaine.
5. Dans le dossier /d/, modifier le fichier index.php pour qu'il renvoit vers https://premierdomaine.fr. C'est très important, sinon quand on tape l'adresse https://seconddomaine.fr, on voit tous les fichiers de redirection qu'il y a dans le dossier /d/ !!!
**Il n'y a rien d'autre à tripoter pour que ça fonctionne !**
......
User-Agent: *
Allow: /
Disallow: /*
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment