Tipps Sicherheit?

03/21/2018 12:27 Cc_Cc_Cc#1
Tag,

war grad auf meiner HP und hab folgendes entdeckt.

Es waren über 500 Kommentare in einem Post und in anderen Post hat jeder ein Kommentar mit der Zeichenkette "1". Keiner macht sich aus Spaß die Mühe sich vorm PC hinzusetzen und überall ne 1 reinzukommentieren.

Ebensfalls habe ich entdeckt, dass einer etwas "kommentiert" hat von der Beitrag_id 127100. Kann ja nicht sein, da es nur bei mir maximal 50-100 Beiträge gibt. Wie konnte er jetzt dahin kommen? Und wie schafft es einer 4x hintereinander was gleiches zu Kommentieren in der gleichen Zeit. Hat jemand Ahnung was da passiert ist & wie man sowas fixxen kann und was ich eventuell beachten sollte?


Paar Bilder:

ID 127100

Datum (4x Hintereinander gleicher Eintrag)

Eventuell noch mein Code falls jemand rüberschauen möchte:

Falls einer ein Angriff austesten möchte: [Only registered and activated users can see links. Click Here To Register...]
03/21/2018 13:51 Devsome#2
Wenn man diesen Code in die PowerShell kopiert, kann man Beiträge bei dir posten.
Code:
Invoke-WebRequest -Uri "http://test.liscon.bplaced.net/beta.php" -Method "POST" -Headers @{"Cookie"="PHPSESSID=440f08e98c7e27bdc7aab019013450a8"; "Origin"="http://test.liscon.bplaced.net"; "Accept-Encoding"="gzip, deflate"; "Accept-Language"="de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7"; "User-Agent"="Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.33 Safari/537.36"; "Content-Type"="multipart/form-data; boundary=----WebKitFormBoundaryloEIoAiBEjWq7pnj"; "Accept"="*/*"; "Referer"="http://test.liscon.bplaced.net/beta.php"; "X-Requested-With"="XMLHttpRequest"} -Body ([System.Text.Encoding]::UTF8.GetBytes("------WebKitFormBoundaryloEIoAiBEjWq7pnj$([char]13)$([char]10)Content-Disposition: form-data; name=`"post`"$([char]13)$([char]10)$([char]13)$([char]10)kek$([char]13)$([char]10)------WebKitFormBoundaryloEIoAiBEjWq7pnj$([char]13)$([char]10)Content-Disposition: form-data; name=`"send_post`"$([char]13)$([char]10)$([char]13)$([char]10)Posten$([char]13)$([char]10)------WebKitFormBoundaryloEIoAiBEjWq7pnj--$([char]13)$([char]10)"))
Ich würde ein [Only registered and activated users can see links. Click Here To Register...] Token hinzufügen. Damit kannst du schon mal ein bisschen mehr Sicherheit holen.
03/21/2018 16:01 False#3
Wie Devsome bereits erwähnt hat würde ein CRSF-Token schon einmal ein Stückweit helfen, jedoch würde ich gegen Spam einfach ein Captcha einbauen.
Alternativ (oder auch zusätzlich) könntest du einbauen das ein Benutzer jede x Stunden nur 3 Kommentare schreiben kann (ob das sinn macht in deiner Anwendung musst du wissen, habe diese mir nicht angeschaut).

Dein Problem das die Id so hoch ist, ist auch logisch, da du die aus POST holst, somit kann jeder reinschreiben was er will..
Wofür ist die Id den da ?

Aus deiner SQL-Query werde ich nicht ganz schlau wieso das soviel ist/was du damit bezwecken willst.

Mit Curl geht es übrings noch leichter:
Quote:
curl -d "post=DEIN_TEXT&send_post=posten" -X POST [Only registered and activated users can see links. Click Here To Register...]
03/21/2018 16:13 Cc_Cc_Cc#4
Quote:
Originally Posted by .ƒaℓsє. View Post
Wie Devsome bereits erwähnt hat würde ein CRSF-Token schon einmal ein Stückweit helfen, jedoch würde ich gegen Spam einfach ein Captcha einbauen.
Alternativ (oder auch zusätzlich) könntest du einbauen das ein Benutzer jede x Stunden nur 3 Kommentare schreiben kann (ob das sinn macht in deiner Anwendung musst du wissen, habe diese mir nicht angeschaut).

Dein Problem das die Id so hoch ist, ist auch logisch, da du die aus POST holst, somit kann jeder reinschreiben was er will..
Wofür ist die Id den da ?

Aus deiner SQL-Query werde ich nicht ganz schlau wieso das soviel ist/was du damit bezwecken willst.
@False

Nehmen wir mal an ich habe ein Beitrag, den kann ich kommentieren. Jetzt muss ich ja wissen welchen Beitrag ich kommentiere. Deswegen ist ein Hidden-Feld post_id(p_id) da.

Also:
p_id, :u_id, :comment

Füge die post_id in die DB , damit ich weiß welchen Post ich kommentiere (wie eine Identifikation)
Füge User_id ein
Füge Kommentar ein.

Wie hättest du denn sowas gemacht, wenn du ein Kommentar posten willst? Anders gehts glaub ich doch nicht da man ja wissen muss in welchem Beitrag der Kommentar sich befindet.

€: kann jemand nochmal testen ob es klappt, hab grad ein Token eingefügt, und weiß nicht wo ich diese Zeilen einfügen kann von:
Quote:
curl -d "post=DEIN_TEXT&send_post=posten" -X POST [Only registered and activated users can see links. Click Here To Register...]
03/21/2018 16:16 False#5
Quote:
Originally Posted by Cc_Cc_Cc View Post
@False

Nehmen wir mal an ich habe ein Beitrag. Den kann ich kommentieren. Jetzt muss ich ja wissen welchen Beitrag ich kommentiere. Deswegen ist ein Hidden-Feld post_id(p_id) da.

Also:
p_id, :u_id, :comment

Füge die post_id in die DB , damit ich weiß welchen Post ich kommentiere (wie eine Identifikation)
Füge User_id ein
Füge Kommentar ein.

Wie hättest du denn sowas gemacht, wenn du ein Kommentar posten willst? Anders gehts glaub ich doch nicht da man ja wissen muss in welchem Beitrag der Kommentar sich befindet.
Informiere dich mal über foreign keys, wenn du diesen hast ist es nicht möglich irgendeine Id zu nutzen.
Somit kann nur eine passende (die existiert) genommen werden, je nachdem was deine Anwendung alles hat solltest du dennoch prüfen ob der User dort posten darf(da die Id dennoch geändert werden kann zu einer die existiert).
03/21/2018 16:19 Devsome#6
Kannst doch immer noch Prüfen und die Tabellen mit foreign keys versehen.
Gibt es die p_id (postid?) bei dem Insert oder ist diese frei erfunden?

So kannst du auch schon mal die hohen Zahlen in der Tabelle verhindern, die halt nicht existieren.
03/21/2018 16:21 Cc_Cc_Cc#7
Nice, noch nie davon gehört. Werde mich direkt mal Informieren. Aber sollte ich noch etwas beachten. Ihr habt mir schonmal geholfen vor CSXF zu schützen. Habt ihr noch ne Lücke entdeckt?
03/21/2018 16:23 False#8
Quote:
Originally Posted by Cc_Cc_Cc View Post
Nice, noch nie davon gehört. Werde mich direkt mal Informieren. Aber sollte ich noch etwas beachten. Ihr habt mir schonmal geholfen vor CSXF zu schützen. Habt ihr noch ne Lücke entdeckt?
Sollten es per CURL noch einmal testen, klappt aktuell nicht (Wobei ich auf der Seite selber auch nichts posten kann).
Ich denke du meinst CSRF, solltest du nicht wissen wofür der Token da ist => Lies dich ein!
03/21/2018 17:38 Cc_Cc_Cc#9
Quote:
Originally Posted by .ƒaℓsє. View Post
Sollten es per CURL noch einmal testen, klappt aktuell nicht (Wobei ich auf der Seite selber auch nichts posten kann).
Ich denke du meinst CSRF, solltest du nicht wissen wofür der Token da ist => Lies dich ein!
Hab mir das alles durchgelesen und getestet. Der Zeigt mir sozusagen ganze Zeit Exit an bzw er führt mein Code nicht aus. Hab es genau so eingeführt wie im Link oben vom Devsome.

03/21/2018 17:48 Devsome#10
Wenn man logisch denkt, sieht man das
Code:
 $_SESSION['csfr_token'] = uniqid('', true);
vor
Code:
if($_POST['post_token'] !== $_SESSION['csfr_token']) {
aufgerufen wird.
Da kann der post_token auch nicht mehr gleich csrf_token sein.

Mach $_SESSION['csfr_token'] = uniqid('', true); einfach nach deiner Abfrage, aber so das der User dennoch einen hat wenn er nicht die POST ausführt.
03/21/2018 18:55 Cc_Cc_Cc#11
Hab es grad die ganze Zeit ausprobiert, ebenfalls das Bsp auch was eigentlich wesentlich das gleiche ist: [Only registered and activated users can see links. Click Here To Register...]

nichts funktoniert, bin einfach zu bescheuert um es richtig zu machen. Kann es jemand für bezahlung kurz machen?