PHP Sichere Api erstellen?
Hi, kann mir jemand ein paar Tutorials oder Artikel empfehlen, oder kennt eine Anleitung wie man eine sichere API für PHP macht?
Was ich machen möchte:
Ich möchte mir eine kleine Oberfläche für unsere Online Shops erzeugen in der jeden Tag Lagerbestände und Anzahl der Verkauften Artikel abgespeichert werden(das ist soweit auch umgesetzt). Aktuell gebe ich die Werte aber noch per PHP Skript aus. Das ganze möchte ich jetzt aber dynamischer gestalten und mithilfe von Javascript ausgeben lassen, admit ich per PHP nur noch das Grundgerüst der Seite aufbaue und per Javascript dann die Tabellen ausgebe und Filter setzen sowie suchen kann.
An der Uni habe ich sowas vor ein paar Jahren schonmal mit XHR gemacht, dabei haben wir aber das Thema sicherheit nicht behandelt, welche Wege gibt es denn soetwas "sicher" umzusetzen, damit nicht einfach ein Bot der auf die Seite kommt dort per CRUD irgendwelche Werte eingeben könnte oder abfragen könnte?
Macht es da sinn ein Token zu erzeugen und das dann in den Javascript Dateien zu speichern oder die Zugangsdaten des Benutzers bei jedem Aufruf mitzusenden? Ich möchte das ganze vielleicht auch so gestalten das man daraus vielelicht auch mal eine App erstellen könnte, falls der bedarf in Zukunft aufkommt.
1 Antwort
für sicheres programmieren gilt natürlich erstmal , traue keinem client . ein token hat nicht wirklich was mit sicherheit zu tun eher mit authentifizierung , also das nur der darf der auch vorher berechtigt war , da gibts viele möglichkeiten .
praktisch musst du bei anfragen sowieso soweit filtern das nur zulässige werte auf dem server verarbeitet werden. ergo jede anfrage muss erstmal durch eine prüfung und genau da liegt dann auch die problematik, da gibt es leider keine standartlösung , am besten fährt man natürlich wenn man praktisch eine tabelle hat wo die möglichen werte vorgegeben werden und dann auch noch die kombinationen. wie so ein rechtesystem, sprich , bei den und den werten darf auch nur gelesen und bei anderen werten geschrieben werden.
wie man das umsetzt , muss man halt zur jeweiligen problemstellung absichern. das kann sehr komplex werden und dann auch sehr viele löcher oder halt auch einschränkungen bedeuten.
vielleicht solltest du erstmal mit REST API anfangen .
der größte feind sitzt halt meist mit einem gültigen login bzw token da und versucht alle kombinationen durchzugehen.
das ist halt ein komplexes system. mit session liegst du schonmal gut , sonst wäre es wirklich zu einfach.
bei get hat man halt das problem das es auch noch sichtbar in der url ist , deseegen macht man meist tokens die dann über https verschlüsselt im body für die nächste handlung bereit stehen, quasi ein einmal token der wenn er genutzt wurde über url schon veraltet ist , wenn da einer aber in der mitte ist könnte der auch das abfangen.
es gibt schon ganz ausgefeielte frameworks die das beteit stellen und alle kämpfen mehr oder weniger mit der sicherheit zu aufwand und usability .
schau dir die konzepte von OAuth2 an , da gibt es eine stelle die die berechtigung für resourcen verarbeitet eine andere stelle die die authentifizierung organisiert etc. bis hin zu proxy systeme die überprüfen von wo aufrufe etc erlaubt sind.
wenn du aber nicht verstehst wie diese dinge zusammenspielen kann es mehr lücken als schutz bedeuten.
kann gerade leider keine links raussuchen die da weiterführen. aber es ist halt ein komplexes thema das durchdacht werden muss und dann deine best practise weden kann.
session ist aber schon das grundprinzip das wirklich viele webseiten als grundlage haben.
ok, gut danke, schau cih mir dann auch nochmal an.
Hi, danke werde ich mir mal anschauen.
In erster Linie geht es mir aber auch beispielsweise darum wie man es am bloedsten umsetzt, das ich nicht per Get Methode den Hersteller angeben kann, ohne das man eingeloggt ist und dann ein ergebniss bekommt. Da weis ich leider nicht wie man es bloedsten loest, ob ich die Zugangsdaten jedesmal mitschicken soll, oder in PHP die Werte in einer Session ablege und ueberpruefe(so mache ich es aktuell bei meiner Ausgabe in Php)