php database-gegevens versleutelen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

G P

G P

17/02/2022 13:22:17
Quote Anchor link
Beste mensen,

Hoe kan ik onderstaande code in een versleutelde onleesbare taal omzetten zodat alles toch nog werkt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
session_start();
?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// variabelen initialiseren:
$username = "naam";
$password = "paswoord";
$host="localhost";
$dbnaam="databasenaam";

$db=mysql_connect($host, $username, $password) or die (mysql_error());
mysql_select_db($dbnaam, $db) or die (mysql_error());

$query="SELECT id, naam, adres, activiteit FROM activiteiten WHERE id='" . $_GET["id"] ."'";
$result = mysql_query($query) or die ("FOUT: " . mysql_error());
?>
Gewijzigd op 17/02/2022 13:23:47 door G P
 
PHP hulp

PHP hulp

21/11/2024 16:16:43
 
Ward van der Put
Moderator

Ward van der Put

17/02/2022 13:57:52
Quote Anchor link
Waarom wil je dat precies?

Als het je specifiek om het databasewachtwoord gaat: je kunt dat op verschillende manieren ergens anders in de serveromgeving opslaan.
 
- Ariën  -
Beheerder

- Ariën -

17/02/2022 14:13:20
Quote Anchor link
Als je het zou coderen moet je toch ergens op je server een sleutel parkeren. En als hackers toch al op je server zitten, hoeven ze alleen maar te zoeken naar de sleutel. Met andere woorden: Je bereikt er vrij weinig mee.

Je zou eventueel Zend SafeGuard of IonCube kunnen gebruiken om je scripts te encrypten. Maar je wilt je configuratie toch altijd aanpasbaar houden.

Beste advies is wel om het configuratiebestand buiten de webroot te zetten. Mocht PHP op je server ooit opeens door merkwaardige omstandigheden overlijden, waarbij jan-en-alleman de broncode zien, dan ligt je configuratie-file in ieder geval NIET op straat.

En bovendien:

mysqli_query()!!
Het wordt hoog tijd om je functies te upgraden naar mysqli of PDO.
Blijkbaar draai je nog niet eens PHP 7!

En verder zie ik ook een grote SQL-injection in je query!!!
Gewijzigd op 17/02/2022 14:17:27 door - Ariën -
 
Adoptive Solution

Adoptive Solution

17/02/2022 14:27:16
Quote Anchor link
Leesvoer.

https://mariadb.com/resources/blog/mariadb-encryption-tde-using-mariadbs-file-key-management-encryption-plugin/

https://webdock.io/en/docs/how-guides/security-guides/how-to-enable-encryption-mariadb

https://mariadb.com/kb/en/aes_encrypt/

Om de data weer te tonen, moet je de boel weer ontsleutelen.
Indexen, foreign keys e.d kan je beter niet versleutelen, daar je dan niet meer kan zoeken.

Een encryptie sleutel kan je bijvoorbeeld aanmaken met een Stored Function :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
RETURN CONCAT(
    LPAD(CONV(FLOOR(RAND()*POW(36,8)), 10, 36), 5, 0),
    LPAD(CONV(FLOOR(RAND()*POW(36,8)), 10, 36), 5, 0),
    LPAD(CONV(FLOOR(RAND()*POW(36,8)), 10, 36), 5, 0)
)


Die moet je dan opbergen op een geheime plaats.

Met een Stored Function, hieronder sfGetkey() genoemd, haal je die key weer op :

Versleutelen van de data kan dan met een Stored Function :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
BEGIN
SET @enckey = (SELECT `sfGetkey`() );
RETURN (HEX( AES_ENCRYPT ( deData, @enckey ) ) );
END


En het ontsleutelen weer met weer een Stored Function :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
BEGIN
SET @enckey = ( SELECT `sfGetkey`() );
RETURN ( AES_DECRYPT ( UNHEX( deData ), @enckey ) );
END


En dit is nog maar het begin.

Toevoeging op 17/02/2022 14:30:01:

PS Ik zie dat het om het versleuten van PHP moet gaan.

Kijk hier :

https://www.gaijin.at/en/tools/php-obfuscator

On the bright side, je kan nooit genoeg weten.
 
G P

G P

17/02/2022 15:52:40
Quote Anchor link
Bedankt jongens!

De reden waarom ik dit wil is omdat er ook andere gasten in de webruimte toelating gaan krijgen, en ik op die manier bepaalde scripts waar ik jarenlang aan gewerkt heb wil beschermen, zodat ze er niet mee gaan lopen.

De tool op https://www.gaijin.at/en/tools/php-obfuscator lijkt mij daarom ideaal. Merci!

Daaropaansluitend: kan ik bovenstaande code in een externe pagina plaatsen, om dan op de originele website dmv een include de database toch nog te laten werken? Bijvoorbeeld dit?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php require_once("www.website.com/databasegegevens.php"); ?>
Gewijzigd op 17/02/2022 15:53:18 door G P
 
- Ariën  -
Beheerder

- Ariën -

17/02/2022 16:07:36
Quote Anchor link
Die include gaat natuurlijk niet werken. Via de webserver zal www.website.com/databasegegevens.php een lege pagina geven als output. Daarnaast zijn include() en require() vooral bedoeld voor lokale bestanden.

Die obfuscator doet niet echt veel spannends. Met een simpel script maakt het de variabelen en functies korter. Menig getalenteerd PHP-er kan nog zo nog terug zien wat een script doet. Als je het wilt encoden (obfuscaten is wat anders) dan moet je echt kijken naar producten zoals Zend Guard of IonCube. Het zijn wel betaalde producten, maar je code is met geen mogelijkheid terug te halen. Wel moet de webserver waarop het uitgevoerd wordt dit ondersteunen, maar die extenties zijn zo geïnstalleerd.

Als je andere gasten (ik neem aan medewerkers) toe wilt laten in je webomgeving, dan raad ik je aan om een testdatabase voor hun klaar te hebben staan en een testomgeving. Bij voorkeur een database met geanonimiseerde gegevens, en laat ze uiteraard ook een NDA tekenen als je sterk wilt staan. Met obfuscaten voorkom je echt niks.

Zorg ook voor de juiste rechten op de server, zodat mensen die geen developer zijn niet zomaar bij de scripts kunnen komen. Met een goede werkomgeving zou encoden van scripts niet eens meer nodig zijn.
Gewijzigd op 17/02/2022 16:11:01 door - Ariën -
 
G P

G P

17/02/2022 16:15:55
Quote Anchor link
Merci! Dan weet ik al een beetje waar ik aan toe ben.

Waar ik vooral benieuwd naar ben: kan ik de databasegegevens ook veranderen zonder dat er een error komt?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$username
= "naam";
$password = "paswoord";
$host="localhost";
$dbnaam="databasenaam";
?>


Ik heb deze code ook door de tool getrokken om iets anders te krijgen, maar helaas werkt het script dan niet meer.
 
- Ariën  -
Beheerder

- Ariën -

17/02/2022 16:19:07
Quote Anchor link
Waarom zou je databasegevenens willen encrypten of obfuscaten (wat al helemaal niks uithaalt)? Je maakt het voor jezelf dan heel moeilijk om even je credentials aan te passen als het dringend nodig is. En ook developers maak je het lastig als ze even van database moeten wisselen.

Zorg liever dat je goede rechten hebt, en dat anderen niet bij je productieomgeving kunnen, plus dat ze een NDA tekenen waarin ze dus getekend hebben voor geheimhoudingsplicht.

Dat is zo een beetje de werkwijze bij elk bedrijf.
Gewijzigd op 17/02/2022 16:21:52 door - Ariën -
 
G P

G P

17/02/2022 16:24:55
Quote Anchor link
Fijn dat er nog andere mogelijkheden zijn, maar die wil ik niet toepassen. De vraag is niet waarom ik iets zou willen, maar eerder of iets mogelijk is, en hoe?

Ik vertrouw die gasten nu eenmaal niet, vandaar deze vragen. Maak je om mij maar geen zorgen ;-)
 
- Ariën  -
Beheerder

- Ariën -

17/02/2022 16:27:58
Quote Anchor link
Misschien moet je even duidelijk zeggen wie je met gasten bedoelt?
Die hebben toch niks te maken met je code te maken? Zet een wachtwoord op je computer, en het is klaar! Desnoods bitlocker of veracrypt op je PC om je schijf te beveiligen.
Gewijzigd op 17/02/2022 16:28:47 door - Ariën -
 
G P

G P

17/02/2022 16:31:47
Quote Anchor link
Maar is dit mogelijk? De rest is bijzaak.
 
- Ariën  -
Beheerder

- Ariën -

17/02/2022 16:32:59
Quote Anchor link
Ja, dat zeg ik net toch? maar het zou fijn zijn als je even duidelijk concreet vertelt wat de situatie nu precies is. Je hebt het over gasten, maar die hebben niks met je code te maken. Benoem ze anders even met de juiste titels.

Wees graag zo specifiek mogelijk.
Gewijzigd op 17/02/2022 16:33:40 door - Ariën -
 
G P

G P

17/02/2022 16:44:56
Quote Anchor link
Met gasten bedoel ik anderen die kunnen inloggen. Wat hierbij belangrijk is is dat ze het script niet kunnen lezen, en dat ze vooral niet kunnen achterhalen via welke databasegegevens dit gerund wordt.
 
- Ariën  -
Beheerder

- Ariën -

17/02/2022 16:49:23
Quote Anchor link
Gasten op een site bedoel je? Die kunnen nooit bij de PHP-code komen. Alles wat ze zien is HTML-output en andere statische dingen zoals JavaScript, CSS en afbeeldingen, en geen effectieve werkende code die dat genereert.

Dus je zorgen over obfuscaten zijn onnodig. Zorg wel dat de server zijn patches en updates krijgt en veilig is tegen aanvallen.
Gewijzigd op 17/02/2022 16:50:54 door - Ariën -
 
G P

G P

17/02/2022 16:53:08
Quote Anchor link
Ze kunnen inloggen in de webruimte, en kunnen daarmee alles zien.
 
- Ariën  -
Beheerder

- Ariën -

17/02/2022 16:54:17
Quote Anchor link
Zorg ervoor dat je goede rechten uitdeelt, en laat ze een NDA tekenen.
Mocht je merken dat iets uitgelekt is, dan sta je sterk tijdens een juridische zaak.

Denoods kan je de belangrijke code encrypten met Zend of IonCube. Maar doe dat liever niet met je database credentials. Externe partijen werken maar lekker in een testdatabase.
Gewijzigd op 17/02/2022 16:57:42 door - Ariën -
 
G P

G P

17/02/2022 16:55:32
Quote Anchor link
Laat maar. Ik geef het op.
 
- Ariën  -
Beheerder

- Ariën -

17/02/2022 16:57:13
Quote Anchor link
Ik heb adviezen gegeven, maar als je er niks mee wilt doen, dan ligt het bij jou:

- Rechten instellen
- NDA contract
- IonCube of Zend
- Gebruik een test-database met dummy gegevens.

Tja...
Gewijzigd op 17/02/2022 16:58:01 door - Ariën -
 
G P

G P

17/02/2022 17:03:46
Quote Anchor link
Heb het intussen gevonden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$username
=base64_decode("abcdef");
$password=base64_decode("abcdef");
$host=base64_decode("abcdef");
$dbnaam=base64_decode("abcdef");
?>


Dit werkt en geeft geen conflicten :-)
 
- Ariën  -
Beheerder

- Ariën -

17/02/2022 17:06:27
Quote Anchor link
Ook dat is een lachertje...
Dat is zo te encoden met base64_encode. Heb je dus niks aan!

Gebruik gewoon een testdatabase, testomgeving, en encrypt je gevoelige scripts met IonCube of Zend.

Hoe moeilijk wil je het zelf maken terwijl de ingrediënten voor je neus liggen?

https://www.ioncube.com/
https://www.zend.com/downloads/zend-guard
Gewijzigd op 17/02/2022 17:08:45 door - Ariën -
 
Ozzie PHP

Ozzie PHP

17/02/2022 17:24:21
Quote Anchor link
G P

Er wordt niet voor niets meerdere malen gevraagd wat je wil bereiken.

Ik ga de vraag ook even stellen:

WAT (welke gegevens) wil je VOOR WIE onzichtbaar maken.

Dus 1) wat en 2) voor wie?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.