welche gefahren birgt php

ich beschäftige mich jetzt schon eine weile mit php
und mir stellt sich jetzt die frage was muss ich den beachten um sichere php scripts zu schreiben? und wie kann ich die den ausschalten?

also was ich bisher kenne ist das man keine keine dateien deren Dateiname in einer variable die der nutzer ändern kann steht , includieren sollte

vieleicht könnt ihr mir ja ein bishcen helfen (ich bin mir sicher das ihr das könnt ;))

Das sollte den größten Teil behandeln.

[phpnet]eval[/phpnet] = evil
Das ist ein ziemlich wichtiger merksatz. Warum kannst du dir sicherlich denken.

Desweiterne solltest du alle mysql query immer escapen ([phpnet]mysql_real_escape_string[/phpnet])

Gib dem benutzer immer soviel wie möglich bereits über das formular vor. Alle benutzereingaben sollten immer geprüft werden auch wenn das formular scheinbar keine fehleingaben zuläst. Du wunderst dich was man alles erreichen kann wenn man will.

Übergebe keine kritischen daten welche schadenanrichten per Get-Parameter.

wie sicher sind den sachen die ich per post übergebe?

und mir stellt sich gerade die frage ist es bei einem script das kontroliert ob das richtige passwort eingegeben wurde nicht sinvoll bevor die daten zur kontrolle gesendet werden die eingabe schon zu verschlüsseln?

und vielen dank für die links

wie sicher sind den sachen die ich per post übergebe?

Sagen wir es so sie sind sicherer.

… können aber genausogut manipuliert werden.

Wichtig ist, wie gesagt, dass alle Benutzereingaben überprüft werden.

bei dem link von Artemis steht das man auch nicht so sachen wie:

verwenden soll wie kann man das den sonst realisiren?

Du meinst bei 3. CSRF?

Das ist nicht so leicht, da ja auch eine Datei namens bild.jpg, per mod_rewrite zu boehses_script.php werden kann.

Eine Abfrage, des MIME-Types, bringt meistens auch nichts, weil das Script meistens ein Bild generiert.

Eine nächste Mögichkeit wäre, zu gucken, ob in dem Header was von PHP steht, das kann jedoch auch abgeschaltet werden.

was du natürlich machen kannst ist wenn du z.B. eine über session etwas übergibst kannst du noch eine session übergeben wo was drinnensteht wie vllt lol
dadrauf kommt kaum einer und es weiß keiner das es das gibt! und nur wenn lol da ist functioniert es auch!

verstanden?

ne (mist zu kurz)

dito, erklär das mal ein wenig ausführlicher.

Ergänzend zum Link, den Artemis schon gepostet hat.
:arrow: http://phpfriend.de/forum/ftopic59571.html#411494

ich bin auch kein sicherheitsexperte, aber versuche immer wenn du schleifen verwendest, dass es keine möglichkeit für eine endlosschleife gibt, und denk immer drann, dass es genug user gibt, die versuchen deine querys zu misbrauchen. zb eine ein loginfeld für admins:

benutzername : wurscht
passwort : wurscht" OR 1=1

das hab ich mal wo gelesen, funzt zwar eigentlich nie, zeigt aber das problem auf. denn wenn jemand die sql syntax so hat

select * from admins where user=„benutzer“ AND pass=„passwort“

dann würde das so aussehen

select * admins where user=„wurscht“ AND pass=„wurscht“ OR 1=1

^^

also wie schon gesagt lieber die eingaben, die in eine datenbank kommen escapen lassen.