login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP]Gegevens beveiligd doorgeven

Offline Esli - 18/06/2010 19:19 (laatste wijziging 20/06/2010 16:47)
Avatar van EsliPHP interesse Hallo,

Ik ben momenteel wat aan het experimenteren. Ik zou graag een soort van licentie-systeem maken. Op zich, zit alles in mijn hoofd al klaar. De verwerking, de beveiliging, de soort controles etc. Alleen, het belangrijkste mankeert nog. Ik weet niet goed, hoe ik op een veilige manier, bepaalde gegevens kan doorgeven.

Ik ben van plan te werken met een licentie-server (wellicht dat ik op verschillende locaties het systeem draai, zodanig ik geen last heb van downtime). De site die een licentie nodig heeft, zal deze via die server (steeds) moeten valideren. Hij zal dus bepaalde gegevens automatisch doorgeven, zoals de licentie, het IP van de server, domeinnaam,... Mijn systeem dan, gaat op zijn beurt die gegevens nagaan. Indien deze goed bevonden is, zou mijn systeem enkele zaken moeten terugsturen. Daarbij een beveiligscode (die ik volgens een bepaald algoritme ga genereren, zodanig dat deze niet makkelijk te faken is) doorgeven en dergelijke.

Tot daar zit alles perfect in mijn hoofd klaar. Echter, hoe ga je op een veilige manier dat soort gegevens doorgeven. Ik moet iets hebben, wat vooral de output van mijn server wat beveiligd. Desondanks mijn "speciale" code, wil ik dat de klant niet zomaar kan zien wat er precies wordt uitgewisseld. Zelf had ik al zitten te denken aan Mcrypt, echter weet ik niet of dit wel een goed idee is (werkt al bij al vrij traag). Ik hoop dat mijn verhaal een beetje duidelijk is, en dat jullie me verder kunnen helpen.

Even voor alle duidelijkheid, mijn broncode zal ook nog eens netjes worden encoded (wellicht dat ik voor Zend ga).

Mvg,
Esli

25 antwoorden

Gesponsorde links
Offline UpLink - 18/06/2010 19:30
Avatar van UpLink ... gegevens uitwisselen via PHP en XML ?

Ik ben zo geen expert op dat gebied, maar ik weet wel dat het zo kan.
Qua veiligheid kan je misschien met htaccess de XML-files beschermen zodanig dat ze alleen bereikbaar zijn door bepaalde IP's ofzo.

Ik zeg het nog eens... ik ben geen expert, maar dat is mijn zicht op de zaken zoals jij het uitlegd.
Offline ProjectWebdesign - 18/06/2010 19:41
Avatar van ProjectWebdesign Lid Wat evt. een oplossing is om gewoon een licensie database te hebben waarmee de client systemen verbinding maken en hun gegevens controleren.
Ikzelf ga op deze manier ook een licensie maken in mijn CMS.

Verder gebruik ik ionCube (http://www.ioncube.com/) voor de encoding van de code.
Offline Esli - 19/06/2010 09:31
Avatar van Esli PHP interesse @Uplink,

Ik ga het zeker eens gaan bekijken, maar ik vrees dat het niet veilig genoeg is. Eens de klant doorheeft dat het enkel met dat IP lukt, mag je zeker van zijn dat ze met dat IP wat meer zullen proberen dan dat de bedoeling is.

@ProjectWebdesign

Daar heb ik ook al zitten over na te denken. Het probleem is, niet alle hostst laten toe om te verbinden met een externe SQL-server. Verder zit je dan ook met het probleem dat je hun (uiteraard beperkte) toegang tot de licentie-database moet geven, en daar zit volgens mij ook al geen gevaar in.

Offline ProjectWebdesign - 19/06/2010 11:46 (laatste wijziging 19/06/2010 11:47)
Avatar van ProjectWebdesign Lid Ik heb net even zitten denken en ik denk wat UpLink zegt geen gek idee is.
Op de licentie server laat je een database + php script draaien.
Dat PHP script is om een XML request te verwerken.

In jou systeem maak je ergens een XML request naar het PHP script op jou licentie server en je geeft een paar parameters mee dmv. van GET's.

Dus je doet bijv:
  1. simplexml_load_file('website?licensie=123456789&domein=test.nl&hash=hash van licensie + domeinnaam in een');


Jou PHP script op de licentie server controleert deze gegevens dan uit de database en geeft een XML file terug met informatie van de licentie.
Daarmee kan je simpelweg controleren en zit je niet met externe SQL toegang te werken.
Offline Esli - 19/06/2010 18:35
Avatar van Esli PHP interesse Eerst en vooral, momenteel ken ik nog niet veel (lees als: niets) van XML.

Maar je geeft aan dat ik met GET's zou moeten werken, echter zijn GET's toch wel iets te hard te manipuleren. Ik zou sowieso al kijken vanaf welk domein en/of welk IP de request vandaan komt.

Kent er per toeval iemand een tutorial die dit soort toepassingen ivm XML weergeeft?
Offline ProjectWebdesign - 19/06/2010 19:03
Avatar van ProjectWebdesign Lid Voor uitleg over XML zou je hier eens kunnen kijken: http://php.net/manual/en/book.simplexml.php

Maar over de GET's, dit maakt niks uit. In jou client systeem maak je gewoon een config file waar de serial enzo inkomt.
Ergens in een encoded bestand zit de request naar de licentie server die de gegevens uit de config haalt. Verder kan je IP en domein met de $_SERVER constante ophalen.

Op je licentie server bouw je in het PHP script gewoon voldoende beveiliging in.
Dus op waarden die je in een query gebruikt, gooi je die eerst door de functie: PHP.net: mysql_real_escape_string
Als je goede beveiliging inbouwt kunnen de GET's manipuleren, maargoed wat schieten ze ermee op. Hun systeem werkt dan niet meer.
Offline Esli - 19/06/2010 21:45 (laatste wijziging 19/06/2010 22:47)
Avatar van Esli PHP interesse Bedankt voor de reactie.

Nu ja, je hebt wel een punt, als ze gaan prutsen met de "GET", krijgen ze toch een "negative". Verder gebruik ik geen mysql_... functies, lang leve PDO (bindparam, heeft automatische beveiliging)

edit
Ik heb het even bekeken, maar ik zie niet direct wat het qua veiligheid te bieden heeft. Ik zou dus iets simpel willen. Ik ontvang (op welke manier dan ook) gegevens van de klant (IP, licentie,...), en dan wil ik op een veilige manier een array als output geven.

  1. [geldig] => 1,
  2. [datum] => timestampje,
  3. [versie] => 0.1,
  4. [hash] => drugs
  5. )


Ik zie niet direct in hoe ik nu m.b.v. XML dit stukje veilig kan doorgeven, zonder dat de klant het kan onderscheppen.
Offline UpLink - 20/06/2010 09:30 (laatste wijziging 20/06/2010 09:32)
Avatar van UpLink ... Er bestaat toch zoiets als SSL ?

Linux SSL Certificates HOWTO

OF

OpenSSL

Naar mijn mening is zo'n lijn veilig genoeg (als je dit kan en mag gebruiken)
Offline Koen - 20/06/2010 10:38
Avatar van Koen PHP expert http://www.phph...71579/last/

Doe op z'n minst de moeite om je nickname aan te passen...
Offline TotempaaltJ - 20/06/2010 10:48
Avatar van TotempaaltJ PHP interesse @Koen: Waarom is het erg als hij de vraag op twee websites zet? Lijkt me juist handiger: je vergroot de kans op een goed antwoord!

Wel eens van OpenSSL gehoord... Is dat veilig genoeg? Je weet wel, de een vraagt superveel geld, de ander is gratis... Lijkt me toch dat de betaalde beter is?
Alhoewel, ik weet niet hoe SSL werkt, dus misschien kan dat ook wel niet. Daarbij heb je misschien niet de beste beveiliging nodig...
Offline UpLink - 20/06/2010 11:10
Avatar van UpLink ... Hij wil een beveiligde doorgave van gegevens, maar hij weet niet hoe het moet...
Ik ben zelf geen PHP expert om dat allemaal uit te leggen, dus lijkt mij SSL wel geschikt...

De browsers geven aan dat het een beveiligde lijn is, dus dat geeft de klanten ook weer een iets veiliger gevoel...

SSL kost inderdaad wel iets, maar openSSL is open-source en daarom niet altijd slechter dan betalende versies...
Offline TotempaaltJ - 20/06/2010 12:11
Avatar van TotempaaltJ PHP interesse Ik zeg niet dat open-source slechter is dan closed, maar gewoon door het gigantische prijsverschil bij SSL, leek het me logisch dat het zo was.
Offline Koen - 20/06/2010 12:31
Avatar van Koen PHP expert
TotempaaltJ schreef:
@Koen: Waarom is het erg als hij de vraag op twee websites zet? Lijkt me juist handiger: je vergroot de kans op een goed antwoord!


Getuigt niet helemaal van respect, vind je niet?
Offline UpLink - 20/06/2010 12:39
Avatar van UpLink ... SSL geeft idd betere ondersteuning en support dan OpenSSL...

Bij de meeste Open-Source dingen zijn er FAQ's en beperkte support omdat dit allemaal gratis gemaakt werd/word...

SSL is betalend en bied dan ook een betere support...

Maar dit wil niet zeggen dat open-source ook niet mintens evengoed is als betalende versies...
Ik denk dat je toch beter een open-source project gebruikt als het toch niets gaat opbrengen... Als het wel wat opbrengt kan je inderdaad gaan denken aan de commerciele versie...
Offline Esli - 20/06/2010 15:18 (laatste wijziging 20/06/2010 15:20)
Avatar van Esli PHP interesse @Koen,

Dat is inderdaad niet aangepast, maar is dat relevant: nee. Ik wil gewoon zo'n groot mogelijk publiek bereiken, naar mijn mening is er niets mis met het feit dat ik hier en daar hetzelfde bericht post. Ivm respect Koen, als je een auto koopt, kijk jij ook niet naar verschillende dealers? Als jij gaat winkelen, kijk jij niet in welke winkel het voordeligst is? Dit is nét hetzelfde, ik heb respect voor alle partijen, maar ik probeer een zo goed mogelijk antwoord op mijn probleem te vinden. Maar goed, back on-topic.

SSL is een mogelijkheid. Echter brengt deze gewoonweg te veel kosten bij. Je hebt een IP nodig, iets waar providers geld voor vragen (logisch). Indien je van een gratis certificaat gebruikt, krijg je van die meldingen, wat sommige klanten kan afschrikken.

Reken dan ook, als ik meerdere licentie-servers wilt (om downtime tegen gaan), moet ik dit hierboven allemaal meermaals gaan betalen. Tegen met een methode met PHP, kan ik gewoon bij enkele partijen een goedkoop hostingpakket afnemen en de databases laten synchroniseren.

Als ik nu toch voor SSL zou gaan, dan moet ik dit naar de koper gaan doorrekenen. Mits ik niet van plan ben het op grote schaal te gaan verkopen, lijkt me dit oninteressant. (Reken nog maar 100 € / jaar extra voor 1IP & certificaat [wat nog goedkoop is], 10 klanten = 10€/klant per jaar erbij, is toch direct veel)

Ik zoek dus echt iets wat te verwezenlijk is met PHP. (of een andere open source taal, die op linux kan functioneren).
Offline UpLink - 20/06/2010 17:50 (laatste wijziging 20/06/2010 18:00)
Avatar van UpLink ... nog eens... OpenSSL is open-source en dus GRATIS... er staan HOWTO`S op de site van openSSL dus problemen met ?rare meldingen? zijn dan snel opgelost... ik denk dat zoiets met PHP veel meer werk is en meer tijd in beslag neemt dan je SSL en certificaten even op te stellen... en als je meerdere servers zal hebben, heb je ook bij elke server een apart IP... dus een meerkost heb je in principe niet
Offline Esli - 20/06/2010 18:36
Avatar van Esli PHP interesse Ik begrijp dat een certificaat gratis is, maar een IP blijft betalend. Hosting-providers kunnen het als shared gebruiken of als dedicated. Het is vaak zo dat meerdere dedicated servers gewoon op 1 shared draaien. Wat voor hen dus erg goedkoop is, ze laten enkel de hostname veranderen. Als ik dus een certificaat wil, dan is dat voor hun een meerkost, die zij logisch der wijs aan mij doorrekenen.
Offline TotempaaltJ - 20/06/2010 18:42
Avatar van TotempaaltJ PHP interesse
UpLink schreef:
nog eens... OpenSSL is open-source en dus GRATIS...
Open source is niet per definitie freeware en dus gratis, of zoals jij het zegt, GRATIS
Offline Esli - 20/06/2010 20:38 (laatste wijziging 20/06/2010 20:38)
Avatar van Esli PHP interesse
  1. <?php
  2.  
  3. if (isset($_SERVER['HTTPS']) )
  4. {
  5. echo "SECURE: This page is being accessed through a secure connection.<br><br>";
  6. }
  7. else
  8. {
  9. echo "UNSECURE: This page is being access through an unsecure connection.<br><br>";
  10. }
  11.  
  12. // Create the keypair
  13.  
  14. // Get private key
  15. openssl_pkey_export($res, $privatekey);
  16.  
  17. // Get public key
  18. $publickey=openssl_pkey_get_details($res);
  19. $publickey=$publickey["key"];
  20.  
  21. echo "Private Key:<BR>$privatekey<br><br>Public Key:<BR>$publickey<BR><BR>";
  22.  
  23. $cleartext = '1234 5678 9012 3456';
  24.  
  25. echo "Clear text:<br>$cleartext<BR><BR>";
  26.  
  27. openssl_public_encrypt($cleartext, $crypttext, $publickey);
  28.  
  29. echo "Crypt text:<br>$crypttext<BR><BR>";
  30.  
  31. openssl_private_decrypt($crypttext, $decrypted, $privatekey);
  32.  
  33. echo "Decrypted text:<BR>$decrypted<br><br>";
  34. ?>


Ik vond dit op PHP.net, bij de comments. Kan ik op deze basis netjes werken? (Dit werkt nu al zonder enige configruatie, bij de ene server kan ik wel geen https gebruiken, maar het lijkt me geen "supernoodzaak"?
Offline UpLink - 20/06/2010 22:51
Avatar van UpLink ... dit script werkt met openSSL...
Offline Esli - 21/06/2010 12:20
Avatar van Esli PHP interesse Dat weet ik, ik heb het ook daar gevonden. Maar is een "HTTPS" verbinding werkelijk nodig, of is "HTTP" eveneens prima?
Offline Koen - 21/06/2010 13:57
Avatar van Koen PHP expert Nope, HTTP verkeer wordt gewoon raw verzonden, terwijl SSL steeds geëncrypteerd wordt.
Offline ArieMedia - 21/06/2010 16:05
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Misschien is SOAP de oplossing..

http://wiki.phpfreakz.nl/SOAP_en_PHP
Offline xSc - 22/06/2010 10:28
Avatar van xSc Onbekend Ik denk dat het een combinatie wel goed is. SSL i.c.m. webservice.
Offline Esli - 25/06/2010 12:28
Avatar van Esli PHP interesse Momenteel ben ik aan het kijken welke kosten er zouden bijkomen indien ik een eigen IP en dergelijke aankoop.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.206s