Sécuriser un script Php

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Sécuriser un script Php

Message par falsam »

J'aurais besoin de sécuriser un script Php exécuté depuis une application codée avec PureBasic.

■ Ce code simule la création d'un compte, la connexion et la déconnexion.

Code : Tout sélectionner

Enumeration
  #PR_Sign_Up
  #PR_Sign_In
  #PR_Sign_Out
EndEnumeration

Define url.s = "http://s242132022.onlinehome.fr/game01/"
Define script.s = "test.php"
Define parameters.s = "?process=" + #PR_Sign_In

Define header.s, buffer.s, *buffer 

InitNetwork()

header = GetHTTPHeader(url + script)
Buffer = StringField(Header, 1, #LF$)

If FindString(Buffer, "200 OK")
  *buffer = ReceiveHTTPMemory(url + script + "/" + URLEncoder(parameters))
  
  If *buffer
    Size = MemorySize(*buffer)
    buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
    FreeMemory(*buffer)
  EndIf
  
  Debug buffer
Else
  Debug "connexion failed"
EndIf
■ Le script php test.php exécuté depuis le code PureBasic

Code : Tout sélectionner

<?php
	define("PR_Sign_Up", 0);
	define("PR_Sign_In", 1);
	define("PR_Sign_Out", 2);
	
	if (isset($_GET['process'])) {
		switch (($_GET['process'])) {
			case PR_Sign_Up :
				echo "Account create";
				break;

				case PR_Sign_In :
				echo "welcome";
				break;
			
			case PR_Sign_Out :
				echo "bye";
				break;
			
			default:
				echo '-1';
		}
	}	
?> 
:?: Comment empêcher l’exécution du script php en ligne de commande ?
Exemple : http://s242132022.onlinehome.fr/game01/ ... ?process=1

:idea: La piste que je vois actuellement est d'envoyer un ou plusieurs paramètres supplémentaires comme le nom de l'application et la taille de l'application et de tester ces paramètres depuis le script php.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Sécuriser un script Php

Message par Marc56 »

Il faut que tu utilises le mécanisme des sessions.
Si tu ne veux pas imposer de cookie à tes clients, tu peux passer l'ID de session par URL.
Si tu ne veux pas qu'ensuite quelqu'un d'autre réutilise l'URL avec ID tu stocke l'ID en base de données et tu le verrouille au logout ou après un certain délai.

(de mémoire, car ça fait plus de 10 ans que je n'ai plus fait cela, donc ne compte pas sur moi pour plus d'explications :cry: )
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sécuriser un script Php

Message par falsam »

Marc56 a écrit :Si tu ne veux pas imposer de cookie à tes clients, tu peux passer l'ID de session par URL.
Cookies ou paramétrés je sais faire dans le cadre d'un dev 100% web.

Avec PureBasic je ne suis pas certain qu'on puisse gérer des cookies et des variables de session. En tout cas je ne sais pas faire.

session_start() depuis PB ça va être compliquer :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Marc56
Messages : 2146
Inscription : sam. 08/févr./2014 15:19

Re: Sécuriser un script Php

Message par Marc56 »

session_start() depuis PB ça va être compliquer
:arrow: RunProgram("php", "-f " + script, "" etc)

Même si PHP s'utilise le plus souvent en tant que module, et pour des applis web, c'est un langage script à part entière

Code : Tout sélectionner

EXE = RunProgram("C:\PHP\PHP.EXE", "-v", "", #PB_Program_Open | #PB_Program_Read)
If EXE 
    While ProgramRunning(EXE)
        If AvailableProgramOutput(EXE)
            Debug ReadProgramString(EXE) 
        EndIf
    Wend 
    CloseProgram(EXE)
EndIf
php -f file

:arrow: Depuis la v4? 5 ? il peut même agir comme son propre serveur web
PHP -S <addr>:<port> Run with built-in web server

:wink:
Dernière modification par Marc56 le mar. 24/avr./2018 17:13, modifié 3 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Sécuriser un script Php

Message par Ar-S »

Tu ne peux pas créer une variable $truc vierge dans ton php qui serait initialisé par PB lors du lancement ?
Si oui à ce moment dans ton script tu check la longueur de $truc..

Code : Tout sélectionner

<?php
si strlen($truc) == 0 alors ;
echo 'Get out b!tch !';
?> 
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Sécuriser un script Php

Message par djes »

Tu peux bricoler ton propre système de vérification, tu crées un code selon un algo perso en pb, et le décodeur en php pour vérification. Simple et efficace. D'ailleurs je me demande si je n'en avais pas posté un il y a un moment déjà.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sécuriser un script Php

Message par falsam »

@Marc : Je ne cherche pas à lancer Php.exe.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Sécuriser un script Php

Message par GallyHC »

Bonjour,

Pour moi le plus simple est d'utiliser le "useragent" avec un codage personnel qui change en fonction de (a toi de faire)... Pour cela en PB cela donne :

Code : Tout sélectionner

ReceiveHTTPMemory (.............., #PB_HTTP_Asynchronous, **le codage perso du useragent**)
et en PHP :

Code : Tout sélectionner

if ($_SERVER['HTTP_USER_AGENT'] != '**la verification du useragent**')
{
	echo "forbidden";
	exit();
}
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
TazNormand
Messages : 1294
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Sécuriser un script Php

Message par TazNormand »

Salut Falsounet,

Mets ton scripts php dans un dossier, et dans ce dossier, tu mets un .htaccess qui empêche l'accès extérieur. Comme ça ton "serveur" est le seul qui peut aller exécuter ton script.

Un peu dans ce style :

Code : Tout sélectionner

order deny,allow
deny from all
Normalement, ton code étant exécuté par ton "serveur", il pourra lancer le script via les permissions de dossier.

Un autre moyen est de stocker ton script php en dehors de ton dossier www : si ton serveur est du genre /home/var/www, tu crées un dossier /home/var/mesPHP et tu vas les chercher via "include"
Image
Image
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sécuriser un script Php

Message par falsam »

Merci Tazou mais je préfère pour le moment la solution de Gally.

La petite phrase qui fera le lien entre le code PB et PHP

Code : Tout sélectionner

Define useragent.s = "The quick brown fox jumps over the lazy dog."
Le md5 de cette phrase calculé par le script Php est "e4d909c290d0fb1ca068ffaddf22cbd0"

Code : Tout sélectionner

define("USER_AGENT_MD5", "e4d909c290d0fb1ca068ffaddf22cbd0");
■ Code PureBasic

Code : Tout sélectionner

Enumeration
  #PR_Sign_Up
  #PR_Sign_In
  #PR_Sign_Out
EndEnumeration

Define url.s = "http://s242132022.onlinehome.fr/game01/"
Define script.s = "testuseragent.php"
Define parameters.s = "?process=" + #PR_Sign_In

Define header.s, buffer.s, *buffer 

Define useragent.s = "The quick brown fox jumps over the lazy dog."

InitNetwork()

header = GetHTTPHeader(url + script)
Buffer = StringField(Header, 1, #LF$)

If FindString(Buffer, "200 OK")
  *buffer = ReceiveHTTPMemory(url + script + "/" + URLEncoder(parameters), #PB_HTTP_NoRedirect, useragent)
  
  If *buffer
    Size = MemorySize(*buffer)
    buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
    FreeMemory(*buffer)
  EndIf
  
  Debug buffer
Else
  Debug "connexion failed"
EndIf
■ Code Php

Code : Tout sélectionner

<?php
	define("PR_Sign_Up", 0);
	define("PR_Sign_In", 1);
	define("PR_Sign_Out", 2);
	
	define("USER_AGENT_MD5", "e4d909c290d0fb1ca068ffaddf22cbd0");
	
	if (isset($_GET['process']) AND (md5($_SERVER['HTTP_USER_AGENT']) == USER_AGENT_MD5)) {
		switch (($_GET['process'])) {
			case PR_Sign_Up :
				echo "Account create";
				break;

			case PR_Sign_In :
				echo "welcome";
				break;
			
			case PR_Sign_Out :
				echo "bye";
				break;
			
			default:
				echo '-1';
		}
	} else {
		echo "Go away ^-^";
	}	
?> 
Le code PureBasic renverra bien "Welcome" alors que le lancement manuel depuis un navigateur par exemple renverra "Go away ^-^"

:arrow: http://s242132022.onlinehome.fr/game01/ ... ?process=1

Merci pour toutes vos suggestions.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Sécuriser un script Php

Message par Ar-S »

J'ai essayé de bypasser ça, pas réussi :)
par contre si les gens ont ton exe, ça sera pas dur de trouver la variable.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sécuriser un script Php

Message par falsam »

Ar-S a écrit :si les gens ont ton exe, ça sera pas dur de trouver la variable.
Ils auront l'exe. Mais de cette manière le ou les variables du code seront compliquées à trouver je pense.

Code : Tout sélectionner

!macro ppublic name{
!if name eq _SYS_StaticStringEnd
!repeat $-_SYS_StaticStringStart
!load zczc from _SYS_StaticStringStart+%-1
!store zczc xor 137 at _SYS_StaticStringStart+%-1
!end repeat
!end if
!public name}
!public fix ppublic
CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
  !mov edi,_SYS_StaticStringStart
  !mov ecx,_SYS_StaticStringEnd-_SYS_StaticStringStart
  !@@:
  !xor byte[edi],137
  !inc edi
  !dec ecx
CompilerElse
  !mov rdi,_SYS_StaticStringStart
  !mov rcx,_SYS_StaticStringEnd-_SYS_StaticStringStart
  !@@:
  !xor byte[rdi],137
  !inc rdi
  !dec rcx
CompilerEndIf
!jnz @b


Enumeration
  #PR_Sign_Up
  #PR_Sign_In
  #PR_Sign_Out
EndEnumeration

Define url.s = "http://s242132022.onlinehome.fr/game01/"
Define script.s = "testuseragent.php"
Define parameters.s = "?process=" + #PR_Sign_Up + "&username=falsam&userpassword=fasilatrouver"

Define header.s, buffer.s, *buffer 

Define useragent.s = "The quick brown fox jumps over the lazy dog."

InitNetwork()

header = GetHTTPHeader(url + script)
Buffer = StringField(Header, 1, #LF$)

If FindString(Buffer, "200 OK")
  *buffer = ReceiveHTTPMemory(url + script + "/" + URLEncoder(parameters), #PB_HTTP_NoRedirect, useragent)
  
  If *buffer
    Size = MemorySize(*buffer)
    buffer = PeekS(*buffer, Size, #PB_UTF8|#PB_ByteLength)
    FreeMemory(*buffer)
  EndIf
  
  Debug buffer
Else
  Debug "connexion failed"
EndIf
Et bien entendu je ne me contenterais pas d'avoir une phrase de ce type.

Crée un exe avec ce code et cherches les variables avec un outil adéquate :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Sécuriser un script Php

Message par Ar-S »

Explique ce que fait cet asm 8O stp
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Sécuriser un script Php

Message par falsam »

Ar-S a écrit :Explique ce que fait cet asm 8O stp
C'est un code de User_Russian (Forum anglophone) donné par CaptainCrunch il y a pas mal de temps sur le chat de PureBasic. Dans le détail je ne te donnerais pas les explications. L'objectif est de cacher le contenu de chacune des variables.

Source http://www.purebasic.fr/english/viewtop ... 52#p468652

On le trouve aussi sur le site de Gally http://www.koakdesign.info/pbfrance/?ur ... wer&val=69

J'avais fait un sujet dessus mais impossible de le retrouver.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
GallyHC
Messages : 1703
Inscription : lun. 17/déc./2007 12:44

Re: Sécuriser un script Php

Message par GallyHC »

En fait cette macro de mémoire crypte tout les textes visibles (variables, constantes, tableaux, ....) avec un xor. Le cryptage ce fait à la volé pendant la compilation et pour le décryptage c'est la même chose mais au lancement de l'application.

Je n'ai pas retrouver le topic de cette macro, mais ça fait déjà quelque temps et je l'utilise depuis j'avous ^^.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Répondre