[PHP] Formulier exploits

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 09:34
Dames/Heren,

Ifv http://gathering.tweakers...list_messages/760991/last

Ben bezig. Geweldig zult U nu denken maar inderdaad, het is van algemeen belang dat ik bezig ben :) Nu de volgende vraag. Ik heb een formulier en een ontvangend PHP script. Hiermee kan veel mis gaan door misbruik van de verschillende exploits. Nu had ik de volgende oplossing bedacht:

In het formulier stuur ik de volgende hidden variabele mee:
<input type="hidden" name="_myserver" value="<? echo "$_SERVER[HTTP_HOST]" ?>">.

In het ontvangede script wordt alvorens enige handelingen te verrichten de volgende test uitgevoerd:

if (!($_POST['_myserver'] == $_SERVER['HTTP_HOST'])) {

Indien het geheel overeenkomt gaat hij verder met databasehandelingen (enzo) waarbij hij de variabelen uit het formulier met de $_POST variatie inleest. Dit in combinatie met client- en serverside validatie moet de boel toch redelijk dicht timmeren? Of mis ik iets (wat niet vreemd zou wezen, maar dat snap je pas als je me persoonlijk kent :?) ??

.


Acties:
  • 0 Henk 'm!

  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 13:42
En als nou iemand _myserver met de waarde van je servernaam meepost ?

Ik denk dat je beter op onder andere referrer kan checken en dat in combi met wat je nu hebt ofsow

[ Voor 43% gewijzigd door stfn345 op 30-05-2003 16:46 ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Je kan makkelijk de formwaarden van _myserver zelf invoeren. Het is dus geen goede beveiliging. Andere mogelijkheden zijn:
• Werk met de referrer (ook niet 100% zeker, plus het is niet 'verplicht' om deze door te sturen)
• Werk met sessies. Wanneer het formulier wordt aangeroepen wordt er een sessie gezet. Als het form wordt ge-submit, controleer je of er een sessie bestaat..

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 09:34
Tja. Maar als iemand in de url ?_myserver=www.blaat.com meegeeft is dat toch geen $_POST variable maar een $_GET variabele?

Sessies zijn in dit geval geen oplossing gezien het hele project (zie originele post, url bovenin) en de noodzaak sessie's te starten voordat er headers gestuurd zijn.
De refferer zou wel een oplossing kunnen betekenen.

[ Voor 48% gewijzigd door Eijkb op 30-05-2003 16:50 ]

.


Acties:
  • 0 Henk 'm!

  • JoostBaksteen
  • Registratie: December 2000
  • Laatst online: 29-07 19:12
Ik kan jou html-formulier-pagina opslaan op mijn hardeschijf en dan op submit drukken, is het keurig een post_var.

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Maar ik kan ook makkelijk het formulier lokaal draaien en laten posten naar jouw server. Als het lokaal staat, kan ik er alles aan wijzigen.

Verder kan ik de waardes van de input velden met javascript wijzigen :)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Eijkb schreef op 30 mei 2003 @ 16:48:
Tja. Maar als iemand in de url ?_myserver=www.blaat.com meegeeft is dat toch geen $_POST variable maar een $_GET variabele?
je kan natuurlijk ook zelf eigen POST headers sturen :P
Sessies zijn in dit geval geen oplossing gezien het hele project (zie originele post, url bovenin) en de noodzaak sessie's te starten voordat er headers gestuurd zijn.
De refferer zou wel een oplossing kunnen betekenen.
helemaal safe krijg je het nooit ;)
hoewel je zou een "random id" kunnen geven aan elk formulier en die icm referer checken

Acties:
  • 0 Henk 'm!

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 09:34
Ik kan jou html-formulier-pagina opslaan op mijn hardeschijf en dan op submit drukken, is het keurig een post_var.
En dan velden met vieze code toevoegen ofzo? Tja. Maar hij doet alleen queries op de velden waaruit het formulier bestaat... dus dat kan dan toch geen kwaad? (Oplossing: splash screen maken waar bezoekers de vraag krijgen ofdat ze onder de noemer scriptkiddie vallen, zo ja -> EXIT, zo niet -> TOEGANG 8)7
hoewel je zou een "random id" kunnen geven aan elk formulier en die icm referer checken
Die random id moet je dan ook meesturen, anders heb je geen controle mogelijkheid. Misschien een vreemde variabele meesturen MD5 gehashed... moeilijk.

Ah, op de formulierpagina een MD5 hashed waarde met id in je database gooien, die id en MD5 hashed waarde meesturen en vervolgens op ontvangend script uit de database die MD5 hashed waarde controleren.. Lekker omslachtig.

Een form variabele meesturen met als inhoud twee of meer willekeurige PHP Predefined variabelen waaronder eentje die jouw server identificeerd welke je allebei MD5 hashed tot 1 string. Deze procedure vervolgens op het ontvangde script herhalen.... Dan moet een so-called hacker wel heel veel pogingen doen....

[ Voor 58% gewijzigd door Eijkb op 30-05-2003 17:08 ]

.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Eijkb schreef op 30 May 2003 @ 16:54:
Die random id moet je dan ook meesturen, anders heb je geen controle mogelijkheid. Misschien een vreemde variabele meesturen MD5 gehashed... moeilijk.

Ah, op de formulierpagina een MD5 hashed waarde met id in je database gooien, die id en MD5 hashed waarde meesturen en vervolgens op ontvangend script uit de database die MD5 hashed waarde controleren.. Lekker omslachtig.

Een form variabele meesturen met als inhoud twee of meer willekeurige PHP Predefined variabelen waaronder eentje die jouw server identificeerd welke je allebei MD5 hashed tot 1 string. Deze procedure vervolgens op het ontvangde script herhalen.... Dan moet een so-called hacker wel heel veel pogingen doen....
ik bedoel gewoon, je neemt een random nummer (mag md5'ed zijn ofoz boeit ff niet voor het principe)
deze zet je in een hidden var in je formulier alsmede in je database. (desgewenst in combinatie met meer info)
dan wordt je form gesubmit en je checked of dat nummer voorkomt in de db, zoja dan is het safe en delete je hem uit je db ;)

Acties:
  • 0 Henk 'm!

  • Eijkb
  • Registratie: Februari 2003
  • Laatst online: 09:34
Dat is inderdaad wel de oplossing, of die met sessie's. Alleen voor het project is dat niet zo makkelijk gezien het formulier en het ontvangende script de output is van een make-a-form kinda' thingie. En de output moet dus makkelijk te gebruiken zijn zonder allerlei configuratiezooi (die je toch nodig hebt voor het benaderen van een DB...). Misschien kan ik in een textfiletje werken... maar dan moet de "eindgebruiker" toch weer extra handelingen doen: de directory writable maken...

.

Pagina: 1