[PHP] Bepaalde PHP functies vrijgeven aan gebruikers

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik zit er al een tijdje over te denken om de gebruikers van mijn cms net wat meer kracht in handen te geven dan het invullen van teksten met UBB codes. Zo is het soms makkelijk als je op een pagina een eenvoudige if ... then constructie zou kunnen bouwen.

Nu hebben veel applicaties, zoals Smarty, een nagenoeg compleet eigen scripting taal bovenop PHP lopen bouwen die gebruikers dergelijke functionaliteiten geeft.

Nu zat ik te denken: is het op de een of andere manier niet mogelijk om een bepaald deel van de PHP library beschikbaar te stellen voor de gebruikers? Pseudo:
PHP:
1
2
3
4
5
6
7
8
9
/* Toegankelijke functies voor CMS gebruikers (set_message is een 
 * zelf geschreven CMS functie)
 */
$functions = array('strtr', 'substr', 'time', 'date', 'set_message');

/* Toegankelijke constructors
 * - een foreach-loop bv. is dus niet toegestaan
 */
$constructors = array('for', 'if', 'else')

Ik heb ooit een open-source project gezien dat hierover ging. Elke functie werd als een object gezien waar je bepaalde rechten op had. Was alleen ASP Classic. Hoe dan ook; ik kon hem niet meer vinden. Wie heeft hier ideeen over?

[ Voor 17% gewijzigd door Reveller op 08-10-2005 18:00 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik denk dat je een compleet eigen formaat zou moeten maken, waarin je "PHP-code" kunt schrijven, dat je vervolgens in PHP zelf kan parsen. PHP zelf biedt er AFAIK geen functionaliteit voor, en persoonlijk vind ik dat ook niet erg. Als je iemand scripting-mogelijkheden wil geven, dan kun je ervanuitgaan dat ie kan programmeren. Kan ie dat niet, dan kan ie beter überhaupt niet kunnen scripten.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Simpele dingen als if... then zou je toch best door je "UBB" kunnen laten afhandelen? Het lijkt me erg belangrijk gebruikers op dat niveau niet direct toegang te geven tot je code-laag, omdat je dan geen controle meer hebt over de status van je programma.

Als mensen meer kunnen en wíllen zullen ze, zoals -NMe- zegt, heus wel echt kunnen programmeren. Biedt dan een goede en eenvoudige manier aan om je applicatie te extenden. OO komt dan wel veel meer in zicht, trouwens, lijkt me. Laat ze desnoods alleen functies schrijven die als ze volgens een bepaalde build-up zijn in de templates en/of binnen de client kant te gebruiken zijn.

DM!


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Ik denk dat Smarty toch wel een goede keus is daarvoor. Volgens mij kan je daar functies uitsluiten van gebruik in de 'templates'. Het kan misschien het ook andersom, hier staat iets: http://smarty.php.net/manual/en/variable.security.php
anders moet je een eigen uitbreiding op de Smarty class schrijven wellicht.

Je kan ook zorgen dat je de php-templates van je gebruikers eerst zelf checkt op bepaalde functies en dan middels eval parsed (eval zelf moet je dan als functie sowieso uitsluiten), daarbuiten kan je dan checken of de functies die er in de 'template' staan toegestaan zijn.

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Voor zover ik weet kun je enkel door middel van disable_functions en disable_classes in php.ini (en ook alleen daar, dus niet toevallig tijdens de runtime). Anders zit je inderdaad vast aan een template-engine oplossing zoals Flexy of Smarty.

Acties:
  • 0 Henk 'm!

  • TheWickedD
  • Registratie: Juli 2002
  • Laatst online: 02-04-2024
Ik ben geen programmeur maar ik lees dit tovallig.
Hoe wil je een gebruiker gaan tegenhouden andere functies te gebruiken? Een soort van parser inbouwen die checked op de " en ;?
en daarnaast, je kan toch constructies gebruiken als substr(other_function())? Ik denk dat dit veel te grote veiligheidsrisico's met zich meebrengt...
Naja, succes ermee
Pagina: 1