Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Schützen von Ajax files

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Schützen von Ajax files

    Hallo,

    da sich die Hintergrundprozesse langsam aber sicher summieren, knoble ich immer noch daran diese vor Bots zu sichern.

    Die Problematik ist mir schon länger bekannt aber mir fällt da leider noch keine Lösung ein!

    Es geht mir darum das ein fremder Server via JavaScript POST-Daten senden kann und dies natürlich beliebig lang und oft und da diverse Hintergrundprozesse auch Datenbankabfragen durchführen, könnte das sehr schnell in unnötiger Belastung enden und ggf. den Server in die Knie zwingen.


    Meine aktuelle Überlegung ist dies mit SESSIONs zu lösen, vor dem include der config kommt dann ein define('bg_process', true); und in der config selber wird geprüft ob bg_process definiert ist und === true wenn dies zutrifft wird geprüft ob diverse Session keys existieren und vergleiche gemacht. So würde die config im Falle das es nicht definiert ist entsprechende sessions setzten und von einem normalen Aufruf ausgehen.


    Ich schätzte man kann aber einen Bot schreiben der die Webseite dann einmal normal aufruft um eben diese Sessions zu erhalten und dann wieder die Attacken durchführen.
    Im Grunde bleibt es aber immer der selbe Weg den ein Hintergrundprocess zurüklegt und ich weiß mir da atm einfach nicht zu helfen.


    Würde mich freuen wenn ich da von euren Erfahrungen profitieren könnte.

    MFG: Pay


    ::EDIT::
    Ach ja natürlich habe ich schon daran gedacht die Anfragen nach Herkunft (HTTP_REFERER) zu blockieren, aber soweit mir bekannt ist kann man den Server ja manipulieren und würde nix bringen und unter Umständen würde es sich mit nem Loadbalancer beissen, denke ich.

  • #2
    Hallo,

    ich verstehe das Problem nur halb. Du meinst das ein Bot durch Ajax Request deine Website zuspamen könnte?
    Das würde auch ohne Ajax gehen...

    In jedem Falle solltest du möglichst genau überprüfen ob die Angaben, die an deine Seite geschickt werden, richtig sein können. Sprich wenn du einen Post mit nur Zahlen erwartest, prüfe auch ob es wirklich nur Zahlen sind usw.

    Und sonst kannst du in der .htaccess nur bestimmte IP´s zulassen. Vielleicht wäre das eine Lösung?!

    Kommentar


    • #3
      Hallöchen,

      alles was du öffentlich zur Verfügung stellst, kann natürlich durch Jedermann beliebig erfasst und ggf. schädlich eingesetzt werden. Alles was schützenswert ist, solltest du mit Sicherheits-Tokens absichern oder hinter einer Authentifizierung abbilden. Mal ein paar simple Beispiele:

      - Ein Formular zum Erstellen von Kommentaren, zu einem beliebigen Artikel, sollte immer mit einem Token ausgeliefert und anschließend darauf geprüft werden
      - Aktionen die bspw. zur Löschung eines Nutzers führen, sollten nur mit gültiger Authentifizierung erreichbar und durchführbar sein
      - Ein öffentlicher Artikel oder das Archiv sollten jederzeit barrierefrei abrufbar sein

      Wenn an einer kokreten Stelle erhöhter Traffic verursacht wird, kannst du Maßnahmen einleiten um dies zu unterbinden oder performance-technisch zu optimieren.

      Viele Grüße,
      lotti
      [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

      Kommentar


      • #4
        Hallo,

        naja klar derartige Prüfungen habe ich über all drinne wo die Inhalte genau gecheckt werden.
        Aber mal ein kleines Beispiel:

        Code:
        function manage_authRegisterEmail( el )
        {
        	var elID = el.attr('id'),
        		tpl = el.data('tpl'),
        		successTXT = el.data('success'),
        		inuseTXT = el.data('inuse'),
        		failTXT = el.data('fail');
        
        	$.post( base_uri+"app/plugins/auth/checkInputs.php", { process: elID, input: el.val() }, function(data)
        	{
        		data = $.parseJSON(data);
        		var imgEL = document.getElementById(elID + "IMG"),
        			statusEL = document.getElementById(elID + "Status");
        		
        		if(data['status'] == "OK")
        		{
        			statusEL.innerHTML = successTXT;
        			statusEL.style.color = "green";
        			imgEL.src = tpl+"icons/checkmark-green.png";
        			imgEL.alt = successTXT;
        		}
        		else if(data['status'] == "INUSE")
        		{
        			var txt = inuseTXT;
        		}
        		else if(data['status'] == "FAIL")
        		{
        			var txt = failTXT;
        		}
        		
        		if(data['status'] != "OK")
        		{
        			statusEL.innerHTML = txt;
        			statusEL.style.color = "red";
        			imgEL.src = tpl+"icons/checkmark-red.png";
        			imgEL.alt = txt;
        		}
        		$("#" + imgEL.id).show();
        	});
        }
        Hier kann man relativ simpel ein script schreiben das die angeforderten Daten wie E-mail, password usw. direkt als POST an die .php-Datei sendet, die php-Datei führt dann ihre Anweisungen aus weil sie denkt die Anfrage kommt von der eigenen Seite.

        Zu ihrer Aufgabe gehört zb. eine Abfrage ob die E-Mail bereits vergeben ist. Klar das ist nur eine kleine Abfrage ich habe aber auch komplexere, auch eine kleine sorgt für mehr last wenn sie zig mal pro Minute via Script angesprochen wird.

        Das gilt es zu verhindern und eine reine Überprüfung auf Richtigkeit der Daten wie z.B. ob die angegebene E-mail auch eine E-Mail ist reicht hier einfach nicht aus.

        Kommentar


        • #5
          Zitat von lottikarotti Beitrag anzeigen
          Hallöchen,

          alles was du öffentlich zur Verfügung stellst, kann natürlich durch Jedermann beliebig erfasst und ggf. schädlich eingesetzt werden. Alles was schützenswert ist, solltest du mit Sicherheits-Tokens absichern oder hinter einer Authentifizierung abbilden. Mal ein paar simple Beispiele:

          - Ein Formular zum Erstellen von Kommentaren, zu einem beliebigen Artikel, sollte immer mit einem Token ausgeliefert und anschließend darauf geprüft werden
          - Aktionen die bspw. zur Löschung eines Nutzers führen, sollten nur mit gültiger Authentifizierung erreichbar und durchführbar sein
          - Ein öffentlicher Artikel oder das Archiv sollten jederzeit barrierefrei abrufbar sein

          Wenn an einer kokreten Stelle erhöhter Traffic verursacht wird, kannst du Maßnahmen einleiten um dies zu unterbinden oder performance-technisch zu optimieren.

          Viele Grüße,
          lotti

          Das mit dem Tokken finde ich ist ein guter Ansatz!
          Ich bin immer davon ausgegangen das ein Bot/Script immer den gleichen Weg geht wie ein normaler user auch aber das ist falsch.

          In den Formularen selber habe ich 2 Sicherheitsmaßnahmen drin wodurch das Absenden des Formulares via Bot (hoffentlich) unmöglich ist, also kann ich hier natürlich ein verstecktes tokken Feld einbauen und den Token via Sessions saven und dann überprüfen bevor die Aktionen ausgeführt werden.

          Ich denke damit sollte ich was hinbekommen, Danke dafür!

          Zwecks deinem Hinweise auf Authentifizierung, na das ist ja selbst redend, habe da ein recht gutes System geschrieben um sowas zu managen (wer was darf usw.).


          MFG: Paykoman
          PS: werd es sicher nachher mal angehen wenn mein Menumanager fertig ist

          Kommentar

          Lädt...
          X