Als je een programma hebt gemaakt met PHP is het open source, omdat PHP een scripttaal is.
Je kunt het programma aanbieden via SaaS met servers in eigen beheer, zodat de code onbereikbaar is voor klanten.
Maar hoe ga je om met een klant die SaaS On Premise wil?
Wat zijn de opties om het bedrijfsgeheim te borgen, om te voorkomen dat je in een rechtbank belandt?
Je kan er voor kiezen om je code te encoden in ioncube of zend.

Verder is alles wat je in PHP maakt niet direct open source. Dus je eerste stelling klopt niet echt ;-)
Dat PHP een scripttaal is maakt nog niet dat alles wat je er mee maakt open source is.
Open source is een licentiemodel (met vele subsoorten zoals Apache, GPL, etc) dat los staat van of de source leesbaar is of niet. Iets kan prima in PHP geschreven zijn en closed-source zijn.

Als een klant een SaaS oplossing on-prem wil hebben (wat het per definitie geen SaaS meer maakt) en het is een PHP-applicatie heb je m.i. 3 opties:
- Licentie waarin je verbied kopieën te maken
- Code obfuscation
- Compileren naar een .phar bestand

Die laatste 2 vind ik vrij onzinnig, dat is vaak redelijk eenvoudig ongedaan te maken.
Het hangt allemaal op vertrouwen, vertrouw jij dat je klant zich aan de gegeven licentie houd?
Als dat niet het geval is zou ik de opdracht weigeren, dat betekent bijna gegarandeerd een rechtszaak in de toekomst.
Of je in een rechtszaak terecht komt is afhankelijk van de rechtspersoon die verantwoordelijk is voor de programma-code, in dit geval dus het php.
Als je een pakket verkoopt dan ontkom je bijna niet aan de verantwoordelijkheid alhoewel je veel kan uitsluiten. Voorbeeld: Microsoft neemt ook geen enkele rechterlijke verantwoording voor alle bugs en hacks...
Als je programmeert in opdracht, je verhuurt jezelf als programmeur, dan kan je het wel aftimmeren dat de klant/opdrachtgever zelf verantwoordelijk is. De klant moet testen, beoordelen, afnemen en vrijwaren. Als de klant zelf niet deskundig genoeg is kan hij dat uitbesteden. Kortom het is zoals je het contractueel aftimmert.
Heb naar aanleiding van jullie posts (dank!) een beetje gesurfd:
- Zend Guard lijkt me niet meer van deze tijd, het gaat maar tot en met PHP 5.6.
- PHAR klinkt interessant, maar kan je voorkomen dat een klant bij de PHP code kan door het te signen?
- IonCube klinkt het meest interessant omdat aangegeven wordt dat het compileert naar bytecode. Wat zijn jullie ervaringen? Ik vrees nog voor aanbieders van decoding tools als https://www.unzend.com

Ik heb een alternatief (omschrijven naar C++) maar dan mis je alle voordelen van PHP, daar zit ik niet direct op te wachten.
IonCube zeker weten! Het kost een beetje maar doet zeker weten zijn dienst!
Dan ga ik de trial van IonCube binnenkort uitproberen.

Het enige probleem dat er dan nog overblijft is PostgreSQL.. als je geen root bent van de server, hoe voorkom je dat de klant de databasestructuur kan inzien en queries kan volgen?

In de database zitten een paar ideeën die ik niet graag laat zien, omdat de klant zelf programma's ontwikkelt die enigzins overlappen met de functionaliteit die ik aanbied.
Dat zal denk ik niet met IonCube (of C++) op te lossen zijn, dan moet de logica toch verschuiven naar het programma?
Als de klant zelf beheerder is van de database server word dat inderdaad lastig. Je kan de data die er instaat wel encrypten maar de structuur zelf denk ik niet.
Als ze ook beheerder zijn van de onderliggende host (en dus de configuratie) houd niets ze tegen om queries te dumpen.
Je kan gaan voor "security by obscurity" maar dat werkt ook maar tot op zekere hoogte, de logica-truukjes naar de PHP-kant verschuiven lijkt mij dan "beter".
Dus de klant wil dat de code op zijn eigen server staat? Begrijp ik dat goed?

Weet je ook waarom de klant dat wil? Als de klant de code niet kan/mag aanpassen, waarom wil hij dan dat de code op z'n eigen server staat en niet op die van jou? Wat is voor hem het voordeel daarvan?
De klant wil dat graag omdat er beperkingen aan SaaS zitten.
Een beperking is dat de klant niet zijn eigen gegevens in huis heeft, waardoor er risico is op het niet kunnen benaderen van de eigen gegevens.
Een ander nadeel is dat een SaaS systeem lastig is te koppelen met de eigen systemen van de klant. Denk aan connecties met databases van andere applicaties, provisioning via AD, SSO.

Dus SaaS "On Premise" (hoewel een contradictio in terminis) heeft enige voordelen; ik krijg PaaS van de IT-leverancier van de klant, zetten daar onze software op, en bieden het aan als SaaS aan de klant. (De klant bestaat uit meerdere dochterorganisaties).

En SaaS "On Premise" heeft nadelen, omdat het programma daar nog niet eerder voor gemaakt is moeten er enige aanpassingen gedaan worden om de code veilig te stellen tegen ongeautoriseerd gebruik, in het kader van bedrijfsgeheim.

[size=xsmall]Toevoeging op 02/03/2021 20:55:45:[/size]

Wat PostgreSQL betreft kan je het breder zien. Wanneer je privacygevoelige gegevens opslaat in een database van je website of programma, en je wilt het elders laten hosten op een VPS in de cloud, hoe borg je de gegevens?
Uiteindelijk is het veel eenvoudiger om door een audit te komen als je programma gecertificeerd is (ISO-27000, NEN-7510..)

Standaard biedt PostgreSQL een aantal mogelijkheden voor versleuteling.

Voor PostgreSQL lijkt de beste manier TDE (transparente gegevensversleuteling) wat gebruik kan maken van hardware versnelde encryptie voor data in rust (op schijf). In de wiki staat dat ze het misschien wel standaard willen gaan implementeren, maar ze zijn er nog niet uit of en hoe dan precies. Ondertussen heeft CyberTec een patch waarmee het wel moet kunnen.
Een ander artikel dat het vermelden waard is: https://www.highgo.ca/2019/09/30/the-transparent-data-encryption-in-postgresql

Maar TDE helpt maar gedeeltelijk. De grootste uitdaging is: hoe versleutel je de gegevens en -overdracht terwijl gegevens ook doorzoekbaar blijven? Of 'searchable symmetric encryption' in jargon.
Al zoekende krijg ik resultaten als deze. Het is weinig triviaal en ik heb er nog niet eerder mee gewerkt, maar het moet mogelijk zijn in PostgreSQL om te implementeren.
Er zijn ook eenvoudiger voorbeelden zoals deze.

Ik hoop dat dit het probleem oplost, maar hopelijk heb je nog een beter idee?
Heeft de klant die beperkingen ook dusdanig benoemd, deze bedoel ik:

"Een beperking is dat de klant niet zijn eigen gegevens in huis heeft, waardoor er risico is op het niet kunnen benaderen van de eigen gegevens.
Een ander nadeel is dat een SaaS systeem lastig is te koppelen met de eigen systemen van de klant. Denk aan connecties met databases van andere applicaties, provisioning via AD, SSO."

Of is dit een vermoeden wat jij hebt?

Als de klant via een verbinding bij de gegevens kan, wat is dan dat risico van het niet kunnen benaderen van de eigen gegevens? Hoe reëel is dat risico dat hij er ineens niet meer bij zou kunnen? Anders gezegd ... is het überhaupt wel een risico?

Wat betreft het leggen van (database) connecties met andere applicaties, kan dat niet op afstand?

Ik probeer de mogelijke redenen/gevoelens van de klant niet te bagatelliseren ... maar wellicht kun je ze wegnemen?

Reageren