2012-03-30 5 views
0

Ich habe eine Suchseite (search.php), die eine AJAX Last ruft und lädt die Ergebnisse in die #myresults DIV:AJAX, PHP, JSON & Query Strings: Wie können Variablen sicher und effizient weitergegeben werden?

$('#myresults').load('results.php', {"q":"<?php echo urlencode($this->params['url']['q']); ?>","min":<?php echo urlencode($this->params['url']['min']); ?>,max:<?php echo urlencode($this->params['url']['max']); ?>}); 

Die Abfragezeichenfolgeflag wie folgt aussieht:

http://www.mydomain.com/search?q=test&min=50&max=100 

results.php Aussehen wie folgt:

if (isset($data['q']) && isset($data['min']) && isset($data['max'])) { 
$q = urldecode($data['q']); 
$min = urldecode($data['min']); 
$max = urldecode($data['max']); 
} 

Ich nehme die Querystring-Werte und poste sie dann auf der Ergebnisseite. Ist URLEncode erforderlich oder sollte ich htmlspecialchars() verwenden? Ich habe JSON.stringify() gesehen und bin mir einfach nicht sicher, wie ich meine Daten "am besten" kodiere (so dass sie nicht von denjenigen, die den Querystring manipulieren, "gebrochen" werden können) und sie sicher zum Backend zur Verwendung veröffentlichen kann in meinem Backend PHP-Code. Ich bin am meisten besorgt über Apostrophe und Zitate, wie gehe ich damit um?

Antwort

0

auf die jQuery-Dokumentation Nach der Last() erhalten Sie die Variablen als POST erhalten:

Die POST-Methode verwendet wird, wenn die Daten als ein Objekt zur Verfügung gestellt wird; ansonsten wird GET angenommen.

Sie sollten es also nur als normalen POST behandeln.

Wenn Sie die Variablen in einer Abfrage zum Beispiel verwenden würden Sie mysql_escape_string() verwenden, MySQL Injektion zu verhindern.

+0

Aber dies ist kein normaler POST, nicht wahr? Was ist, wenn ein Benutzer Anführungszeichen in der Abfragezeichenfolge hat? Dann ist die JSON-Datenzeichenfolge unterbrochen: 'code'' q:" params ['url'] ['q'];?> " – ews2001

+0

Ihre Frage ist also, wie Sie nutzergenerierte Strings sicher in ein JSON-Objekt implementieren können? Ich denke, addslashes() wäre genug. – rednaw

+0

Ich endete mit addslashes() und es scheint zu funktionieren wie erwartet. – ews2001

1

Das Beste, was zu tun ist, alle Zeichen zu entfernen, das Sie wissen, sind nicht erlaubt, die Sie mit preg_replace tun können. Wenn das nicht möglich ist, funktionieren htmlspecialchars() oder htmlentities().

Und natürlich die Daten entkommen, bevor Sie Ihre Datenbank finden.

Verwandte Themen