2017-06-07 2 views
0

Ich habe eine einfache Komponente auf einer Website, die eine Abfrage aller Produkte aus einem Cluster von Produkten auf der Seite und speichert sie in einem Array in Jquery. Ich sende dann dieses Array über AJAX als POST an PHP, was letztendlich eine Datenbankabfrage für alle IDs durchführt.Schützen POST-Anfrage zwischen PHP und AJAX - Keine Benutzereingabe

Meine Frage ist, wie kann ich das Array aus der AJAX/JS-Datei in die PHP-Datei im POST gegen Benutzermanipulation schützen ... das heißt, ich kann die IDs im Quellcode finden und sie in einige ändern zufälliger Wert oder sogar etwas Bösartiges.

Normalerweise könnten Sie in einem Benutzereingabeszenario eine echte Escapezeichenfolge oder eine ähnliche Funktion in PHP ausführen, um die eingehenden Daten abzudecken. Da ich über ein Array von numerischen Werten sende, was wäre der beste Weg, um diese POST-Anfrage zu sichern?

Danke,

-S

+0

https://stackoverflow.com/questions/37912937/how-to-send-secure-ajax-requests-with-php-and-jquery – clearshot66

+0

Wenn man bedenkt, die Prämisse, dass alles, was ist in Benutzer-Maschine kann manipuliert werden, es gibt nicht viel zu tun, wirklich. Böswillige Benutzer können böse sein. – FirstOne

+0

Sie können die Benutzermanipulation nicht verhindern, daher schreiben Sie Ihren Code so, dass er resistent ist. Wenn es sich bei Ihrem Datenspeicher um SQL handelt, führen Sie dies in der Regel mit vorbereiteten Anweisungen und gebundenen Parametern durch. –

Antwort

1

Nehmen wir an, dass Sie Array von Integer-Werte von einem Client empfangen möchten.

Wenn Sie auf einem rohen PHP schreiben, dann können Sie den Code wie folgt aussehen:

if (isset($_POST['ids']) && is_array($_POST['ids'])) { 
    $ids = array_map('intval', $_POST['ids']); 
    $ids = array_unique($ids); // Optional. 
    print(implode(', ', $ids)); // Print values. 
} 

Probe von Benutzereingaben:

ids[]=1&ids[]=2&ids[]=3&ids[]=malicious_input&ids[]=1 

Ausgang:

1, 2, 3, 0 

intval nimmt Argument und gibt seine Integer-Darstellung zurück. malicious_input wird 0 und es ist sicher für die Verwendung in SQL-Abfragen.

Einige verwandte Links:

  1. PHP Prepared Statements.
  2. I have an array of integers, how do I use each one in a mysql query (in php)?
+0

Danke. Das hat für mich funktioniert. – Sergio