Wie Daten sicher in eine Datenbank schreiben?

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

unique24

Mitglied
28 September 2009
41
0
6
Hallo,

ich habe eine Javascript Kalender und die Daten demnach auch in JavaScript.

Nun muss ich aber Benutzereingaben zurück in die mysql Datenabnk schreiben.
Wie macht man das, das ein Spammer nicht meine Datenbank zumüllt?

Ich habe also ein Array in javascript:
Sende ich die Daten per ajax an ein php Script und dieses schreibt in die Datenbank, sieht man ja im Quelltext den php schreib Aufruf.

Wie also bekommt man die Daten sicher in die DB?
In der HTML eventuell php hinuzfügen?

Wäre nett wenn jemand ein Beispiel hätte.

Danke!
 

unique24

Mitglied
28 September 2009
41
0
6
Danke, das geht aber nicht.

Wie machen das andere mit JS? Oder kann ich nur php dafür nutzen?
Jeder der in den Quellcode reinschaut sieht ja den write php aufruf
 

jonas3344

Aktives Mitglied
25 Oktober 2019
159
44
28
38

CORS verhindert normalerweise, dass irgendjemand von irgendeiner URL Dein Server-Seitiges Script benutzen soll. Wenn der Webserver richtig konfiguriert ist und du es nicht explizit abgeschaltet hast.

Wenn du Angst hast, dass irgendjemand Dir Unsinn via Deine Webseite in die DB schreibt, da wird es keine andere Option geben als einen Login oder ein manuelles Prüfen der Daten. Oder du prüfst die Daten auf Plausabilität.
 

unique24

Mitglied
28 September 2009
41
0
6
Hallo nochmal,

habs mir nun angesehen ... das mit dem Login per php ist doch möglich .. aber wenn ein user eingeloggt ist, würde er den query doch wieder sehen.

Ich müsste das schreiben in den PHP Code legen .. aber die Übergabe an den PHP code sollte nicht gesehen werden oder nur durch die Seite selbst möglich sein.

Das Frontend ist HTML, gezeichnet wird der Kalender in JavaScript.

Danke!
 

unique24

Mitglied
28 September 2009
41
0
6

CORS verhindert normalerweise, dass irgendjemand von irgendeiner URL Dein Server-Seitiges Script benutzen soll. Wenn der Webserver richtig konfiguriert ist und du es nicht explizit abgeschaltet hast.

Wenn du Angst hast, dass irgendjemand Dir Unsinn via Deine Webseite in die DB schreibt, da wird es keine andere Option geben als einen Login oder ein manuelles Prüfen der Daten. Oder du prüfst die Daten auf Plausabilität.
Oh danke .. werd mich einlesen!
 

jonas3344

Aktives Mitglied
25 Oktober 2019
159
44
28
38
Ich kenen Deinen Code nicht, aber wenn du in JavaScript ein SQL zusammenstellst (was ich irgendwie herauslese), dass du dann mit PHP schreibst, das solltest du auf keinen Fall machen.
 

unique24

Mitglied
28 September 2009
41
0
6
Nein, ich habe in JavaScript ein Array das ich zurück in die DB schreiben muss.

Selbst wenn ich eine write.php aufrufe und per GET oder POST die Daten als JSON übergebe, sieht man im javascript ja die URL und Aufruf
 

Aaron3219

Senior HTML'ler
6 Oktober 2015
1.174
247
63
20
Wie immer gibt es 1000 verschiedene Wege, die zum Ziel führen. Hier mal einer ein wenig ausgeführt:

Wie macht man das, das ein Spammer nicht meine Datenbank zumüllt?
So etwas wirst du nicht wirklich verhindern können. Falls es für deinen Anwendungsfall passt, kann man natürlich etwas wie reCaptcha v3 einführen. In der neuesten Version muss der User nämlich keine "Bildchen" anklicken, stattdessen wird das Verhalten auf der Website analysiert und anhand dessen ein Schätzwert abgegeben, ob es sich hierbei um einen Bot oder User handelt. Ein Login wird keine wirkliche Hürde sein.

Vor jedem schreiben in die Datenbank müsstest du dann das reCaptcha prüfen. Sprich: Du solltest dir dann einen Proxy-Server aufsetzen, natürlich mit richtiger CORS-Konfiguration ;) (aber das solltest du ohnehin tun, wenn du mit Datenbanken arbeitest).

Wie also bekommt man die Daten sicher in die DB?
POST wäre eine Möglichkeit, aber eigentlich solltest du beim Schreiben in eine Datenbank einen PUT-Request schicken. Und ganz, ganz, ganz wichtig: Schau unbedingt, wie du SQL-Injection-Attacken verhinderst! Normalerweise würde man einfach ORM-packages benutzen, die das automatisch für dich machen. Falls du dir das noch nicht zutraust, benutze mindestens Prepared Statements und parametrisierte Queries!

Selbst wenn ich eine write.php aufrufe und per GET oder POST die Daten als JSON übergebe, sieht man im javascript ja die URL und Aufruf
Ich verstehe nicht, inwiefern das ein Problem ist. Das kann doch nur der Client, also Absender sehen und verschlüsselt ist das ganze eh durch HTTPS (sofern du ein SSL-Zertifikat hast und du solltest dich drum kümmern, dass du eins hast!).
 
Zuletzt bearbeitet:

sandreas

Mitglied
29 April 2009
43
6
8
Was du da versuchst, nennt sich auch REST API mit Authentifizierung. Es gibt hier mehrere Möglichkeiten - je nachdem, für wen die Anwendung nutzbar sein soll.

Authentifizierung bedeutet im Grunde nur, dass dein Benutzer seine Identität nachweist. Das kann erfolgen, in dem er einen Benutzernamen und ein Passwort angibt und du somit eindeutig weißt, wer da grade deine Seite aufruft. Solange es keine Authentifizierung gab, könnte es jeder sein.

Wenn du jetzt Angst hast, dass jemand ein Script schreibt, welches dir die Datenbank zumüllt, musst du zusätzlich sicher stellen, dass es sich um einen Menschen und nicht um ein Programm handelt. Das geht zum Beispiel mit einem Captcha (ein Test, den nur ein Mensch lösen kann - z.B. ein Bild mit verschleierten Buchstaben, welches von Programmen nicht erkannt werden kann). Google Recaptcha ist eine Möglichkeit, es über einen externen Anbieter zu integrieren.

Benötigt deine Seite nur den "Ich bin ein Mensch" Nachweis, könntest du in regelmäßigen Abständen ein Captcha anzeigen.

Zusätzlich könntest du auch noch Rate-Limiting implementieren (sprich: Nur 10 API aufrufe pro Minute oder sowas). Das halte ich in deinem Fall aber nicht für nötig.
 

sysop

Mitglied
10 Juli 2015
157
22
18
www.mn-portal.at
Nein, ich habe in JavaScript ein Array das ich zurück in die DB schreiben muss.

Selbst wenn ich eine write.php aufrufe und per GET oder POST die Daten als JSON übergebe, sieht man im javascript ja die URL und Aufruf
Übergib dein JS-Array an PHP und mach da deine Datenbank Aktionen.
oder