[PHP] Posten naar _self, gegevens naar extern script

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil een aantal services proberen te starten en stoppen via een webinterface. Dit doe ik uiteraard met een bashscript, maar deze wil ik wel enigzins veilig aanroepen voor iedere gebruiker apart.

Omdat voor iedere start of stop button een apart formulier teveel van het goede is en javascript toch niet als standaard "aan" gezien mag worden vinden sommige mensen wil ik het gewoon via PHP doen.

Ik laat de gebruiker inloggen en registreer in een sessie een login = TRUE en zijn userID. Tevens nog wat andere dingen, of ik kan meer toevoegen natuurlijk.

Op iedere regel van een service op een bepaald IP haal ik met een simpele query gewoon binnen welk IP en welke poort die service is, ik kan aan de hand van die controles een veld in de database eruit plukken waardoor ik weet welk script ik moet starten, stoppen of herstarten.

Hoe ga ik dit extra veilig laten zijn en ook flexibel ?

Ik dacht zelf aan een URL met het ip en de poort als variabele. Ik wil eigenlijk posten naar een extern script en zonder dat externe script te gebruiken om via een header terug te komen op de pagina waar mijn start stop buttons staan.

UIteraard zal ik de user nog verifieren aan de hand van de userID sessie variabele of deze wel deze service op deze poort op dit IP mag herstarten of stoppen.

Dat is allemaal redelijk basic en een beetje exec() werk.

Ik wil alleen even de discussie aanhalen hoe ik het beste de naar het script kan posten of de variabele kan sturen zonder dat iemand direct weet hoe ik mijn script van waarden voorzie zodat hij handmatig met het invullen van de variabelen in de adresbalk hetzelfde kan doen.

Ik dacht dus aan een extern script dat sowiezo de sessie controleert en nog iets in de sessie waar de user niet van weet dat het in de sessie staat. Als hij de pagina waar ik alleen de waarden heen post wil bezoeken zal hij worden terug gestuurd, aangezien hij een aantal zaken mist welke wel in zijn sessie staan maar in combinatie met de rest van de informatie die hij handmatig post of in via variabele in de adresbalk zet toch niet overeen komen.

Op een dergelijke manier met dubbele checks wil ik dus voorkomen dat een script zoals dat handmatig kan worden aangeroepen if() is je vriend.

Mijn vraag is sowieso, kan ik posten naar een ander script en toch op de pagina aanwezig blijven waarvan ik post, dus alleen een soort van refresh ?

Kan ik variabelen posten zonder formfields naar een form, dit zal denk ik alleen met een javascript gaan.

Waarom zonder form ? Ik zou anders per service 3 forms krijgen, tel maar uit bij meerdere services.

Wat is een goede maar toch "listige" manier om een gebruiker toch deze acties uit te kunnen laten voeren maar voor hem handmatisch vrij weinig over te laten ?

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
HTML:
1
2
3
4
<form method='post' action=''>
  <input type='hidden' name='variable' value='some value'>
  <input type='submit' value='Submit'>
</form>


Of begrijp ik je nu verkeerd? :?

En het heeft geen nut iets in de sessie te zetten waar de user niets van weet. Ik denk dat je niet goed begrijpt hoe sessies werken: alle gegevens staan op de server en zijn onzichtbaar voor de gebruiker - die krijgt alleen een ID mee wat hij weer bij elke pagina-aanroep verstuurt (in de header) naar de server, die aan de hand daarvan de koppeling maakt met ID en gegevens.

Ik weet niet hoe extern je externe script is, als het op een ander domain staat moet je er rekening mee houden dat je sessies niet kan overdragen en cookies niet beschikbaar zijn op een ander domain.

[ Voor 61% gewijzigd door FragFrog op 03-09-2007 12:15 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Je kunt iedere submit button een andere naam geven. Alleen de button waarop geklikt is wordt dan als request variabele meegestuurd en zo kun je dus kijken op welke button is geklikt. Op die manier kun je dus meerdere typen submits in 1 formulier opnemen die allen een andere actie uitvoeren.

Verder vind ik je verhaal een beetje onduidelijk. Je hebt dus een HTML formulier die je naar een PHP script wilt posten en je wilt kijken hoe dit veilig moet? Je kunt moeilijk voorkomen dat de gebruiker zelf zaken gaat invullen, dit is bijna altijd op een of andere manier wel mogelijk. De beste beveiliging is zorgen voor een goed authenticatie systeem en alle input gegevens grondig controleren tegen de rechten van de huidige user. Dan kan er in principe weinig misgaan.

Probeer dit maar eens:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php

var_dump($_POST);

?>
<form method="post">
    <input type="submit" name="button1" value="Type 1">
    <input type="submit" name="button2" value="Type 2">
    <input type="submit" name="button3" value="Type 3">
</form>

[ Voor 15% gewijzigd door Michali op 03-09-2007 12:25 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Externe scripts die sessie variabelen uit moeten lezen? Php als vervanging van javascript? Ik vermoed dat er hier een enorme verwarring over server en clientside bestaat bij de topicstarter.

Daarnaast lijkt het me een ernstig becveiligings risico om toe te staan dat er via een requestje services kunnen worden ge/her start/stopt

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Ik vermoed ook zoiets. Bij de volgende zin moet overigens ook goed overdacht worden of dit wel echt waar is, want dit is meestal niet het geval. Zelfs niet als je pagina geheel toegankelijk moet zijn:
... en javascript toch niet als standaard "aan" gezien mag worden ...

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Michali schreef op maandag 03 september 2007 @ 12:13:
Je kunt iedere submit button een andere naam geven. Alleen de button waarop geklikt is wordt dan als request variabele meegestuurd en zo kun je dus kijken op welke button is geklikt. Op die manier kun je dus meerdere typen submits in 1 formulier opnemen die allen een andere actie uitvoeren.

Verder vind ik je verhaal een beetje onduidelijk. Je hebt dus een HTML formulier die je naar een PHP script wilt posten en je wilt kijken hoe dit veilig moet? Je kunt moeilijk voorkomen dat de gebruiker zelf zaken gaat invullen, dit is bijna altijd op een of andere manier wel mogelijk. De beste beveiliging is zorgen voor een goed authenticatie systeem en alle input gegevens grondig controleren tegen de rechten van de huidige user. Dan kan er in principe weinig misgaan.

Probeer dit maar eens:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php

var_dump($_POST);

?>
<form method="post">
    <input type="submit" name="button1" value="Type 1">
    <input type="submit" name="button2" value="Type 2">
    <input type="submit" name="button3" value="Type 3">
</form>
Dit bedoel ik dus. Aan de hand van goede auth checks kun je het alleen op de best mogelijke manier beveiligen.

offtopic:
Ik moet eerlijk zeggen dat ik wat posts hier redelijk nutteloos vind, aangezien 90% van heir wel ergens een webaccount heeft waar men ook via een button apache restart of dit via een cron gedaan wordt.

Gameservers Idem Dito, Webmin ook.


Ik weet overigens wel degelijk hoe sessies werken, maar aan de kant van de gebruiker blijven altijd zaken zichtbaar en je zal een keuze moeten maken welke zodat je niet sessie gerelateerde variabelen een keer terug laat komen in de code, dit lijkt me het meest linke.

OK, ik heb een goed overzicht.
Pagina: 1