2012-03-29 10 views
1

Zunächst einmal vielen Dank für die Erstellung von jqGrid! Es ist ein ausgezeichnetes Stück Arbeit!So sichern Sie die JSON-Daten, die von der AJAX-Datei an jqGrid übergeben werden

Wenn meine index.php-Datei die JSON-codierten Suchkriterien in meine grid.php-Datei schreibt, verarbeitet grid.php die Kriterien, fragt die Datenbank ab und gibt eine JSON-codierte Zeichenfolge zurück an index.php, die in Turn nimmt die Ergebnisse und rendert sie in einer jqGrid-Tabelle.

Alles funktioniert prächtig.

Wenn jedoch ein interner Benutzer seinen Browser auf grid.php verweist, gibt er eine Reihe von Datensätzen zurück, die die Standardkriterien erfüllen (30 Datensätze pro Seite, die Felder und ihre Daten wie programmiert). Und weil ich es Setup zu POST haben, könnte ein Benutzer Abfrageparameter anhängen manuell grid.php, z.B .:

http://foo.bar/grid.php?clientID=123&city=anytown 

I Sicherheitskontrollen beide platziert haben in meiner index.php und grid.php. Als Beispiel:

if(userGroup='Sales'){ 
     $sqlstr = "SELECT * FROM table WHERE group='SALES'"; 
    }else{ 
     $sqlstr = "SELECT * FROM table"; 
    } 

Aber das Problem ist, dass sie diese Prüfungen umgehen können, indem sie ihren Browser direkt auf grid.php zeigen.

Hat jemand Vorschläge, wie die von grid.php zurückgegebene Zeichenfolge gesichert werden kann?

UPDATE

Per Justin Vorschlag, ich denke, dass ich jetzt auf dem richtigen Weg sein könnte. So etwas könnte funktionieren:

$trace = debug_backtrace(); 
    if ($trace[0]['file'] != 'index.php'){ 
     echo "There was an error. Please contact your Systems Administrator."; 
     return 0; 
    } 

Nun, das hat nicht wie erwartet funktioniert. Ich hinterlasse diese Informationen hier für die Nachwelt.

+0

Wie erhalten Sie $ userGroup? Ich vermute, dass Sie nach Sitzungen suchen. Sie tun etwas wie & usergroup = Verkauf sind Sie? – Corbin

+1

Niemals niemals niemals SQL-Anweisungen auf dem Client erstellen. Verwende immer validierte Parameter und tue dies auf dem Server. –

+0

Ich benutze Sitzungen und userGroup wird von index.php über postData gesendet. Ich bin mir jedoch nicht sicher, wie das mindern würde, was grid.php an index.php zurücksendet. – Sanuglia

Antwort

0

Sie müssen PHP-Code hinzufügen, um die grid.php URL zu sichern. Wenn es für Ihre Anwendung machbar ist, können Sie zunächst ein Authentifizierungssystem hinzufügen, um zu verhindern, dass alle Benutzer auf die URL zugreifen. Sobald dies vorhanden ist, können Sie es noch sicherer machen, indem Sie rollenbasierte oder benutzerbasierte Berechtigungen hinzufügen.

Zum Beispiel darf nur die Benutzergruppe "Verkauf" angehängt werden, wenn der Benutzer diese Option anbietet und sie Mitglied der Gruppe "Verkauf" sind.

Wie Sie dies tatsächlich implementieren, hängt davon ab, welches PHP-Framework Sie verwenden (falls vorhanden) und den Anforderungen Ihrer Anwendung.

+0

Hallo Justin, vielen Dank für den Rat! Das Passwort, das diese Datei per .htaccess schützt, funktioniert nicht, aber Ihr Vorschlag gab mir eine Richtung, um damit zu gehen. Ich habe dieses CRM geerbt, und es ist nicht auf irgendeinem Framework aufgebaut, aber sicherlich muss es eine Möglichkeit geben, etwas wie zu programmieren: "Wenn ./index.php mich anruft, dann antworte. Ansonsten gib einen Fehler aus." Nun, um herauszufinden, * wie * das zu tun. Ich bin offen für Vorschläge :) – Sanuglia

+0

Hmm ... Sie wäre wirklich besser dran mit Daten aus der Sitzung, um diese Überprüfung zu tun, wenn die richtigen Daten sind (oder zur Verfügung gestellt werden können).Zum Beispiel, wenn Sie sagen können: if ($ _SESSION ['role_permissions] [' sales ']) {...} '. Aber das bedeutet natürlich größere Änderungen an der Anwendung. –

+0

Guter Anruf. Auch wenn die Änderungen mehr involviert sind, halte ich das für eine praktikable Lösung. Ich werde diesen Schuss geben. Danke eine Milliarde! – Sanuglia

Verwandte Themen